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