SG90 180°舵机的使用
SG90的介绍
舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统,可以根据控制信号来输出指定的角度(常见的有0-90°、0-180°、0-360°)。
其实质是一个伺服马达。又分为模拟舵机和数字舵机。
- 模拟舵机:需要不断发送PWM信号,才能旋转到指定位置。(例如想转10°,要不断发送10°PWM信号直到指定位置才能停止)
- 数字舵机:只需给一个PWM信号,即可旋转到指定位置。(例如想转10°,发送一次10°PWM信号就可以转到10°)
接线:
红色----VCC
棕色----GND
橙色----信号线(连接到单片机输出PWM的引脚)
对180°的舵机来说,舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分,对应控制180°舵机的0-180°,呈线性变化。
以180度角度伺服为例,那么对应的控制关系是这样的(t为高电平时间):
t=0.5ms(占空比2.5%)---------0°;
t=1.0ms(占空比5%)-----------45°;
t=1.5ms(占空比7.5%)---------90°;
t=2.0ms(占空比10%)---------135°;
t=2.5ms(占空比12.5%)-------180°;
即:高电平时间=0.5ms+(角度/180°)×2ms高电平时间=0.5ms+(角度/180°)×2ms高电平时间=0.5ms+(角度/180°)×2ms
注意:舵机有一个基准角度即0°,所有角度的控制都是相对基准角度来说的,如果已经到达指定角度,则舵机不会再旋转。舵机的旋转一般为逆时针旋转。
180°的视角:
代码说明
采用通用定时器的PWM输出控制舵机,周期为20ms,通过改变占空比改变角度。以定时器3的通道一为例。
-
图形配置
-
重要语句
开启PWM中断
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);
改变占空比
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,Pulse);
-
代码
改变角度函数
因为计数器频率为1M,故理论上角度的精度可达0. 1°,但考虑到舵机的控制精度,建议角度精度为 1°
void Angle_Control(uint16_t angle)
{
uint16_t pulse;
pulse=500+(int)(angle*100/9);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,pulse);
}
中断回调函数
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
n++;
}
参考文档:https://blog.youkuaiyun.com/Chrstian/article/details/124564112