|
我也來發(fā)一個(gè),正點(diǎn)原子stm32 mini板通過三個(gè)按鍵PWM控制舵機(jī)的程序。
根據(jù)工作原理,舵機(jī)的具體控制方法就是需要一個(gè)20ms左右的時(shí)基脈沖,
該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。
脈沖寬度從0.5ms~2.5ms,相對應(yīng)舵盤的位置為0~180度,呈線性變化。
***************一般舵機(jī)脈沖寬度20ms,高電平寬度與角度對應(yīng)關(guān)系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;
根據(jù)上面的原理,我們知道單片機(jī)只要產(chǎn)生20ms的脈沖信號(hào),通過改變高電平時(shí)間從0.5ms到2.5ms變化,就能使舵機(jī)轉(zhuǎn)動(dòng)到對應(yīng)的角度
單片機(jī)源程序如下:
- /*
- 此程序是從網(wǎng)上找到的,本人修改了下
- 程序小白,如有錯(cuò)誤,請見諒^_^
- */
- #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(); //延時(shí)函數(shù)初始化
- LED_Init(); //初始化與LED連接的硬件接口
- TIM1_PWM_Init(1999,719); //PWM頻率===(2000*720)/72000000=0.02=20ms
- while(1)
- {
- if(key3==0&&key1==0) //key1按下,舵機(jī)緩慢正向轉(zhuǎn)動(dòng)
- {
- if(key1==0)
- {
- delay_ms(5);
- cout+=1;
- }
-
-
- }
- else if(key3==1&&key1==0) //key1、key3同時(shí)按下,舵機(jī)加速轉(zhuǎn)動(dòng)
- {
- delay_ms(5);
- cout+=5;
- }
- if(key1==1&&key2==1&&key3==0) //舵機(jī)回到90度(起始位置)
- {
- cout=1850;
- }
- if(key3==0&&key2==0) //key2按下,舵機(jī)緩慢反向轉(zhuǎn)動(dòng)
- {
- delay_ms(5);
- cout-=1;
- }
- else if(key3==1&&key2==0) //key2、key3同時(shí)按下,舵機(jī)加速轉(zhuǎn)動(dòng)
- {
- delay_ms(5);
- cout-=5;
- }
-
- TIM_SetCompare1(TIM1,cout); //PWM輸出
- delay_ms(50);
-
-
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
PWM控制舵機(jī).rar
(395.65 KB, 下載次數(shù): 498)
2017-9-30 20:49 上傳
點(diǎn)擊文件名下載附件
正點(diǎn)原子stm32 mini板通過三個(gè)按鍵PWM控制舵機(jī)程序
|
評(píng)分
-
查看全部評(píng)分
|