首页 单片机控制舵机程序

单片机控制舵机程序

举报
开通vip

单片机控制舵机程序单片机控制舵机程序 #include#include#include#define uchar unsigned char #define uint unsigned int sbit IN1=P0^0 ; sbit IN2=P0^1 ;sbit EA1=P0^5 ;sbit dj=P0^7 ; //舵机口 uint t=0;//中断次数 uchar zk;//高平中断次数电电电电电电 uchar p=0;//定电pwm占空 比 void delay(uint z){ uint i,j ; for(i=0;i>8...

单片机控制舵机程序
单片机控制舵机程序 #include#include#include#define uchar unsigned char #define uint unsigned int sbit IN1=P0^0 ; sbit IN2=P0^1 ;sbit EA1=P0^5 ;sbit dj=P0^7 ; //舵机口 uint t=0;//中断次数 uchar zk;//高平中断次数电电电电电电 uchar p=0;//定电pwm占空 比 void delay(uint z){ uint i,j ; for(i=0;i>8 ;//100us一次中断 TL0=-100%256 ; if(t==0)zk=p ; if(t=zk) dj=0 ; t++; if(t>=200) t=0 ; //20mspwm周期 } void turn_left(){ IN1=1 ; IN2=0 ; EA1=1 ;//电 机工作p=5;//0.5ms delay(600); } void turn_right(){ IN1=1 ; IN2=0 ; EA1=1 ;//电机工作 p=25 ;//2.5ms delay(600); } void main() { TMOD=0x01 ;//定器电电0工作在方式1 TH0=-100>>8; TL0=-100%256 ; ET0=1 ;//电中断 EA=1 ;//电电中断 TR0=1 ;//定器电电0启电 while(1) { turn_left(); turn_right(); } } 一般的航模舵机的准脉是电电电电电1000us到2000us,不是500us和2500us电电电电电电一法是机器人舵机出来的电电电电,但实实是有不少舵机只实1000us到2000us的,只有那些实明是机器人舵机的舵机,才实500和2500,其的要看人品它, 伺服机主要参数电 性能参数 工作电电 4.8V,6V 电流 10 mA,静实, 力矩 3kg/cm 外型尺寸 41×42×20 mm 重量 48g 电电角度 ,60度 , ,60度 ************************************************************* 3个引脚功能如下 黑色 GND 地电 电色 5V电电 源 黄色 控制信号 ************************************************************* ******************************************************************** K1 电 中, 0 度位置 ,* *K2 逆到极限位置 电 电 电 电 (-60 度)* *K3 电 电 电 电 电 到极限位置(+60 度)* *******************************************************************/ #include sbit out=P1^0 ; //舵机信号电 sbit K1=P1^4 ; sbit K2=P1^5 ; sbit K3=P1^6 ; char code reserve[3]_at_ 0x3b ;//保留0x3b电始的3个字电 /********************************************************** us延子函数电电电电 (500us) www.docin.com 4**********************************************************/ void delayus(unsigned char x){ unsigned char i ; while(x--) { for(i=0;i<58;i++) ; } } /********************************************************** 电 中子函数,0度, **********************************************************/ void Prog0(void){ unsigned char m ; for(m=0;m<30;m++) { out=1 ; delayus(3); //延电1.5ms out=0 ; delayus(37); //延电18.5ms } } /********************************************************** 逆子函数电电电电电电电 1ms **********************************************************/ void Prog1(void){ unsigned char m ; for(m=0;m<40;m++) { out=1 ; //延电1ms delayus(2); out=0 ; delayus(38); //延电19ms } } /********************************************************** 电电电电电 子函数2ms **********************************************************/ void Prog2(void){ unsigned char m ; for(m=0;m<40;m++) { out=1 ; delayus(4); //延电2ms out=0 ; delayus(36); //延电18ms } } /********************************************************** 主函数 **********************************************************/ void main(void){ P1=0xf0 ; Prog0(); //0度位置 while(1) { if(K1==0) { delayus(40); //延电20ms if(K1==0) Prog0(); //返回0度位置 } else if(K2==0) { delayus(40); //延电20ms if(K2==0) Prog1(); //逆电电电电 www.docin.com 6 } else if(K3==0) { delayus(40); //延电20ms if(K3==0) Prog2(); //电电电电电 } } } /*********************************************************/ 舵机速度控制 舵机的速度跟位器的角度有电电电电电电电电,比如实同实100K的位器电电电,120度与85度的相比,85度的 在相同的控制角度下,实电电化要大一些,,因些舵机的速度角度都大一些快一些。实位与会器的中实实如,100K的位器在电电电电50K位置上,,就是舵机的中心。在实件上实可以据舵机你跟 的实角度实用的实与,TX上,实位器的角度来定电电电电步,一般实位器用85度与120度两个,一是个 油实一是方向实实实模。舵机的,,,个脉冲范一般是电电电电700---1500----1900uS,1500是中心。 L293D电电电电电电电电 直流机速控制 原程序 #include #define uint unsigned int #define uchar unsigned char sbit P2_0=P2^0; sbit P0_0=P0^0; sbit P0_1=P0^1; long a=355; bit flag=1; void int0()interrupt 0 { a+=3000; if(a>=65535) a=65534; } void int1()interrupt 2 { a-=3000; if(a<0) a=0; } void time0_server_(void)interrupt 1 { if(flag==1) { P2_0=0; P0_0=1; P0_1=1; TH0=65535-((65535-a)/256); TL0=65535-((65535-a)%256); } if(flag==0) { P2_0=1; P0_0=1; P0_1=1; TH0=(65535-a)/256; TL0=(65535-a)%256; } flag=~flag; } void Init_t0(void) { TMOD=0X01; TH0=(65535-a)/256; TL0=(65535-a)%256; ET0=1; TR0=1; EX0=1; IT0=1; EX1=1; IT1=1; EA=1; } void main(void) { P2_0=1; P0_0=1; P0_1=1; Init_t0(); while(1); } 本例程利用2051的T0电生双路PWM信号,推实L293D或L298N电电电电电直流机速,程序 已通。接电电电电电L298N电电电电电电电电电电相的管脚上最好接上10K的上拉阻。电电电 有什不的地方迎大家批指正电电电电电电电电电电电电电电, /* =======直流机的电电电PWM速度控制程序======== */ /* 晶振采用11.0592M,电生的PWM的率电电电电91Hz */ #define uint unsigned intsbit en1=P1^0 ; /* L298的Enable A */ sbit en2=P1^1 ; /* L298的Enable B */ sbit s1=P1^2 ; /* L298的Input 1 */ sbit s2=P1^3 ; /* L298的Input 2 */ sbit s3=P1^4 ; /* L298的Input 3 */ sbit s4=P1^5 ; /* L298的Input 4 */ uchar t=0 ; /* 中断数器电电电 */ uchar m1=0 ; /* 电机1速度电 */ uchar m2=0 ; /* 电机2速度电 */ uchar tmp1,tmp2 ;/* 电电 机当前速度*/ /* 电 机控制函数index-电机号(1,2); speed-电机速度(-100-100) */ void motor(uchar index,char speed) { if(speed>=-100&&speed<=100) { /* 电机1的理电电 */ if(index==1) { m1=abs(speed); /* 取速度的电电电 */ /* 速度反电电电电电电 */ if(speed<0) { s1=0 ; s2=1 ; } /* 不数正电电电电电电 */ else { s1=1 ; s2=0 ; } } /* 电机2的理电电 */ if(index==2) { m2=abs(speed); /* 电机2的速度控制 */ /* 电机2的方向控制 */ if(speed<0) { s3=0 ; s4=1 ; } else { s3=1 ; s4=0 ; } } } } /* 电电电电 易延函数*/ void delay(uint j) { for(j;j>0;j--);} void main() { uchar i ; TMOD=0x02 ; /* 电定T0的工作模式电2 */ TH0=0x9B ; /* 装入定器的初电电电电电 */ TL0=0x9B ; EA=1 ; /* 电 中断*/ ET0=1 ; /* 定器电电0允中断电电电 */ TR0=1 ; /* 启定器电电电电0 */ /* 电电电电电电电 机控制演示*/ while(1) { /* 正加速电电电 */ for(i=0;i<=100;i++) { motor(1,i); motor(2,i); delay(5000); } /* 正减速电电电 */ for(i=100;i>0;i--) { motor(1,i); motor(2,i); delay(5000); } /* 反加速电电电 */ for(i=0;i<=100;i++) { motor(1,-i); motor(2,-i); delay(5000); } /* 反减速电电电 */ for(i=100;i>0;i--) { motor(1,-i); motor(2,-i); delay(5000); } } } /* T0中断服程序电电电 */ void timer0()interrupt 1 { /* 1个PWM周期完成后才会接受新数电 */ if(t==0) { tmp1=m1 ; tmp2=m2 ; } if(t=100)t=0 ; /* 1个PWM信号由100次中断生电电 */ }
本文档为【单片机控制舵机程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:51KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-21
浏览量:30