基于STC系列單片機(jī)的SPWM波形實(shí)現(xiàn)
2 STC系列單片機(jī)生成SPWM波原理
2.1 STC系列單片機(jī)簡(jiǎn)介
STCl2系列單片機(jī)是美國(guó)STC公司在8051單片機(jī)標(biāo)準(zhǔn)的內(nèi)核基礎(chǔ)上改進(jìn)推出的一個(gè)增強(qiáng)型功能的8051的單片機(jī),從引腳到指令上完全與8051單片機(jī)兼容。最突出的特點(diǎn)就是其具有可編程計(jì)數(shù)器陣列PCA。以STCl2C5410AD為例,有四路可編程計(jì)數(shù)器陣列PCA/PWM。PCA含有一個(gè)特殊的16位定時(shí)器,有4個(gè)16位的捕獲/比較模塊與之相連。四個(gè)模塊的公共時(shí)間基準(zhǔn)由PCA定時(shí)器決定,可以通過PCA模式寄存器CMOD SFR的CPSl和CPS0位確定。每個(gè)模塊可編程工作在4種模式下:上升/下降沿捕獲、軟件定時(shí)器、高速輸出或PWM脈沖輸出。文中SPWM生成功能主要靠PWM脈沖輸出模式完成。圖2即為PCA模塊脈寬調(diào)節(jié)PWM輸出模式框圖。
在PCA PWM輸出模式中,當(dāng)CLSFR的值小于{EPCnL,CCAPnL}時(shí),輸出為低,當(dāng)PCA CL SFR的值等于或大于{EPCnH,CCAPnH}時(shí),輸出為高。當(dāng)CL的值由FF變?yōu)?0溢出時(shí),{EPCnH,CCAPnH}的內(nèi)容裝載到{EPCnL,CCAPnL}中。這樣就實(shí)現(xiàn)了無干擾的更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。本文中,SPWM波形是綜合使用了模塊O的脈寬調(diào)節(jié)(PWM)模式和模塊1的16位軟件定時(shí)器模式,通過軟件中斷的形式實(shí)現(xiàn)的。
與此同時(shí),STCl2C54lO單片機(jī)還具有快速A/D轉(zhuǎn)換功能。有一個(gè)lO位精度、8路通道的A/D轉(zhuǎn)換器??梢苑奖愕膶?duì)輸入、輸出的電壓、電流進(jìn)行監(jiān)控和顯示。
2.2 SPWM波生成方法
利用STC系列單片機(jī)產(chǎn)生SPWM波的基本原理是:將載波周期數(shù)值賦給PCA模塊l的16位捕獲/比較模塊寄存器CCAPlH(高8位)和CCAPlL(低8位),PCA定時(shí)器的值CH(高八位)、CL(低八位)與模塊捕獲寄存器的值相比較,當(dāng)兩者相等時(shí),產(chǎn)生PCA中斷。在中斷中,調(diào)用模塊0的PWM脈寬調(diào)節(jié)模式,將下一個(gè)SPWM波的脈寬通過CCAP0H裝載到CCAPOL中,這樣就可以實(shí)現(xiàn)無干擾的更新PWM。
圖3中即為由軟件實(shí)時(shí)計(jì)算好的一路單極性SPWM波形的脈寬示意圖。在每個(gè)固定的載波周期內(nèi),不同脈寬數(shù)值組成一個(gè)正弦表格的形式。若選用模塊O(P3.7)輸出此路SPWM,首先將模塊0的PCA模塊工作模式寄存器定義為8位PWM模式,將16位計(jì)數(shù)器定時(shí)器CH、CL清零,PCA PWM模式輔助寄存器O清零(保證捕獲寄存器EPCOH(高八位)、EPC0L(低八位)固定為零,PWM波比較的數(shù)值只與PCA模塊0的捕獲寄存器CCAPOH(高八位)、CC2APOL(低八位)有關(guān)),模塊l的捕獲寄存器CCAPlH(高八位)、CCAPlL(低八位)送入載波周期的高八位和第八位數(shù)值,PCA比較/捕獲模塊寄存器1(CCAPMl)定義為使能比較功能,允許匹配產(chǎn)生中斷。將第一個(gè)脈寬值sin[0]裝入CCAP0H,開PCA模塊中斷及低壓檢測(cè)中斷,開總中斷,啟動(dòng)PCA計(jì)數(shù)。當(dāng)16位計(jì)數(shù)器/定時(shí)器的數(shù)值與模塊1中捕獲/比較寄存器的數(shù)值相等時(shí),產(chǎn)生一個(gè)CCF中斷;在中斷程序中,清中斷標(biāo)志位,重新給模塊1的捕獲寄存器CCAPlH(高八位)、CCAPlL(低八位)送入載波周期的高八位和第八位數(shù)值,將16位計(jì)數(shù)器定時(shí)器CH、CL清零,中斷次數(shù)i加1,將下一個(gè)脈寬數(shù)值sin[i]裝入CCAPOH以備比較。同時(shí)判斷是否到達(dá)最大數(shù)值N,若是,中斷次數(shù)i清零,同時(shí)將脈寬數(shù)sin[i]值送入CCAP0H,完成一個(gè)循環(huán)。這樣,周而復(fù)始,在P3.7引腳上將不斷產(chǎn)生隨著正弦規(guī)律變化的脈寬,從而得到準(zhǔn)確的SPWM波。
2.3 軟件設(shè)計(jì)
程序編寫采用KeilC51編程語(yǔ)言進(jìn)行,整個(gè)程序由主程序和鍵盤中斷子程序以及PCA中斷子程序組成。主程序在系統(tǒng)初始化后進(jìn)入SPwM脈寬計(jì)算程序,計(jì)算相應(yīng)的脈沖寬度,形成正弦表格,等待中斷標(biāo)志位以響應(yīng)不同的中斷。由于SPWM波是不斷輸出的,必須將PCA中斷級(jí)別設(shè)置為最高。一旦有PCA中斷標(biāo)志位,即轉(zhuǎn)入執(zhí)行其中斷子程序。圖4為PCA中斷子程序流程圖。在中斷服務(wù)程序中,注意CCF1位和CF標(biāo)志位均由硬件置位,但不能自動(dòng)清零,必須在中斷程序中由軟件清零。
評(píng)論