×
嵌入式 > 技术百科 > 详情

使用内部计时器中断产生PWM调速

发布时间:2020-06-05 发布时间:
|
    当计时器产生第二次中断时,程序会第二次执行中断服务程序,同样首先执行判断语句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%。

   


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题