使用舵机型号为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();
- }
- }
复制代码
|