赞
踩
舵机组成
舵机的主要组成部分为伺服电机,所谓伺服就是服从信号的要求而动作。在信号来之前,转子停止不动;信号来到之后,转子立即运动。因此我们就可以给舵机输入不同的信号,来控制其旋转到不同的角度。
舵机接收的是PWM信号,当信号进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。简单来说就是给舵机一个特定的PWM信号,舵机就可以旋转到指定的位置。
舵机上有三根线,分别是GND、VCC和SIG,也就是地线、电源线和信号线,其中的PWM波就是从信号线输入给舵机的。首先是舵机的引线,**一般为三线控制:红色为电源,棕色为地,黄色为信号。**控制舵机的时候,需要不断的给PWM波才能使得舵机在某个角度有扭矩。
一般来说,舵机接收的PWM信号频率为50HZ,即基本周期为20ms。如下图:
编码
在代码中要特别注意的是时基结构体的TIM_Period(自动重装载寄存器值,简称arr)和TIM_Prescaler(预分频寄存器值,简称psc),因为这两个决定了输出PWM信号的周期。具体的周期计算公式为:周期=(arr+1)*(psc+1)/CLK。其中CLK为计数器的时钟频率,我的是72MHZ,也就是72000000。最后计算结果单位为秒,结果为0.02s,也就是20ms。这样的配置就是为了让输出的PWM信号达到前面说到的舵机要求的20ms周期。
前面说过,在周期20ms的PWM信号中,不同的脉宽对应舵机不同的转动角度,在0.5ms-2.5ms间有效,因此我们可以在main函数中配置几个不同的脉宽。要注意的是stm32并不直接配置脉宽,而是通过配置占空比来配置脉宽的。
角度
角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。范围为(0~180°)
舵机转动0度代表它的占空比是2.5%,转动180度代表它的占空比是12.5%。即设arr(自动重装载值)为x时。转动角度所对应的值=(x+1)*(1-占空比)(将PWM1极性设置为TIM_OCPolarity_High时)
int main(void) { delay_init(); //延时函数初始化 LED_Init(); //LED端口初始化 TIM2_PWM_Init(1999,719); //不分频,PWM频率=72000000/720/2000=50hz while(1){ TIM_SetCompare2(TIM2,1950); //对应0度 2.5% delay_ms(1000); TIM_SetCompare2(TIM2, 1900); //对应45度 5% delay_ms(1000); TIM_SetCompare2(TIM2, 1850); //对应90度 7.5% delay_ms(1000); TIM_SetCompare2(TIM2, 1800); //对应135度 10% delay_ms(1000); TIM_SetCompare2(TIM2,1750); //对应180度 12.5% delay_ms(1000); } }
转动角度所对应的值=(x+1)*占空比(将PWM2极性设置为TIM_OCPolarity_Low时),程序如下:
int main(void) { delay_init(); //延时函数初始化 LED_Init(); //LED端口初始化 TIM2_PWM_Init(1999,719); //不分频,PWM频率=72000000/720/2000=50hz while(1) { TIM_SetCompare2(TIM2,250); //对应180度 12.5% delay_ms(1000); TIM_SetCompare2(TIM2, 200); //对应135度 10% delay_ms(1000); TIM_SetCompare2(TIM2, 150); //对应90度 7.5% delay_ms(1000); TIM_SetCompare2(TIM2, 100); //对应45度 5% delay_ms(1000); TIM_SetCompare2(TIM2,50); //对应0度 2.5% delay_ms(1000); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。