直流电机测速并显示

直流电机测速并显示

ID:30239488

大小:73.00 KB

页数:8页

时间:2018-12-28

直流电机测速并显示_第1页
直流电机测速并显示_第2页
直流电机测速并显示_第3页
直流电机测速并显示_第4页
直流电机测速并显示_第5页
资源描述:

《直流电机测速并显示》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案可实现功能:1可控制左右旋转2可控制停止转动3有测速功能,即时显示在液晶上4有速度档位选择,分五个档次,但不能精确控速5档位显示在液晶上用到的知识:1用外部中断检测电机送来的下降沿,在一定时间里统计脉冲个数,进行算出转速。2通过改变占空比可改变电机速度,占空比的改变可以通过改变定时器的重装初值来实现。3要想精确控制速度,还需要用自动控制理论里的PID算法,但参数难以选定,故在此设计中没有涉及!#include#defineucharunsignedchar#defineuintunsignedintsbitPW1=P1^0;sbitPW2=P1^1;//控制电

2、机的两个输入sbitaccelerate=P0^2;//调速按键sbitstop=P0^3;//停止按键sbitleft=P0^4;//左转按键sbitright=P0^5;//右转按键sbitdetect=P3^2;//检测脉冲精彩文档实用标准文案sbitlcdrs=P0^0;sbitlcden=P0^1;#defineDaP2uinttemp;//保存检测到的电平数据以便比较uintcount;//用于计数uintaa,bb;//用于计数uintspeed;//用来计算转速uinta=25000;uintt0=25000,t1=25000;//初始时占空比为50%ucharflag=1

3、;//此标志用于选择不同的装载初值uchardflag;//左右转标志ucharsflag=1;//用来标志速度档位#defineright_turnPW1=0;PW2=1//顺时针转动#defineleft_turnPW1=1;PW2=0//逆向转动#defineend_turnPW1=1;PW2=1//停转voidkeyscan();//键盘扫描voiddelay(ucharz);voidtime_init();//定时器的初始化voidwrite_com(ucharcom);//液晶写指令voidwrite_data(uchardate);//液晶写数据voidlcd_init();

4、//液晶初始化voiddisplay(uintrate);//显赫速度voidint0_init();//定时器0初始化voidkeyscan();//键盘扫描程序voidjudge_derection();voidmain(){time_init();//定时器的初始化lcd_init();//液晶初始化int0_init();//定时器0初始化while(1){}}voidtime_init(){精彩文档实用标准文案TMOD=0x11;//两个定时器都设定为工作方式1十六位定时计数器EA=1;//开启总中断TH0=(65536-50000)/256;TL0=(65536-50000)%

5、256;ET0=1;TR0=1;TH1=(65536-a)/256;TL1=(65536-a)%256;ET1=1;TR1=0;}voidint0_init(){EX0=1;//外部中断源可以申请中断IT0=1;//外部中断源下降沿触发}voidtimer0()interrupt1using0{TH0=(65536-50000)/256;TL0=(65536-50000)%256;//装载初值keyscan();//键盘扫描程序aa++;if(aa==5){aa=0;temp=count*0.5*60*2*2*100/24;//计算转速,每分转多少圈count=0;//重新开始计数脉冲数d

6、isplay(temp);//把计算得的结果显示出来}}voidtimer1()interrupt3using0{if(flag){精彩文档实用标准文案flag=0;end_turn;a=t0;//t0的大小决定着低电平延续时间TH1=(65536-a)/256;TL1=(65536-a)%256;//重装载初值}else{flag=1;//这个标志起到交替输出高低电平的作用if(dflag==0){right_turn;//右转}else{left_turn;//左转}a=t1;//t1的大小决定着高电平延续时间TH1=(65536-a)/256;TL1=(65536-a)%256;//

7、重装载初值}}/*******外部中断*******************/voidservice_int0()interrupt0{count++;//来一个下降沿沿就计一个脉冲数}/*******显示函数***********/voiddisplay(uintrate){ucharwan,qian,bai,shi,ge;wan=rate/10000;qian=rate/1000%10;bai=rate/100%10

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。