PWM脈沖是一種占空比和周期都可調(diào)的脈沖。
PWM脈沖的周期范圍為10~65535μs或2~65535ms,在設(shè)置脈沖周期時(shí),如果周期小于兩個(gè)時(shí)間單位,系統(tǒng)會默認(rèn)周期值為兩個(gè)時(shí)間單位;PWM脈寬時(shí)間為0~65535μs或0~65535ms,若設(shè)定的脈寬等于周期(即占空比為100%),輸出一直接通,設(shè)定脈寬等于0(即占空比為0%),輸出斷開。
1.波形改變方式
PWM脈沖的波形改變方式有兩種:同步更新和異步更新。同步更新。如果不需改變時(shí)間基準(zhǔn),則可以使用同步更新方式。利用同步更新,信號波形特性的變化發(fā)生在周期邊沿,使波形能平滑轉(zhuǎn)換。異步更新。如果需要改變PWM發(fā)生器的時(shí)間基準(zhǔn),就要使用異步更新。異步更新會使PWM功能被瞬時(shí)禁止, PWM信號波形過渡不平滑,這會引起被控設(shè)備的振動。
由于異步更新生成的PWM脈沖有較大的缺陷,一般情況下盡量使用脈寬變化、周期不變的PWM脈沖,這樣可使用同步更新。
2.產(chǎn)生PWM脈沖的編程方法
要讓高速脈沖發(fā)生器產(chǎn)生PWM脈沖,可按以下步驟編程。根據(jù)需要設(shè)置控制字節(jié)SMB67(Q0.0)、SMB77(Q0.1)或SMB567(Q0.3)。根據(jù)需要設(shè)置脈沖的周期值和脈寬值。周期值在SMW68、SMW78或SMB568中設(shè)置,脈寬值在SMW70、SMW80或SMW570中設(shè)置。執(zhí)行高速脈沖輸出PLS指令,系統(tǒng)則會讓高速脈沖發(fā)生器按設(shè)置從Q0.0、Q0.1或Q0.3端子輸出PWM脈沖。
3.產(chǎn)生PWM脈沖的編程實(shí)例
圖1所示是一個(gè)產(chǎn)生PWM脈沖的程序,其實(shí)現(xiàn)的功能是:讓PLC從Q0.0端子輸出PWM脈沖,要求PWM脈沖的周期固定為5s,初始脈寬為0.5s,每周期脈寬遞增0.5s,當(dāng)脈寬達(dá)到4.5s后開始遞減,每周期遞減0.5s,直到脈寬為0。以后重復(fù)上述過程。
圖1 產(chǎn)生PWM脈沖的程序
該程序由主程序、SBR_0子程序和INT_0、INT_1兩個(gè)中斷程序組成,SBR_0子程序?yàn)镻WM初始化程序,用來設(shè)置脈沖控制字節(jié)和初始脈沖參數(shù),INT_0中斷程序用于實(shí)現(xiàn)脈寬遞增,INT_1中斷程序用于實(shí)現(xiàn)脈寬遞減。由于程序采用中斷事件0(I0.0上升沿中斷)產(chǎn)生中斷,因此要將脈沖輸出端子Q0.0與I0.0端子連接,這樣在Q0.0端子輸出脈沖上升沿時(shí),I0.0端子會輸入脈沖上升沿,從而觸發(fā)中斷程序,實(shí)現(xiàn)脈沖遞增或遞減。
程序工作過程說明如下。
在主程序中,PLC上電首次掃描時(shí)SM0.1觸點(diǎn)接通一個(gè)掃描周期,子程序調(diào)用指令執(zhí)行,轉(zhuǎn)入執(zhí)行SBR_0子程序。在子程序中,先將M0.0線圈置1,然后設(shè)置脈沖的控制字節(jié)和初始參數(shù),再允許所有的中斷,最后執(zhí)行高速脈沖輸出PLS指令,讓高速脈沖發(fā)生器按設(shè)定的控制字節(jié)和參數(shù)產(chǎn)生并從Q0.0端子輸出PWM脈沖,同時(shí)從子程序返回到主程序網(wǎng)絡(luò)2。由于網(wǎng)絡(luò)2、3指令條件不滿足,程序執(zhí)行網(wǎng)絡(luò)4,M0.0常開觸點(diǎn)閉合(在子程序中M0.0線圈被置1),中斷連接ATCH指令執(zhí)行,將INT_0中斷程序與中斷事件0(I0.0上升沿中斷)連接起來。當(dāng)Q0.0端子輸出脈沖上升沿時(shí),I0.0端子輸入脈沖上升沿,中斷事件0馬上發(fā)出中斷請求,系統(tǒng)響應(yīng)該中斷而執(zhí)行INT_0中斷程序。
在INT_0中斷程序中,ADD_I指令將脈沖寬度值增加0.5s,再執(zhí)行PLS指令,讓Q0.0端子輸出完前一個(gè)PWM脈沖后按新設(shè)置的寬度輸出下一個(gè)脈沖,接著執(zhí)行中斷分離DTCH指令,將中斷事件0與INT_0中斷程序分離,然后從中斷程序返回主程序。在主程序中,又執(zhí)行中斷連接ATCH指令,又將INT_0中斷程序與中斷事件0連接起來,在Q0.0端子輸出第二個(gè)PWM脈沖上升沿時(shí),又會產(chǎn)生中斷而再次執(zhí)行INT_0中斷程序,將脈沖寬度值再增加0.5s,然后執(zhí)行PLS指令讓Q0.0端子輸出的第三個(gè)脈沖寬度增加0.5s。以后INT_0中斷程序會重復(fù)執(zhí)行,直到SMW70單元中的數(shù)值增加到4500。
當(dāng)SMW70單元中的數(shù)值增加到4500時(shí),主程序中的“SMW70|>=I|4500”觸點(diǎn)閉合,將M0.0線圈復(fù)位;網(wǎng)絡(luò)4中的M0.0常開觸點(diǎn)斷開,中斷連接ATCH指令無法執(zhí)行,INT_0中斷程序也無法執(zhí)行;網(wǎng)絡(luò)5中的M0.0常閉觸點(diǎn)閉合,中斷連接ATCH指令執(zhí)行,將INT_1中斷程序與中斷事件0連接起來。當(dāng)Q0.0端子輸出脈沖上升沿(I0.0端子輸入脈沖上升沿)時(shí),中斷事件0馬上發(fā)出中斷請求,系統(tǒng)響應(yīng)該中斷而執(zhí)行INT_1中斷程序。
在INT_1中斷程序中,將脈沖寬度值減0.5s,再執(zhí)行PLS指令,讓Q0.0端子輸出PWM脈沖寬度減小0.5s,接著執(zhí)行中斷分離DTCH指令,分離中斷,然后從中斷程序返回主程序。在主程序中,又執(zhí)行網(wǎng)絡(luò)5中的中斷連接ATCH指令,又將INT_1中斷程序與中斷事件0連接起來,在Q0.0端子輸出PWM脈沖上升沿時(shí),又會產(chǎn)生中斷而再次執(zhí)行INT_1中斷程序,將脈沖寬度值再減0.5s。以后INT_1中斷程序會重復(fù)執(zhí)行,直到SMW70單元中的數(shù)值減小到0。
當(dāng)SMW70單元中的數(shù)值減小到0時(shí),主程序中的“SMW70|==I|0”觸點(diǎn)閉合,子程序調(diào)用指令執(zhí)行,轉(zhuǎn)入執(zhí)行SBR_0子程序,又進(jìn)行PWM初始化操作。
以后程序重復(fù)上述工作過程,從而使Q0.0端子輸出先遞增0.5s、后遞減0.5s、周期為5s連續(xù)的PWM脈沖。
審核編輯:湯梓紅
-
PWM
+關(guān)注
關(guān)注
114文章
5181瀏覽量
213796 -
編程
+關(guān)注
關(guān)注
88文章
3614瀏覽量
93686 -
波形
+關(guān)注
關(guān)注
3文章
379瀏覽量
31544 -
PWM脈沖
+關(guān)注
關(guān)注
0文章
8瀏覽量
7825
發(fā)布評論請先 登錄
相關(guān)推薦
評論