<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于 DSP 的電子負載:電子負載控制系統軟件設計

基于 DSP 的電子負載:電子負載控制系統軟件設計

作者: 時(shí)間:2017-06-04 來(lái)源:網(wǎng)絡(luò ) 收藏

第5章

本文引用地址:http://dyxdggzs.com/article/201706/348252.htm

5.1軟件架構

研究課題的軟件系統較為簡(jiǎn)單,主要任務(wù)是根據電流、電壓的AD采樣結果,經(jīng)過(guò)數字控制環(huán)運算,由DA輸出運算結果,這是最重要也是實(shí)時(shí)性最高的任務(wù)。
此外,還要處理人機交互的任務(wù),諸如串口通信、按鍵,顯示等等,這些任務(wù)并不是時(shí)刻都存在的,實(shí)時(shí)性要求不高。

軟件的架構由前臺和后臺兩部分組成。前臺是一個(gè)預設輸入和結果輸出,如圖5.1左圖所示,包括讀取按鍵編碼值、LCD顯示所處的測試模式和串口通信數據進(jìn)行處理。后臺如圖5.1右圖所示,以事件管理器A周期匹配中斷為核心中斷,整個(gè)反饋回路都是以此中斷為基礎,完成AD采樣,數字控制環(huán)計算,更DA輸出,實(shí)時(shí)調整負載電流。在軟件系統中,需要保證實(shí)時(shí)性的任務(wù)只有反饋環(huán)的任務(wù),在TMS320LF2812的ISR進(jìn)行中,不能進(jìn)行嵌套中斷,別的中斷是不能得到響應的。

為了防止串口中斷(后臺執行程序)的ISR執行時(shí)間過(guò)長(cháng),影響到反饋環(huán)的執行,在串口中斷的ISR中避免代碼的冗繁。主循環(huán)通過(guò)檢測標志位,查看串口通信的事件發(fā)生,然后到指定位置讀取相應數據,最大限度的避免數字控制環(huán)的執行被打斷。

5.2數字控制環(huán)

采樣控制系統都是有延遲的,保證控制環(huán)的數字處理和延遲時(shí)間在一個(gè)最小的周期以?xún)?,是本課題研究的重點(diǎn)。由于事件管理器的定時(shí)器中斷和AD采樣中斷服務(wù)處理程序的指令數固定,而AD轉換的時(shí)間由硬件決定,因而每周期內AD采樣對于數字環(huán)執行周期,占用的時(shí)間是固定的。設計如圖5.2所示的結構。

在整個(gè)數字控制環(huán)的執行周期內,包括AD轉換,AD轉換結果的保存,控制算法的調用和執行,運算結果的保存和輸出,執行周期內預留下一定的空閑時(shí)間,方便調用不同的控制算法時(shí)留下一定的時(shí)間余量。整個(gè)控制算法執行周期為4微妙,每個(gè)周期DA執行一次輸出。

(1)中斷

主程序里面一共開(kāi)放了三個(gè)中斷,T1定時(shí)器周期中斷,串口接收中斷和PDPA中斷。周期中斷啟動(dòng)A/D轉換,開(kāi)始采樣電壓、電流值,并保存結果進(jìn)入數字控制環(huán);串口接收中斷,用于SCI接收中斷,并置發(fā)標志;PDPA中斷,用于保護功率模塊,一旦PDPA關(guān)腳為低便封鎖輸出。其中T1的周期中斷程序不允許被打斷,因為該程序響應用于DA的輸出,響應速度要求很快,PDPA是保護中斷程序,一般不會(huì )響應,這兩個(gè)中斷都不允許中斷嵌套。SCI串口輸出允許被打斷,但在中斷程序的開(kāi)頭要加上EINT,開(kāi)中斷,允許中斷嵌套。

事件管理器A即EVA的定時(shí)器Timer1的定時(shí)器中斷,在此定時(shí)器中斷的中斷服務(wù)處理程序ISR中,啟動(dòng)2路AD轉換。設置EVA Timer1的周期寄存器設置EVATimer1的周期為512(約為3.4微妙),通用定時(shí)器配置為連續增減模式,周期匹配中斷。

