【硬石科技】电机系列教学(基于STM32)——舵机的控制
舵机的控制
舵机内部结构和工作原理
舵机本身就是一个闭环的控制系统。可调电阻就充当传感器,反馈舵机的当前位置角度。
实现舵机的控制
大部分舵机的控制信号的周期都是20ms,也有少部分例外。
代码
控制舵机的定时器配置
#include "bsp_SteerTim.h" static void STEER_TIM_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 输出比较通道1 GPIO 初始化RCC_APB2PeriphClockCmd(STEER_TIM_CH1_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = STEER_TIM_CH1_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(STEER_TIM_CH1_PORT, &GPIO_InitStructure);}static void STEER_TIM_Mode_Config(void)
{// 开启定时器时钟,即内部时钟CK_INT=72MSTEER_TIM_APBxClock_FUN(STEER_TIM_CLK,ENABLE);/*--------------------时基结构体初始化-------------------------*/// 配置周期,这里配置为100KTIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断TIM_TimeBaseStructure.TIM_Period=STEER_TIM_Period; // 驱动CNT计数器的时钟 = Fck_int/(psc+1)TIM_TimeBaseStructure.TIM_Prescaler= STEER_TIM_Prescaler; // 时钟分频因子 ,配置死区时间时需要用到TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 计数器计数模式,设置为向上计数TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 重复计数器的值,没用到不用管TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 初始化定时器TIM_TimeBaseInit(STEER_TIM, &TIM_TimeBaseStructure);/*--------------------输出比较结构体初始化-------------------*/ TIM_OCInitTypeDef TIM_OCInitStructure;// 配置为PWM模式1TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// 输出使能TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;// 输出通道电平极性配置 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 输出比较通道 1TIM_OCInitStructure.TIM_Pulse = 50;//50对应的脉宽为0.5ms,让舵机初始位置为最左(右)边TIM_OC1Init(STEER_TIM, &TIM_OCInitStructure);TIM_OC1PreloadConfig(STEER_TIM, TIM_OCPreload_Enable);// 使能计数器TIM_Cmd(STEER_TIM, ENABLE);
}void STEER_TIM_Init(void)
{STEER_TIM_GPIO_Config();STEER_TIM_Mode_Config();
}/*********************************************END OF FILE**********************/
相关头文件
#ifndef __BSP_STEERTIME_H
#define __BSP_STEERTIME_H#include "stm32f10x.h"#define STEER_TIM TIM3
#define STEER_TIM_APBxClock_FUN RCC_APB1PeriphClockCmd
#define STEER_TIM_CLK RCC_APB1Periph_TIM3
#define STEER_TIM_Period (2000 - 1)
#define STEER_TIM_Prescaler (720 - 1)
// TIM3 输出比较通道1
#define STEER_TIM_CH1_GPIO_CLK RCC_APB2Periph_GPIOA
#define STEER_TIM_CH1_PORT GPIOA
#define STEER_TIM_CH1_PIN GPIO_Pin_6/**************************函数声明********************************/void STEER_TIM_Init(void);#endif /* __BSP_STEERTIME_H */
舵机控制函数
#include "Steercontrol.h"
#include "bsp_SteerTim.h"
u32 full = 2000;
/************************************************************************************
*函数名称:SteerAngle
*输入参数:angle 角度, which
*输出参数:错误代号
*功能;设置舵机角度
*************************************************************************************/
unsigned char SteerAngle(float angle,unsigned char which)
{/////截止判断,角度0-180,which是1-4if(angle<0||angle>180){return 1;}if(which<1||which>4){return 2;}/////角度转换u32 rate=(u32)((angle/180.0*0.1+0.025)*full);switch(which){case 1:TIM_SetCompare1(STEER_TIM ,rate);break;case 2:TIM_SetCompare2(STEER_TIM ,rate);break;case 3:TIM_SetCompare3(STEER_TIM ,rate);break;case 4:TIM_SetCompare4(STEER_TIM ,rate);break;default:break;}return 0;
}
【硬石科技】电机系列教学(基于STM32)——舵机的控制相关推荐
- “药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+英文小写+数字)
项目名称:"药药切克闹"系列-基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字) CSDN:YANG-03 ...
- 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享
设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...
- 【资料转发分享】基于STM32智能路灯灯光自动控制系统设计-基于STM32无刷电机BLDC速度控制器系统设计-基于STM32热释人体感应智能门禁报警系统设计-基于STM32居家加湿器控制仿真系统设计
1604基于STM32智能路灯灯光自动控制系统设计-毕设课设资料 实现的功能如下,下图是仿真原理图: 通过ARM内部的ADC采集光敏电阻电压,判断电压值 电压值低于设定的值,表示光强太弱,开路灯 光强 ...
- 基于STM32的语言控制智能家居系统
承接单片机定做 文章目录 前言 一.设计目标及内容: 二.框架思路 三.实现 喜欢请点赞哦! 前言 基于STM32的语言控制智能家居系统,主控使用STM32F103(正点原子战舰板子) 一.设计目标及 ...
- (毕业设计资料)基于STM32智能窗帘控制系统设计
096[电路方案]基于STM32智能窗帘控制系统设计 基于STM32单片机的智能窗帘控制系统.该系统集蓝牙遥控.人声识别控制.空调红外遥控.24c02数据储存.433m遥控.热释电红外感应.温湿度检测 ...
- 液位系统c语言程序,基于STM32的液位控制系统设计
程训明 董婷婷 摘 要:本文设计一种基于STM32的液位控制系统,该控制系统采用STM32作为控制核心,使用压力传感器采集水箱内的液位,通过串口触摸屏进行液位显示和给定,对水位进行有效的闭环控制.系统 ...
- 写基于stm32智能家居控制系统设计论文
写作一篇基于STM32的智能家居控制系统设计论文需要涵盖以下内容: 简要介绍STM32微控制器的硬件特性和软件开发环境: 分析当前市场上关于智能家居控制系统的发展现状,并阐述为什么选择STM32作为系 ...
- 基于STM32智能家居控制系统软件设计及实现
1.1 系统流程图 智能家居控制系统的软件设计主要使用Keil uVision5进行STM32主烧录程序的编写,主程序完成的功能主要为接收并判断语音识别模块传过来的信息,然后根据满足条件的不同进行对应 ...
- (学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)
使用到的各元件: 1.12V电源一个 2.单片机:STM32F103C8T6 3.直流电机4个 4.电机驱动模块:L298N 5.降压模块两个 6:杜邦线若干 对于直流电机的转动控制如下表 两边电平 ...
- 入门电机系列之4步进电机
入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 舵机的原理与应用. 文章目录 入门电机系列,基于STM32硬 ...
最新文章
- Selenium2+python自动化24-js处理富文本(带iframe)
- BZOJ4008. [HNOI2015]亚瑟王 期望概率dp
- 金山网络CEO傅盛:简约之美
- Android 音频开发(二) 采集一帧音频数据
- scrapy 伪装代理和fake_userAgent的使用
- Less 官方文档学习笔记
- 2020软件测试学科全套上课视频教程网盘免费分享
- 四大逆向工程软件简介
- WPS自己用来看的 方便记录
- mysql数据库事务模拟转账_mysql数据库事务阐发:实现银行转账功能的优化,附代码+实现过程...
- Automator——为mac创建自定义mac右键菜单
- 八类网线和七类网线的区别_7类网线和8类网线到底有何不同?
- 电力系统中的Kron简化,含MATLAB代码(全网唯一)
- Android中免root的hook框架Legend原理解析
- C++读取读取csv、xls文件的类
- iis下ISAPI_Rewrite配置及 iis rewrite 规则书写
- 带内网络遥测INT--In-band Network Telemetry
- Vueb报错[WDS] Errors while compiling. Reload prevented
- 《Windows 8 权威指南》——第1章 Windows 8已经到来的盛宴 1.1 Windows商店
- Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章