STM32F103C8T6实现 SG90 180 °舵机任意角度转动
简介
记录一下, SG90在允许的角度范围实现自由角度转动(按照1°递进)
资料
参考资料
说明
1. 接线
红色 VCC(4.8~5V), 棕色 GND, 橙色 PWM/脉冲引脚
2. 脉冲/PWM示意
3. 根据脉冲示意列图如下
角度 | 脉宽 |
---|---|
0° | 1ms |
90° | 1.5ms |
180° | 2.5ms |
4. 任意角度公式
简单的在Excel中列入 角度和脉宽,计算角度跟脉宽的线性关系, 如下图
并且再拟合校验, 所以公式为 脉宽(ms) = 0.011111111 * 角度 + 0.5
再验证, 9 * n °的精度最高, 如下
实现
1. 定时器配置
设置为50Hz, 至于预分频和重载配置, 是确保在重载计数65536的计数范围内尽可能的大 及 无小数点
72000000/36 = 2000000 = 0.5us, 1个ccr为0.5us, 2000 个 ccr为 1ms, 对于线性计算小数点多的角度可以提高精度
根据定时器配置, 修改任意角度 计算公式 设置占空比参数 ccr = (0.5 + 0.0111 * angle)*2000.0;
代码
实现 缓慢转动一周之后归到圆点再进行转动
void sg90_trunAngle(int angle)
{int ccrMs = 2000;int maxCCR = 2.5 * ccrMs;double ccr = (0.5 + 0.0111 * angle)*ccrMs;if (ccr >= maxCCR)ccr = maxCCR;__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, ccr);
}void serveMove2(void)
{static int angle = 0;angle++;if (angle > 180)angle = 0;sg90_trunAngle(angle);HAL_Delay(100);
}