找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6124|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

stm32與51控制舵機108度來回運動的源程序與原理(動態(tài)圖片演示)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250813 發(fā)表于 2018-4-25 15:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
通過stm32實現(xiàn)舵機108度來回運動
根據(jù)工作原理,舵機的具體控制方法就是需要一個20ms左右的時基脈沖,
該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。
脈沖寬度從0.5ms~2.5ms,相對應(yīng)舵盤的位置為0~180度,呈線性變化。

***************一般舵機脈沖寬度20ms,高電平寬度與角度對應(yīng)關(guān)系***********
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;

根據(jù)上面的原理,我們知道單片機只要產(chǎn)生20ms的脈沖信號,通過改變高電平時間從0.5ms到2.5ms變化,就能使舵機轉(zhuǎn)動到對應(yīng)的角度

舵機控制原理動態(tài)圖片演示:




stm32單片機源程序如下:
  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ù)初始化         
  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單片機:
  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. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼





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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:385135 發(fā)表于 2019-3-10 20:03 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

板凳
ID:440075 發(fā)表于 2019-8-4 15:14 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表