我也來發一個,正點原子stm32 mini板通過三個按鍵PWM控制舵機的程序。
根據工作原理,舵機的具體控制方法就是需要一個20ms左右的時基脈沖,
該脈沖的高電平部分一般為0.5ms~2.5ms范圍內的角度控制脈沖部分。
脈沖寬度從0.5ms~2.5ms,相對應舵盤的位置為0~180度,呈線性變化。
***************一般舵機脈沖寬度20ms,高電平寬度與角度對應關系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;
根據上面的原理,我們知道單片機只要產生20ms的脈沖信號,通過改變高電平時間從0.5ms到2.5ms變化,就能使舵機轉動到對應的角度
單片機源程序如下:
- /*
- 此程序是從網上找到的,本人修改了下
- 程序小白,如有錯誤,請見諒^_^
- */
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "pwm.h"
- #include "key.h"
- #define key1 PCin(5)
- #define key2 PAin(15)
- #define key3 PAin(0)
- u16 cout;
- int main(void)
- {
- cout=1850;
- KEY_Init();
- delay_init(); //延時函數初始化
- LED_Init(); //初始化與LED連接的硬件接口
- TIM1_PWM_Init(1999,719); //PWM頻率===(2000*720)/72000000=0.02=20ms
- while(1)
- {
- if(key3==0&&key1==0) //key1按下,舵機緩慢正向轉動
- {
- if(key1==0)
- {
- delay_ms(5);
- cout+=1;
- }
-
-
- }
- else if(key3==1&&key1==0) //key1、key3同時按下,舵機加速轉動
- {
- delay_ms(5);
- cout+=5;
- }
- if(key1==1&&key2==1&&key3==0) //舵機回到90度(起始位置)
- {
- cout=1850;
- }
- if(key3==0&&key2==0) //key2按下,舵機緩慢反向轉動
- {
- delay_ms(5);
- cout-=1;
- }
- else if(key3==1&&key2==0) //key2、key3同時按下,舵機加速轉動
- {
- delay_ms(5);
- cout-=5;
- }
-
- TIM_SetCompare1(TIM1,cout); //PWM輸出
- delay_ms(50);
-
-
- }
-
- }
復制代碼
0.png (45.01 KB, 下載次數: 178)
下載附件
2017-9-30 20:49 上傳
所有資料51hei提供下載:
PWM控制舵機.rar
(395.65 KB, 下載次數: 498)
2017-9-30 20:49 上傳
點擊文件名下載附件
正點原子stm32 mini板通過三個按鍵PWM控制舵機程序 下載積分: 黑幣 -5
|