(2)AD采樣

2812內部有一個(gè)12位帶流水線(xiàn)的模/數轉換模塊,共有16個(gè)通道,可通過(guò)寄存器配置為2個(gè)獨立的8通道模塊,分別服務(wù)于事件管理器A和B,2個(gè)獨立的8通道模塊也可以級聯(lián)構成1個(gè)16通道模塊,同時(shí)對16個(gè)通道進(jìn)行采樣,ADC要求輸入的模擬電壓范圍為0~3V.A/D轉換單元負責電流控制環(huán)的電流和電壓值,設計中用事件管理器啟動(dòng)對ADCINA0和ADCINB0同時(shí)采樣,同時(shí)對兩個(gè)通道的輸入信號進(jìn)行轉換。TMS320LF2812雖然有12位精度,但在實(shí)際的使用過(guò)程中,我們發(fā)現,ADC的轉換結果誤差較大,如果直接將此轉換結果用于控制回路,必然會(huì )降低控制精度,最大的轉換誤差可以達到9%,為了提高控制的精度,必須提高A/D的采樣的精度。

硬件角度:加RC硬件濾波,濾除干擾信號;電路布線(xiàn)時(shí)注意不要讓ADCIN引腳運行在靠近數字信號通路的地方,這樣能使耦合到ADC輸入端的數字信號開(kāi)關(guān)噪聲大大降低。采用隔離技術(shù),將ADC模塊電源引腳和數字電源隔離;軟件角度:多次采樣取平均值算法,最為簡(jiǎn)單,但耗費大量時(shí)間,對數字控制環(huán)在短時(shí)間內執行完所有的程序是一對矛盾體;數字濾波算法,例如采用中值濾波法,具體方法為:連續采樣20個(gè)數據,對這些數據進(jìn)行排序之后,去掉最小的5個(gè)和最大的5個(gè),然后取中間10個(gè)采樣數據的平均值,這也要付出時(shí)間上的犧牲,不太適合本設計;軟件校正算法。TMS320LF的ADC轉換精度較差的主要原因是存在增益誤差(Gain Error)和偏置誤差(Offset Error),要提高轉換精度就必須對兩種誤差進(jìn)行補償,這也是本設計中采用的提高A/D模塊的補償方法。

理想的12位ADC是沒(méi)有增益誤差和偏置誤差的,其轉換的計算公式為:

但是,實(shí)際上TMS320LF2812的A/D是存在增益誤差和偏置誤差的,其轉換的計算公式如式5.1所示:

其中,ma=actual gain(實(shí)際的增益)mb=actual offset(偏置誤差)
實(shí)際的和理想的轉換計算曲線(xiàn)如圖5.3所示:

用標準的0~3V信號經(jīng)過(guò)A/D轉換器,由示波器測出電壓信號的精確值,調用CCS的A/D轉換結果寄存器數值,換算成模擬值,計算出可靠的增益誤差和偏置誤差。在數字控制環(huán)中直接使用公式5.1得到的模數轉換結果。

5.3軟件系統代碼的編寫(xiě)

通用的源代碼開(kāi)發(fā)可以用兩個(gè)方法:一種是利用匯編指令編寫(xiě)源代碼,然后經(jīng)匯編器和鏈接器匯編鏈接后生成可執行目標代碼;另一種方法是用標準C/C++語(yǔ)言在CCS環(huán)境下編寫(xiě)源代碼,經(jīng)C/C++編譯器、匯編器和鏈接器進(jìn)行編譯鏈接,生成可執行目標代碼。這兩種代碼開(kāi)發(fā)方法都需要花費大量的時(shí)間,耗時(shí)又耗力,大大的增加了產(chǎn)品開(kāi)發(fā)難度,延長(cháng)了產(chǎn)品開(kāi)發(fā)的周期,從而影響到開(kāi)發(fā)的效率。

