使用舵機型號為MG99R
產品參數:
速度: 4.8v 0.20sec/60° 6.0V 0.19sec/60°
扭力:4.8V 13KG-cm 6.0V 15KG-cm
電壓 4.8V-7.2V
空載工作電流:120Ma 堵轉工作電流:1450mA
響應脈寬時間=<5usec
上升沿時間對應角度:
0.5ms 0 度
1ms 45度
1.5ms 90度
2.0ms 135度
2.5ms 180度
驅動舵機需要一個20ms的時基脈沖,高電平在0.5-2.5ms內
舵機有三根線:黃色為信號線,紅色為電源線,棕色為地線。
單片機源程序:
- #include <reg51.h>
- unsigned int target=6,percent=0;//將最初的高電平時間設為0.6ms
- sbit pwm=P0^0;//P0^0口輸出脈沖信號
- sbit key1=P3^0;
- sbit key2=P3^1;
- //函數說明
- void Timer0initial();
- void initial_Timer();
- void delay(unsigned int x);
- void keyscan();
- void delay(unsigned int x)//延時
- {
- unsigned int i,j;
- for(i=0;i<x;++i)
- for(j=120;j>0;--j);
- }
- void keyscan()
- {
- if(key1==0)
- {
- delay(3);
- if(key1==0)
- {
- if(target>=7)
- {
- target-=1;
- }
- while(key1==0)
- {P1=0x00;}//避免長按一直轉動
- }
- P1=0xff;
- }
- if(key2==0)//剛啟動只能按按鍵2
- {
- delay(3);
- if(key2==0)
- {
- if(target<=25)
- {
- target+=5;//可以調節舵機每次轉過的角度
- }
- while(key2==0)
- {P1=0x00;}
- }
- P1=0xff;
- }
- }
- void initial()
- {
- key1=1;
- key2=1;
- P1=0xff;//設置P1初值
- initial_Timer();
- }
- void Timer0initial()
- {
- TH0=(65536-65)/256;
- TL0=(65536-65)%256;
- }//每0.1ms產生一次中斷(實測)
- void initial_Timer()
- {
- EA=1;//開啟總中斷
- ET0=1;//允許T0中斷
- TMOD=0x01;//使用工作方式1
- Timer0initial();
- TR0=1;//軟件中斷允許
- }
- void Timer0() interrupt 1 using 0//中斷方式為定時器/計數器0內部中斷
- {
- percent+=1;
- if(percent==200)
- {
- percent=0;
- pwm=1;//高電平輸出
- }
- if(percent==target)
- {
- pwm=0;
- }
- Timer0initial();
- }
- void main()
- {
- initial();
- while(1)
- {
- keyscan();
- }
- }
復制代碼
|