13.1 項(xiàng)目分析
脈寬調(diào)制(PWM)基本原理 :控制方式就是對(duì)逆變電路開關(guān)器件的通斷進(jìn)行控制,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替正弦波或所需要的波形。 也就是在輸出波形的半個(gè)周期中產(chǎn)生多個(gè)脈沖,使各脈沖的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。 按一定的規(guī)則對(duì)各脈沖的寬度進(jìn)行調(diào)制,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
例如,把正弦半波波形分成N等份,就可把正弦半波看成由N個(gè)彼此相連的脈沖所組成的波形。 這些脈沖寬度相等,都等于∏/n,但幅值不等,且脈沖頂部不是水平直線,而是曲線,各脈沖的幅值按正弦規(guī)律變化。 如果把上述脈沖序列用同樣數(shù)量的等幅而不等寬的矩形脈沖序列代替,使矩形脈沖的中點(diǎn)和相應(yīng)正弦等分的中點(diǎn)重合,且使矩形脈沖和相應(yīng)正弦部分面積(即沖量)相等,就得到一組脈沖序列,這就是PWM波形。 可以看出,各脈沖寬度是按正弦規(guī)律變化的。 根據(jù)沖量相等效果相同的原理,PWM波形和正弦半波是等效的。 對(duì)于正弦的負(fù)半周,也可以用同樣的方法得到PWM波形。
在PWM波形中,各脈沖的幅值是相等的,要改變等效輸出正弦波的幅值時(shí),只要按同一比例系數(shù)改變各脈沖的寬度即可,因此在交-直-交變頻器中,PWM逆變電路輸出的脈沖電壓就是直流側(cè)電壓的幅值。 根據(jù)上述原理,在給出了正弦波頻率,幅值和半個(gè)周期內(nèi)的脈沖數(shù)后,PWM波形各脈沖的寬度和間隔就可以準(zhǔn)確計(jì)算出來。 按照計(jì)算結(jié)果控制電路中各開關(guān)器件的通斷,就可以得到所需要的PWM波形。
采樣控制理論中有一個(gè)重要結(jié)論:沖量相等而形狀不同的窄脈沖加在具有慣性的環(huán)節(jié)上時(shí),其效果基本相同. PWM控制技術(shù)就是以該結(jié)論為理論基礎(chǔ),對(duì)半導(dǎo)體開關(guān)器件的導(dǎo)通和關(guān)斷進(jìn)行控制,使輸出端得到一系列幅值相等而寬度不相等的脈沖,用這些脈沖來代替正弦波或其他所需要的波形. 按一定的規(guī)則對(duì)各脈沖的寬度進(jìn)行調(diào)制,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
PWM技術(shù)在生活中的應(yīng)用非常廣,最常用的就是開關(guān)電源,通過改變脈寬來改變輸出的電壓,擴(kuò)展的還有LED調(diào)光,直流電機(jī)調(diào)速,以及顯示器中的顏色合成等。
13.2 原理圖
**13.3 **源代碼
正規(guī)的PWM調(diào)速的過程應(yīng)該是用戶輸入指定的轉(zhuǎn)速,由電機(jī)上面的轉(zhuǎn)速傳感器采集當(dāng)前轉(zhuǎn)速輸入單片機(jī)進(jìn)行比較,根據(jù)轉(zhuǎn)速的差值計(jì)算出PWM的占空比,這個(gè)占空比是需要提前進(jìn)行數(shù)學(xué)建模,將電機(jī)的轉(zhuǎn)速與PWM占空比的數(shù)學(xué)關(guān)系推導(dǎo)出來,采用查表法或者數(shù)據(jù)查詢的方式將占空比增大,這里就不進(jìn)行數(shù)學(xué)建模,直接采用默認(rèn)的數(shù)據(jù),占空比1%~100% 對(duì)應(yīng)的轉(zhuǎn)速平均分布。 PWM的頻率和占空比由定時(shí)器0確定,設(shè)置頻率1000Hz,采用按鍵設(shè)置占空比,源代碼如下圖所示。
/*********************************************************************************************************
頭 文 件 引 用
*********************************************************************************************************/
#include <reg51.h> //導(dǎo)入51單片機(jī)頭文件
#include <intrins.h>
/*********************************************************************************************************
數(shù) 據(jù) 類 型 定 義
*********************************************************************************************************/
#define u8 unsigned char //定義無符號(hào)字符型數(shù)據(jù)(0~255)
#define u16 unsigned int //定義無符號(hào)整型數(shù)據(jù)(0~65535)
/*********************************************************************************************************
變 量 定 義
*********************************************************************************************************/
u8 Duty; //占空比
u8 TIM0_Count ;
u8 LED_Data[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F } ;
/*********************************************************************************************************
端 口 定 義
*********************************************************************************************************/
sbit OUT = P2^7 ; //電機(jī)接口
/********************************************************
Name :delay_ms
Function :毫秒級(jí)別延時(shí)函數(shù)
Paramater :
ms:延時(shí)的ms數(shù)
Return :None
********************************************************/
void delay_ms( u16 ms )
{
u8 i ;
while( --ms )
for( i=0; i<110; i++ ) ;
}
/********************************************************
Name :EXIT0_IRQHandler
Function :外部中斷0中斷服務(wù)函數(shù)
Paramater :None
Return :None
********************************************************/
void EXIT0_IRQHandler() interrupt 0
{
do
{
Duty ++ ;
if( Duty==100 )
{
TR0 = 0 ;
Duty = 0 ;
}
else
TR0 = 1 ;
P2 = 0xFE ;
P0 = LED_Data[ Duty/10 ] ;
delay_ms( 2 ) ;
P2 = 0xFD ;
P0 = LED_Data[ Duty%10 ] ;
delay_ms( 2 ) ;
delay_ms( 500 ) ;
}while( ( P3&0x04 )!=0x04 ) ;
}
/********************************************************
Name :TIM0_IRQHandler
Function :定時(shí)器0中斷服務(wù)函數(shù)
Paramater :None
Return :None
********************************************************/
void TIM0_IRQHandler() interrupt 1
{
TH0 = ( 65535-10 )/256 ; //計(jì)數(shù)器設(shè)置頻率1000Hz
TL0 = ( 65535-10 )/256 ;
TIM0_Count ++ ;
if( TIM0_Count<=Duty )
OUT = 0 ;
else if( ( TIM0_Count<100 )&&( TIM0_Count>Duty ) )
OUT = 1 ;
else
{
OUT = 0 ;
TIM0_Count = 0 ;
}
}
/********************************************************
Name :KEY_Scan
Function :鍵盤掃描
Paramater :None
Return :None
********************************************************/
void PWM_Init()
{
Duty = 0 ;
TIM0_Count = 0 ;
IE = 0x83 ; //開啟EA+EX0+ET0
TMOD = 0x01 ; //定時(shí)器設(shè)置16位模式
TH0 = ( 65535-10 )/256 ; //計(jì)數(shù)器設(shè)置頻率1000Hz
TL0 = ( 65535-10 )/256 ;
IT0 = 1 ; //下降沿觸發(fā)
}
/*********************************************************************************************************
主 函 數(shù)
*********************************************************************************************************/
void main()
{
PWM_Init() ;
while( 1 )
{
P2 = 0xFE ;
P0 = LED_Data[ Duty/10 ] ;
delay_ms( 2 ) ;
P2 = 0xFD ;
P0 = LED_Data[ Duty%10 ] ;
delay_ms( 2 ) ;
}
}
13.4 仿真截圖
-
單片機(jī)
+關(guān)注
關(guān)注
6039文章
44579瀏覽量
636454 -
PWM
+關(guān)注
關(guān)注
114文章
5193瀏覽量
214225 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5705瀏覽量
123807 -
脈寬調(diào)制
+關(guān)注
關(guān)注
3文章
219瀏覽量
38345 -
逆變電路
+關(guān)注
關(guān)注
19文章
297瀏覽量
39489
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論