当计时器产生第二次中断时,程序会第二次执行中断服务程序,同样首先执行判断语句if(t==0){tmp1=m1;},由于这时t值已经在第一次中断并执行中断服务程序时被加“1”,也就是说t的值现在等于“1”,因此tmp1=m1语句不被执行,tmp1的值仍然保持它原来的值“70”。接下来执行判断语句if(t=100) t=0;,这时t的值被加“1”后等于“2”,但条件t>=100仍然为假而t=0语句不被执行,即t不被置“0”。。 由此我们也可以看出,时钟产生第二次中断并第二次执行中断服务程序后,各变量的变化是:
m1是给定值“70”自然不会变化;
tmp1的值也保持“70”不变;
en1的值仍然等于“1”;
t的值被加“1”等于“2”。
同理,时钟产生第70次中断并执行中断服务程序时,判断语句if(t==0){tmp1=m1;}仍然不被执行,tmp1仍然保持“70”,判断语句if(t=100) t=0;由于t的值此时为“70”而使条件t>=100仍然为假,语句t=0;不被执行而使t值不被置“0”。
当时钟产生第71次中断并执行中断服务程序时,判断语句if(t==0){tmp1=m1;}仍然不被执行,tmp1仍然保持“70”,判断语句if(t=100) t=0;由于t>=100为假仍然不被执行,而使t值不被置“0”。
同理,当时钟产生第99次中断并执行中断服务程序时,en1仍然等于“0”,t的值被加到“99”,并且不被置“0”。
当时钟产生第100次中断并执行中断服务程序时,en1仍然等于“0”,t的值被加到“100”,这时判断语句if(t>=100) t=0;由于条件t>=100为真而使t被置“0”。
由于t被置“0”而使得从第101次中断产生并执行中断服务程序时,程序又回到第一次中断时的状态。
至此,由于我们在语句if(t>=100) t=0;中用条件t>=100预设了PWM的周期为100次中断,固在100次上述中断完成后,即一个PWM周期完成,一个PWM周期完成后的阶梯图为:
en1=1,70个中断时间
(从第一次中断开始en1=1使电机得电转动——————————————(到第71次中断en1跳变为“0”使电
70个中断的时间) 机停转30个中断的时间)
——————
en1=0,30个中断时间
由此可以看出,通过设定在单片机内部时钟产生中断并执行中断服务程序,使电机在一个特定的时间段内,70%的时间电机被加电转动,30%的时间电机不被加电而停止,从而使电机被减速到其全速的70%。
同理,如果我们给定m1的值为50,电机的速度将被减速到全速的50%。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』