在編寫用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);
}
}用詞如有不妥,請及時指出,多謝
|