KeilC直流电机驱动程序.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:3 大小:36KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

KeilC直流电机驱动程序.doc

KeilC直流电机驱动程序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintsbitEN1=P2^0;//L298的EnableAsbitEN2=P2^1;//L298的EnableBsbits1=P2^2;//L298的Input1sbits2=P2^3;//L298的Input2sbits3=P2^4;//L298的Input3sbits4=P2^5;//L298的Input4uchart=0;//中断计数器ucharm1=0;//电机1速度值ucharm2=0;//电机2速度值uchartmp1,tmp2;//电机当前速度值//电机控制函数index-电机号(1,2);speed-电机速度(-100—100)voidmotor(ucharindex,charspeed){if(speed>=-100&&speed<=100){if(index==1)//电机1的处理{m1=abs(speed);//取速度的绝对值if(speed<0)//速度值为负则反转{s1=0;s2=1;}else//不为负数则正转{s1=1;s2=0;}}if(index==2)//电机2的处理{m2=abs(speed);//电机2的速度控制if(speed<0)//电机2的方向控制{s3=0;s4=1;}else{s3=1;s4=0;}}}}//延时函数voiddelay(uintj){for(j;j>0;j--);}voidmain(){chari;TMOD=0x02;//设定T0的工作模式为2TH0=0x9B;//装入定时器的初值TL0=0x9B;EA=1;//开中断ET0=1;//定时器0允许中断TR0=1;//启动定时器0while(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);}}}voidtimer0()interrupt1//T0中断服务程序{if(t==0)//1个PWM周期完成后才会接受新数值{tmp1=m1;//当前速度tmp2=m2;}if(t<tmp1)EN1=1;elseEN1=0;//产生电机1的PWM信号if(t<tmp2)EN2=1;elseEN2=0;//产生电机2的PWM信号t++;if(t>=100)t=0;//1个PWM信号由100次中断产生(如果没有此行,则PWM周期长度为delay(5000),最大速度明显下降)}