C51程序设计—直流电机直流电机控制要求:利用单片机定时器T0,T1,K1,K2两个开关键以及直流电机和直流电机驱动电路构成直流电机控制装置。当按K1键时,直流电机转速增加;当按K2键时,直流电机转速降低。直流电机直流电机的转速由电枢电压决定。电枢电压越高,电动机转速就越快;电枢电压为0V时,直流电机就停转;改变电枢电压的极性,电机就反转。因此:改变电枢电压的大小和极性可以改变直流电机的转速和转向。PWM调速对于中小功率直流电机调速系统,使用微机或单片机控制是极为方便的。其方法是:通过改变电动机电枢电压接通或断开时间的比值来控制电动机速度。这种方法称为脉冲宽度调制,简称PWM在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。设电机始终接通电源时,电机转速最大为Vmax,设占空比为D=t/T,则电机的平均速度为Vd=Vmax*D式中,Vd——电机的平均速度;Vmax——电机全通电时的速度(最大);D=t/T占空比。由公式可见,当我们改变占空比D=t/T时,就可以得到不同的电机平均速度,从而达到调速的目的。严格地讲,平均速度与占空比D并不是严格的线性关系,在一般的应用中,可以将其近似地看成线性关系。D=t/T占空比T为周期。若周期不变只要改变t就可以改变占空比。用定时器1产生周期T,计数初值设为最小0000H,则定时方式一6MHZ晶振的定时时间是131.072ms用定时器0产生t,改变计数初值即可改变占空比。main置PWM周期和占空比初值置定时器0方式2并置定时常数允许T0中,打开定时器0按键检测按键检测key1按下占空比数+1占空比数二周期数占空比数=2key2按下占空比数2占空比数-1占空数=周期数-1返回YYNYT0中断服务程序计数器+1计数器二周期数计数器清零输出信号输出高电平计数器=占空比数输出低点平中断返回NY#includereg51.hsbitPWMout=P3^5;sbitKEY1=P1^1;sbitKEY2=P1^2;bitKey1Flag;bitKey2Flag;unsignedcharTh0_temp,Tl0_temp;voidDelayS(unsignedintdly);voidkey_check(void);voidINTTO()interrupt1{TR0=0;PWMout=0;}voidINTT1()interrupt3{TL0=Tl0_temp;TH0=Th0_temp;TR0=1;PWMout=1;}voidDelayS(unsignedintdly){unsignedinti;for(;dly0;dly--){for(i=0;i1000;i++);}}voidkey_check(void){if((Key1Flag==0)&&(KEY1==1))Key1Flag=1;elseif((Key1Flag==1)&&(KEY1==0)){DelayS(10);//k1按下加速if(KEY1==0){Key1Flag=0;Th0_temp-=0x10;if(Th0_temp=0)Th0_temp=0x10;}}elseif((Key2Flag==0)&&(KEY2==1))Key2Flag=1;//k2按下减速elseif((Key2Flag==1)&&(KEY2==0)){DelayS(10);if(KEY2==0){Key2Flag=0;Th0_temp+=0x10;if(Th0_temp=250)Th0_temp=0xF0;}}}voidmain(){TMOD=0x11;TL0=0x00;TH0=0x70;Th0_temp=0x70;Tl0_temp=0x00;TL1=0x00;TH1=0x00;ET1=1;ET0=1;EA=1;TR1=1;while(1){key_check();}}