STM32F103C8T6实现 SG90 180 °舵机任意角度转动
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);
}
更多推荐



所有评论(0)