Math Works公司和TI公司聯(lián)合開(kāi)發(fā)的工具包—MATLAB Link for CCS Development Tools,把MATLAB和TI的DSP集成開(kāi)發(fā)環(huán)境CCS(Code Composer Stadiu)及目標DSP連接起來(lái)。用此工具可以來(lái)方便的操做DSP的存儲器或寄存器設置,像操作MATLAB變量一樣,整個(gè)目標DSP對于MATLAB像透明的一樣,在MATLAB環(huán)境下,開(kāi)發(fā)人員可以方便的完成對CCS的操作。MATLAB Link for CCS Development Tools支持CCS識別的任何目標板,包括TI公司EVM板、DSK板和用戶(hù)自己開(kāi)發(fā)的DSP板。如果再把MATLAB Link for CCS Development Tools與另外一個(gè)工具包Embedded Target for the TI TMS320C2000 DSP Platform配合(MathWorks公司和TI公司聯(lián)合開(kāi)發(fā)的)配合使用,則可以直接由MATLAB里面的Simulink模型生成DSP的可執行代碼,即在MATLAB環(huán)境完成DSP開(kāi)發(fā)的過(guò)程。

首先,根據系統的設計在MATLAB/Simulink平臺下搭建系統模型(.mdl),仿真滿(mǎn)意后,通過(guò)MATLAB提供的Real Time Workshop(RTW)生成面向TI編譯器的工程文件代碼(.prj)并進(jìn)一步完成代碼的編譯,運行仿真模型產(chǎn)生C代碼程序,并且生成DSP可執行機器碼(.out),最后下載到目標DSP板上,運行測試程序,完成系統的開(kāi)發(fā)。

上述開(kāi)發(fā)過(guò)程全部在MATLAB/Simulink環(huán)境下進(jìn)行,開(kāi)發(fā)人員不需要寫(xiě)任何代碼,僅僅需要利用MATLAB的模型模塊,就可以完成系統的設計。而且開(kāi)發(fā)人員在系統設計過(guò)程中可隨時(shí)對系統進(jìn)行仿真驗證,確保系統設計的正確性。下圖5.4即為DSP代碼自動(dòng)生成的開(kāi)發(fā)流程圖。

根據設計的控制算法,利用MATLAB Link for CCS Development Tools工具包和Simulink工具包里面的功能模塊,搭建出控制系統的仿真模型,TMS320LF2812是一款32位定點(diǎn)DSP,為了能進(jìn)行浮點(diǎn)運算,我們一般在DSP數據處理中會(huì )使用IQmath庫,用定點(diǎn)運算代替浮點(diǎn)運算,在建模過(guò)程中要處理好數據格式的設置,在建立模型的過(guò)程中尤其要注意那些前后兩級都有連接的模塊,選用統一的Q格式。遇到模擬信號時(shí)用采樣保持器和量化器把模擬連續信號離散化和數字化,數字控制環(huán)的時(shí)間選用為3.3微秒,如下圖5.5所示。

然后根據實(shí)際電路中控制效果,改變配置的PID參數大小,使控制效果達到最佳。本文中根據實(shí)際情況,只采用了PI控制。最后需要注意的是,建模的時(shí)候一定要加入F2812 eZdsp模塊,在自動(dòng)生成代碼的時(shí)候需要對一些模塊進(jìn)行相關(guān)參數設置。F2812 eZdsp模塊主要的配置信息包括:DSPBoardLabel和BuildAction,其中,BuildAction配置代碼生成的四種功能模式:①Code(代碼)模式,只生成C代碼;②Project(工程)模式,只生成工程文件;③Build(編寫(xiě))模式,生成工程文件并編譯鏈接;④Build and Load(編寫(xiě)下載)模式,生成工程文件,編譯鏈接并下載到目標板。DSPBoardLabel配置仿真器型號,所用仿真器為F2812 XDS510 Emulator,選擇Build and load功能模式。然后進(jìn)入Simulink的Simulation-Configuration Parameters,單擊實(shí)時(shí)工作室Real-Time Workshop進(jìn)入配置界面。進(jìn)行如下配置:

System target file:ti_c2000_grt.tle

Make command:make_rtw

Template makefile:ti_c2000_grt.tmf

