標(biāo)題: 51單片機(jī)控制MG99R舵機(jī)源碼 [打印本頁]

作者: 唱歌睡覺打豆豆    時間: 2019-3-11 12:41
標(biāo)題: 51單片機(jī)控制MG99R舵機(jī)源碼
使用舵機(jī)型號為MG99R

產(chǎn)品參數(shù):

速度: 4.8v 0.20sec/60°           6.0V 0.19sec/60°

扭力:4.8V 13KG-cm               6.0V  15KG-cm

電壓 4.8V-7.2V

空載工作電流:120Ma             堵轉(zhuǎn)工作電流:1450mA

響應(yīng)脈寬時間=<5usec

上升沿時間對應(yīng)角度:

0.5ms           0

1ms           45

1.5ms           90

2.0ms           135

2.5ms           180

驅(qū)動舵機(jī)需要一個20ms的時基脈沖,高電平在0.5-2.5ms內(nèi)

舵機(jī)有三根線:黃色為信號線,紅色為電源線,棕色為地線。

單片機(jī)源程序:
  1. #include <reg51.h>
  2. unsigned int target=6,percent=0;//將最初的高電平時間設(shè)為0.6ms
  3. sbit pwm=P0^0;//P0^0口輸出脈沖信號
  4. sbit key1=P3^0;
  5. sbit key2=P3^1;
  6. //函數(shù)說明
  7. void Timer0initial();
  8. void initial_Timer();
  9. void delay(unsigned int x);
  10. void keyscan();

  11. void delay(unsigned int x)//延時
  12. {
  13.         unsigned int i,j;
  14.         for(i=0;i<x;++i)
  15.         for(j=120;j>0;--j);
  16. }
  17. void keyscan()
  18. {
  19.         if(key1==0)
  20.         {
  21.                 delay(3);
  22.                 if(key1==0)
  23.                 {
  24.                         if(target>=7)
  25.                         {
  26.                                 target-=1;
  27.                         }
  28.                         while(key1==0)
  29.                         {P1=0x00;}//避免長按一直轉(zhuǎn)動
  30.                 }
  31.                 P1=0xff;
  32.         }
  33.         if(key2==0)//剛啟動只能按按鍵2
  34.         {
  35.                 delay(3);
  36.                 if(key2==0)
  37.                 {
  38.                         if(target<=25)
  39.                         {
  40.                                 target+=5;//可以調(diào)節(jié)舵機(jī)每次轉(zhuǎn)過的角度
  41.                         }
  42.                         while(key2==0)
  43.                         {P1=0x00;}
  44.                 }
  45.                 P1=0xff;
  46.         }
  47. }
  48. void initial()
  49. {
  50.         key1=1;
  51.         key2=1;
  52.         P1=0xff;//設(shè)置P1初值
  53.         initial_Timer();
  54. }
  55. void Timer0initial()
  56. {
  57.         TH0=(65536-65)/256;
  58.         TL0=(65536-65)%256;
  59. }//每0.1ms產(chǎn)生一次中斷(實測)
  60. void initial_Timer()
  61. {
  62.         EA=1;//開啟總中斷
  63.         ET0=1;//允許T0中斷
  64.         TMOD=0x01;//使用工作方式1
  65.         Timer0initial();
  66.         TR0=1;//軟件中斷允許
  67. }

  68. void Timer0() interrupt 1 using 0//中斷方式為定時器/計數(shù)器0內(nèi)部中斷
  69. {
  70.         percent+=1;
  71.         if(percent==200)
  72.         {
  73.                 percent=0;
  74.                 pwm=1;//高電平輸出
  75.         }
  76.         if(percent==target)
  77.         {
  78.                 pwm=0;
  79.         }
  80.         Timer0initial();
  81. }
  82. void main()
  83. {
  84.         initial();
  85.         while(1)
  86.         {
  87.                 keyscan();
  88.         }
  89. }
復(fù)制代碼







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