標(biāo)題: stm32與51控制舵機(jī)108度來(lái)回運(yùn)動(dòng)的源程序與原理(動(dòng)態(tài)圖片演示) [打印本頁(yè)]

作者: 黑哈哈    時(shí)間: 2018-4-25 15:47
標(biāo)題: stm32與51控制舵機(jī)108度來(lái)回運(yùn)動(dòng)的源程序與原理(動(dòng)態(tài)圖片演示)
通過(guò)stm32實(shí)現(xiàn)舵機(jī)108度來(lái)回運(yùn)動(dòng)
根據(jù)工作原理,舵機(jī)的具體控制方法就是需要一個(gè)20ms左右的時(shí)基脈沖,
該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。
脈沖寬度從0.5ms~2.5ms,相對(duì)應(yīng)舵盤(pán)的位置為0~180度,呈線性變化。

***************一般舵機(jī)脈沖寬度20ms,高電平寬度與角度對(duì)應(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),通過(guò)改變高電平時(shí)間從0.5ms到2.5ms變化,就能使舵機(jī)轉(zhuǎn)動(dòng)到對(duì)應(yīng)的角度

舵機(jī)控制原理動(dòng)態(tài)圖片演示:




stm32單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "pwm.h"

  5. int main(void)
  6. {        
  7.          
  8.         
  9.         delay_init();                     //延時(shí)函數(shù)初始化         
  10.         LED_Init();                          //初始化與LED連接的硬件接口
  11.         TIM1_PWM_Init(199,7199);//不分頻。PWM頻率===(7200*200)/72000000=0.02=20ms
  12.            while(1)
  13.         {
  14.                
  15.                
  16.                   TIM_SetCompare1(TIM1,195);

  17.      delay_ms(500);

  18.     TIM_SetCompare1(TIM1,190);

  19.      delay_ms(500);

  20.     TIM_SetCompare1(TIM1,185);

  21.      delay_ms(500);
  22.                
  23.                 TIM_SetCompare1(TIM1,180);

  24.      delay_ms(500);
  25.                
  26.                 TIM_SetCompare1(TIM1,175);

  27.      delay_ms(500);
  28.                
  29.                 TIM_SetCompare1(TIM1,170);
  30.                
  31.                  delay_ms(500);
  32.                  
  33.                 TIM_SetCompare1(TIM1,175);
  34.                
  35.                  delay_ms(500);
  36.                  
  37.                  TIM_SetCompare1(TIM1,180);
  38.                
  39.                  delay_ms(500);
  40.                  
  41.                  TIM_SetCompare1(TIM1,185);
  42.                
  43.                  delay_ms(500);
  44.                  
  45.                
  46.                
  47.         }
  48. }

復(fù)制代碼
51單片機(jī):
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit pwm=P0^0;
  5. sbit key7=P3^7;
  6. uchar count=0;


  7. void delayms(uint xms)
  8. {
  9.      uint i,j;
  10.          for(i=xms;i>0;i--)
  11.          for(j=110;j>0;j--);
  12. }

  13. void Timer0_Init()
  14. {
  15.       TMOD=0x01;
  16.             TH0=(65536-200)/256;
  17.             TL0=(66636-200)%256;
  18.             EA=1;
  19.             ET0=1;
  20.             TR0=0;
  21. }
  22. void Timer0()interrupt 1
  23. {
  24.      TH0=(65536-200)/256;
  25.          TL0=(66636-200)%256;
  26.          
  27.          if(count<30)
  28.             pwm=1;
  29.          else
  30.          pwm=0;
  31.          count++;
  32.          if(count==100)
  33.          {
  34.          TR0=0;
  35.          count=0;
  36.          }
  37.          
  38. }
  39. void keyscan()
  40. {
  41.     if(key7==0)
  42.         {
  43.             delayms(10);
  44.             if(key7==0)
  45.             {
  46.               while(!key7);
  47.                  
  48.                 TR0=1;
  49.             }
  50.         }
  51. }
  52.     void main()
  53.     {
  54.         Timer0_Init();
  55. ……………………

  56. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼





所有資料51hei提供下載:
PWM舵機(jī).zip (3.04 MB, 下載次數(shù): 126)



作者: 1246698540    時(shí)間: 2019-3-10 20:03
感謝分享
作者: wangjiexiang    時(shí)間: 2019-8-4 15:14
謝謝分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1