基于STM32对关于舵机SG90及PWM的介绍和认知

成为码农半年了,第一次在csdn上写博客,意在分享自己的学习方法和对学习内容的鉴定。小白一枚,望指点。

1.我认为的舵机

舵机由电动机、传动部件和离合器组成。接受指令而工作。舵机大部分由伺服电机组成,舵机接受PWM信号,舵机就旋转角度。所以就可以给舵机输入不同的信号,来控制其旋转到不同的角度。

2.舵机的工作原理

舵机有三根接线:电源线,地线,信号线。电源线和地线大家都知道,PWM波就是从信号线输出到舵机。SG90舵机接收的PWM信号频率为50HZ,T=1/f,所以周期为20ms。当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。

3。如何使用PWM来控制舵机的角度

由公式:72000000/((TIM_Period+1)*(TIM_Prescaler+1)) = f可以求出TIM_Period(周期)和TIM_Prescaler(预分频)的值。   占空比:t/T。t即为脉宽。根据舵机50Hz = 20ms 一个周期,如果频率为50Hz ,也就是说一个周期是20ms ,那么一秒钟就有 50次PWM周期。由于PWM周期为20ms,如果舵机会转动90度,占空比就应该为1.5ms/20ms = 7.5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器值就为200-200*7.5% =185.                                                                          所以在SG90云台中:

#define SG90_Right_90     TIM_SetCompare2(TIM2,195)
#define SG90_Right_45     TIM_SetCompare2(TIM2,190)

#define SG90_Front           TIM_SetCompare2(TIM2,185)

#define SG90_Left_45         TIM_SetCompare2(TIM2,180)
#define SG90_Left_90         TIM_SetCompare2(TIM2,175)

                                                

ps:因为我设置转动90度时为电机的正前方

4.代码

搞懂原理之后写代码就要简单很多了。将PWM初始化,开启相应的定时器和IO口并使能定时器就OK啦。写完之后把SG90_Front,SG90_Left_45,SG90_Right_45调用到主函数中,然后下载进去看看效果就知道有没有成功了,哪里不对改哪里。对了记得加上延迟函数不然你很难观察出来。

第一次写我的心得,相当于又复习一次。我认为只有多做项目多动手才能实打实的了解。下一次我可能会把其他模块的新的都写出来,因为我这个是为了做小车而写的代码。互勉!

你可能感兴趣的