最后在Real-Time Workshop界面中,點(diǎn)擊generate code按鍵,MATLAB根據設置自動(dòng)生成DSP工程文件,并且自動(dòng)連接打開(kāi)CCS開(kāi)發(fā)環(huán)境,對C代碼進(jìn)行編譯,鏈接、下載到目標板上。通過(guò)CCS IDE,我們可以看到代碼生成過(guò)程中自動(dòng)建立的Project.prj工程文件,工程文件中包括:源文件,庫文件,鏈接文件等。

實(shí)時(shí)工作站針對不同的目標系統,產(chǎn)生相應的代碼,主要包括目標系統相關(guān)的I/O驅動(dòng)和中斷服務(wù)程序(ISR)。產(chǎn)生代碼的過(guò)程中MATLAB環(huán)境會(huì )實(shí)時(shí)的提供相關(guān)的信息,如一些警告或出錯信息,用戶(hù)可以根據提示修改相應的模塊的設置。由于生成的代碼是C代碼,我們還可以根據具體的需要,在后期的時(shí)候方便的修改生成的代碼,以完善設計。

5.4 LCD顯示程序設計

中,本系統選用的信號板液晶顯示屏是由長(cháng)沙太陽(yáng)人公司提供的SMG12864ZK字符型液晶,內置ST7920接口型液晶顯示控制器。因為DSP2812的最高時(shí)鐘頻率可工作在150MHZ,周期為6.67ns,而ST7920控制器中指令與指令輸入之間的時(shí)間間隔都是在幾十微秒或毫秒,小液晶的作用主要是顯示當前的測試模式,具體的實(shí)時(shí)處理數據的顯示由電腦來(lái)完成。

在液晶編程設計過(guò)程中,如何能夠控制好個(gè)控制參數的時(shí)序是至關(guān)重要的,本款液晶的讀寫(xiě)時(shí)序如圖5.6所示。

因為DSP對ST7920等的訪(fǎng)問(wèn)不需要使用判“忙”過(guò)程,故沒(méi)有判“忙”函數的設計。在程序設計時(shí),要特別注意GPIO的控制,在配置時(shí)一定要添加EALLOW保護,否則會(huì )導致配置數據時(shí)發(fā)生數據丟失或數據沖突,液晶驅動(dòng)初始化配置程序如下:

void main(void)

{

InitSysCtrl();//初始化系統控制寄存器、PLL、看門(mén)狗和時(shí)鐘

DINT; //禁止和清除所有CPU中斷向量表

InitPieCtrl();//初始化PIE控制寄存器

IER=0x0000; //禁止所有CPU中斷

IFR=0x0000; //清除所有中斷標志

InitPieVectTable(); //初始化中斷向量表

EALLOW; //允許更改受保護的寄存器

GpioMuxRegs.GPBMUX.all=0; //使相關(guān)I/O工作在GPIO模式

……

GpioMuxRegs.GPBDIR.bit.GPIOB0=1; // RS(控制液晶屏的數據指令選擇引腳)

GpioMuxRegs.GPBDIR.bit.GPIOB11=1; // RW(控制液晶屏的數據讀寫(xiě)選擇引腳)

GpioMuxRegs.GPBDIR.bit.GPIOB12=1; // E(控制液晶屏的使能引腳)

GpioMuxRegs.GPBDIR.bit.GPIOB1=1;//引腳用于控制74LVX3245(U1)方向選擇GpioMuxRegs.GPBDIR.bit.GPIOB2=1;//引腳用于控制74LVX3245(U2)方向選擇GpioDataRegs.GPBSET.bit.GPIOB2=1; //將方向選擇引腳置高

EDIS; //禁止更改受保護的寄存器

lcdreset(); //初始化LCD屏

lcdwc(0x01);//清除顯示

delay(50); //延時(shí)50*66.7ns

hzklib(); //調用顯示函數……

}

5.5鍵盤(pán)程序設計

鍵盤(pán)程序采用查詢(xún)方法來(lái)實(shí)現鍵值的識別。執行主程序前,首先調用按鍵的查詢(xún)程序,判斷選擇的測試模式。鍵盤(pán)輸入信息設計思想如下所示。

