资源描述:
《基于proteus仿真的pwm电机调速》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、直流电机调速资料汇总一.使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。C语言代码:#include#defineucharunsignedchar#defineuintunsignedintsbitK5=P1^4;sbitK6=P1^5;sbitPWM1=P1^0;sbitPWM2=P1^1;sbitFMQ=P3^6;ucharZKB1,ZKB2;voiddelaynms(uintaa){ucharb
2、b;while(aa--){for(bb=0;bb<115;bb++)//1ms基准延时程序{;}}}voiddelay500us(void){intj;for(j=0;j<57;j++){;}}voidbeep(void){uchart;for(t=0;t<100;t++){delay500us();FMQ=!FMQ;//产生脉冲}FMQ=1;//关闭蜂鸣器delaynms(300);}voidmain(void){TR0=0;//关闭定时器0TMOD=0x01;//定时器0,工作方式1TH0=(65526-100)/25
3、6;TL0=(65526-100)%256;//100us即0.01ms中断一次EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器T0ZKB1=50;//占空比初值设定ZKB2=50;//占空比初值设定while(1){if(!K5){delaynms(15);//消抖if(!K5)//确定按键按下{beep();ZKB1++;//增加ZKB1ZKB2=100-ZKB1;//相应的ZKB2就减少}}if(!K6){delaynms(15);//消抖if(!K6)//确定按键按下{beep();ZK
4、B1--;//减少ZKB1ZKB2=100-ZKB1;//相应的ZKB2增加}}if(ZKB1>99)ZKB1=1;if(ZKB1<1)ZKB1=99;}}voidtime0(void)interrupt1{staticucharN=0;TH0=(65526-100)/256;TL0=(65526-100)%256;N++;if(N>100)N=0;if(N<=ZKB1)PWM1=0;elsePWM1=1;if(N<=ZKB2)PWM2=0;elsePWM2=1;}//显现:电机转速到最高后,也就是N为1或99时,再按一下,
5、就变到99或1,//电机反方向旋转以最高速度二、内容及要求:1、设计一个直流电机调速系统,并用单片机实现连接开关和数码显示并将其值输入直流电机调速系统。2、通过公式及键控实现其直流电机启动、加速、减速和停止等四种形态。目标:(1)CPU为8051芯片;(2)实验需要4个LED,分别显示启动、加速、减速和停止。(3)通过按键开关输入不同的值改变脉冲占空比的控制值从而得到不同的频率脉冲,实现脉冲转变为点评,实现调速功能。PWMEQU7FH;PWM赋初始值OUTEQUP0;8个LED灯的接口INCKEYEQUP1.4;K1,PWM
6、值增加键。DECKEYEQUP1.5;K2,PWM值减小键。BEEPEQUP3.7;----ORG0000HSJMPSTARTORG000BHSJMPINTT0ORG001BHSJMPINTT1ORG0030H;----;主程序;定时器0工作在模式1,定时器1工作在模式2。;----START:MOVSP,#30HMOVTMOD,#21HMOVTH1,PWM;脉宽调节MOVTL1,#00HMOVTH0,#0FCH;MOVTL0,#066H;频率调节SETBEASETBET0SETBET1SETBTR0LOOP:MOVA,PW
7、M;JBINCKEY,LOOP1;增加键是否按下?CALLDELAY;延时去抖动JBINCKEY,LOOP1CJNEA,#0FFH,PWMINC;是否到最大值?CALLBEEP_BL;是,蜂鸣器报警。SJMPLOOPPWMINC:INCPWM;调节脉宽(脉宽减小)SJMPLOOPLOOP1:JBDECKEY,LOOP2;减小键是否按下?CALLDELAY;延时去抖动JBDECKEY,LOOP2CJNEA,#02H,PWMDEC;是否到最小值?CALLBEEP_BL;是,蜂鸣器报警。SJMPLOOPPWMDEC:DECPWM;
8、调节脉宽(脉宽增加)LOOP2:SJMPLOOP;----;T0中断服务子程序(频率);控制定时器1中断;----INTT0:CLRTR1MOVTH0,#0FCH;1ms延时常数MOVTL0,#066H;频率调节MOVTH1,PWMSETBTR1MOVOUT,#00H;启动输出RETI;-