目录
[1. 什么是舵机](#1. 什么是舵机)
[2. 怎么控制舵机](#2. 怎么控制舵机)
[1. 在 SYS 选项里,将 Debug 设为 Serial Wire编辑](#1. 在 SYS 选项里,将 Debug 设为 Serial Wire编辑)
[2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator编辑](#2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator编辑)
[3. 时钟配置](#3. 时钟配置)
PWM介绍
STM32F103C8T6 PWM资源:
高级定时器(TIM1):7路
通用定时器(TIM2~TIM4):各4路
PWM输出模式:
- PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
- PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
PWM占空比:
是一个脉冲周期内,高电平的时间与整个周期时间的比例
由TIMx_CCRx寄存器决定,通常设置CNT < CCRx为有效电平中的高电平,则CRR/ARR决定占空比,例如CRR为100,ARR为500,则占空比为20%
PWM周期与频率公式:
假如:PSC = 71Hz,ARR = 499Hz,Tclk = 72M Hz,
则T为 72 x 500 / 72000000 = 0.5ms
频率为 1 / T = 2kHz
SG90舵机介绍
1. 什么是舵机
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制 用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90°、0-180°、0-360°
2. 怎么控制舵机
向黄色信号线"灌入"PWM信号
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
确定周期/频率:
如果周期为20ms,则 PSC=7199,ARR=199
角度控制
0.5ms-------------0度; 2.5% 对应函数中CCRx为5
1.0ms------------45度; 5.0% 对应函数中CCRx为10
1.5ms------------90度; 7.5% 对应函数中CCRx为15
2.0ms-----------135度; 10.0% 对应函数中CCRx为20
2.5ms-----------180度; 12.5% 对应函数中CCRx为25
SG90舵机介绍实战
编程实现:
每隔1s,转动一个角度:0度 --> 45度 --> 90度 --> 135度 --> 180度 --> 0度
接线:
1. 在 SYS 选项里,将 Debug 设为 Serial Wire
2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator
3. 时钟配置
4.配置定时器设置PWM,有效电平设置为High(低电平)
5.示例代码:
cpp
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
while (1)
{
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 5);
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 10);
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 15);
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 20);
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 25);
}