(1)判斷是否有鍵按下

按鍵被按下時(shí),相應DSP的GPIO口輸入線(xiàn)的電平被拉低。因此,判斷是否有鍵按下,讀取DSP端口值即可,若端口為低電平,則表明有按鍵鍵按下;若端口仍為高電平,無(wú)鍵按下。

(2)確定按下的鍵值

本設計中用到的按鍵少,一個(gè)按鍵對應一個(gè)GPIO口,通過(guò)讀取不同的GPIO口的值,就可以知道當前按鍵的鍵值。

(3)等待按鍵釋放

確定按鍵的鍵值以后,仍然需要判斷按鍵的釋放,延時(shí)一斷時(shí)間后調用執行相應的子程序。

(4)消抖處理

由于選用的按鍵是機械觸點(diǎn),因此用手按動(dòng)一個(gè)鍵時(shí),按鍵的斷開(kāi)和閉合瞬間會(huì )出現電壓波動(dòng),如圖5.7所示。

為了保證按鍵鍵值的識別,電壓抖動(dòng)的時(shí)候不能進(jìn)行狀態(tài)的輸入查詢(xún)。為此,程序中增加消抖算法,DSP獲得按鍵被按下信息后,并即刻確認按鍵的鍵值,而是延時(shí)1ms后再次檢測相應端口,如果按鍵仍處于低電平,則說(shuō)明按鍵確實(shí)被按下。同理,在DSP檢測到按鍵釋放時(shí),GPIO口恢復高電平,程序同樣也延時(shí)1ms,進(jìn)行后沿的消抖,然后再識別鍵值。

5.6串行通訊設計

由于研究的是基于DSP的實(shí)驗樣機,在控制精度足夠高的情況下,才能完成整機的成型,監控系統是在以后深入的研究的內容,目前僅在CCS環(huán)境下進(jìn)行了調試測試,只對通訊做了簡(jiǎn)單的研究。

串行通訊采用SCI異步通信接口,SCI模塊采用標準的非歸零數據格式,能夠實(shí)現CPU和其他具有SCI端口的外設進(jìn)行數據通訊。進(jìn)行通信協(xié)議的設計,首先要進(jìn)行信息幀結構的設計,串行異步通信以幀為單位,每次傳送一個(gè)數據幀。

TMS320LF2812的數據發(fā)送和接收由數據發(fā)送單元和接收單元來(lái)完成。算法程序運行一次就不停的查詢(xún)是否接收到串口收到的數據,判斷標志位tran_flag是否為1,一旦接收到數據,就將該數據發(fā)送出去,并清tran_flag,同時(shí)恢復串口為接收模式。DSP2812 SCI與計算機通信,采用超級中斷接收數據,DSP每隔4微妙向計算機發(fā)送個(gè)數據。

vvoid main(void)
{
……
SciReg.SCICTL2.TXINTENA = 1;// 使能SCI發(fā)送中斷
while (1)
Interrupt void SCI_TX_isr (void )
{
int i;
for ( i= 0 ; i 10 ; i ++ ); // 軟件延時(shí)1.5微秒,重新初始化PIE,為SCI準備下一次中斷
SciRegs.SCITXBUF=pid_cc.pid_out_reg3 + InitOut;
PieCtrlRegs.PIEACK.all = 0x0100;// 響應中斷
while ( SciRegs.SCICTL2.bit.tran_flag = = 0 );;// 狀態(tài)檢測模式,等待發(fā)送標志為空
}
void InitSci(void) // SCI初始化
{
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0030; // 配置SCI –TX
EDIS;
SciaRegs.SCICCR.all = 0x07;// 8位字符長(cháng)度
SciaRegs.SCICTL1.all = 0x03; // 使能 TX

SciaRegs.SCIHBAUD = 243 >> 8;// 波特率:19200
SciaRegs.SCILBAUD = 243 0x00FF
SciaRegs.SCICTL1.all = 0x0023;// SCI退出復位
}



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>