标题: 详解如何用STM32调整舵机角度 [打印本页]

作者: 西瓜味    时间: 2019-7-30 11:04
标题: 详解如何用STM32调整舵机角度
在编写用PWM来控制舵机转动的32程序中,因为找不到如何让它转动适当的角度,所以询问了学长,知道了舵机转动0度代表它的占空比是2.5%,转动180度代表它的占空比是12.5%。
即设arr(自动重装载值)为x时。
转动角度所对应的值=(x+1)*(1-占空比)(将PWM极性设置为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)*占空比(将PWM极性设置为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);
        }
}用词如有不妥,请及时指出,多谢




作者: yx19981001    时间: 2019-11-15 18:11
更确切的描述是脉宽即脉冲宽度决定角度奥,有的舵机可能支持不仅仅50hz的信号,但脉宽1.5ms定义为中心角度是行业通用的。而且不同舵机转动范围不同,有90-180-270,用占空比定义会造成一些不便




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1