单片机控制舵机程序
#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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。