新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 使用內部計時器中斷產生PWM調速

        使用內部計時器中斷產生PWM調速

        作者: 時間:2016-11-22 來源:網絡 收藏
        當計時器產生第二次中斷時,程序會第二次執行中斷服務程序,同樣首先執行判斷語句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”。

        本文引用地址:http://www.104case.com/article/201611/319674.htm

        同理,時鐘產生第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%。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 晋宁县| 乌兰县| 买车| 大连市| 东乡| 三门峡市| 卢龙县| 浦北县| 绥中县| 松阳县| 丹寨县| 稻城县| 芷江| 化德县| 乌兰浩特市| 民权县| 陆丰市| 宜丰县| 扶沟县| 温州市| 巢湖市| 临江市| 德江县| 洞口县| 青冈县| 砚山县| 原阳县| 秦皇岛市| 庆云县| 林口县| 雷波县| 侯马市| 湛江市| 三江| 方山县| 郯城县| 三门峡市| 师宗县| 云阳县| 盐源县| 丹江口市|