完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、直流电机工作原理
1、直流电机正反转 ——通过高低电平反转实现 2、电机调速通过PWM波实现 ——PWM通过51单片机定时器输出,实现占空比调整。 二、功能程序 端口定义 #include《reg51.h》***it PWM1=P2^0; //电机输入1***it PWM2=P2^1; //电机输入2***it tiaosu=P2^2; //调速按键***it stop=P2^3; //停止按键***it left=P2^4; //逆时针按键***it right=P2^5; //顺时针按键 变量定义 typedef unsigned int uint;typedef unsigned char uchar;uint t0=25000,t1=25000;//初始占空比为1/2 t0低电平,t1高电平uint a=25000;//设置定时器装载初值uchar flag=1; //选择不同的装载初值uchar dflag; //左右转标志位uchar sudu; //速度 ms延时函数 void delay(uchar z){ uint x,y; for(x=z;x》0;x--) for(y=110;y》0;y--);} 定时器和中断函数 void time_init(){ TMOD=0X01; //定时器0 方式1 TH0=(65535-a)/256; TL0=(65535-a)%256; //装载初值 ET0=1; //开启定时器中断使能 EA=1; //开启总中断 TR0=0;}void timer0()interrupt 1 using 0{ if(flag) { flag=0; PWM1=PWM2=1; a=t0; TH0=(65535-a)/256; TL0=(65535-a)%256; //重新装载初值 } else { flag=1; if(dflag==0) { PWM1=0;PWM2=1;; } else { PWM1=1;PWM2=0; } a=t1; TH0=(65535-a)/256; TL0=(65535-a)%256; //重新装载初值 }} 按键扫描函数 void keyscan(){ if(stop==0) { TR0=0; PWM1=PWM2=1;//关闭定时器,便可停转电机 } if(left==0) { TR0=1; dflag=1; } if(right==0) { TR0=1; dflag=0; } if(tiaosu==0) { delay(5); //消抖 if(tiaosu==0) { while(tiaosu==0) sudu++; if(sudu==1) { t0=20000; t1=30000; //占空比3/5 } if(sudu==2) { t0=15000; t1=35000; //占空比7/10 } if(sudu==3) { t0=10000; t1=40000; //占空比4/5 } if(sudu==4) { t0=5000; t1=45000; //占空比9/10 } if(sudu==5) { sudu=0; } } }} 主函数 void main(){ time_init();//定时器初始化 while(1) { keyscan(); //按键扫描 }} |
|
|
|
只有小组成员才能发言,加入小组>>
590浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:02 , Processed in 0.657211 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号