国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

DSP電機(jī)控制系統(tǒng)驅(qū)動程序的設(shè)計

2015-05-04 08:48黃文力元曉
關(guān)鍵詞:串口通信直流電機(jī)程序設(shè)計

黃文力++元曉

摘要:設(shè)計了一種DSP電機(jī)控制系統(tǒng),開發(fā)了電機(jī)控制可視化界面。建立計算機(jī)(上位機(jī))與DSP(下位機(jī))之間的串口通信機(jī)制,既而完成對電機(jī)運(yùn)行的復(fù)雜控制。著重分析DSP電機(jī)驅(qū)動程序的結(jié)構(gòu)和相關(guān)代碼,理清程序設(shè)計的思路,供相關(guān)研究人員借鑒。

關(guān)鍵詞:DSP 直流電機(jī) 串口通信 程序設(shè)計

中圖分類號:TP29 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2014)12-0147-03

Abstract:A kind of DSP motor control system was designed and one motor control visual interface was developed in the paper. The serial communication mechanism between PC of host and DSP of client is established to finish complicated controls of DC motor. Focus on the analysis of structures and related codes of DSP motor drive program is expected to clear program design ideas for relevant science researches.

Key Words:DSP; DC motor; serial communication; program design

目前,利用DSP實現(xiàn)對電動機(jī)運(yùn)行的控制已經(jīng)成為電機(jī)拖動領(lǐng)域流行且成熟的方案。通過DSP可以實施對多類型電機(jī)的多形式的運(yùn)動控制,其中最突出的是對電機(jī)寬域且平滑的調(diào)速,依據(jù)電機(jī)與DSP類型的不同,具有諸多實用的方案[1,2]。關(guān)于直流電機(jī)的調(diào)速,理論上可以采取三種方式:改變電樞電壓,改變電樞回路電阻,調(diào)節(jié)勵磁磁通,但是由于其它兩種方法缺陷明顯,目前主要采用改變電樞電壓的方法:通過調(diào)節(jié)DSP輸出的PWM波形的占空比,調(diào)控輸入到電機(jī)電樞繞組的電壓有效值,既而實現(xiàn)電機(jī)速度在較寬的范圍內(nèi)平滑改變[3]。

本文介紹一種基于DSP TMS320F2812的電機(jī)控制系統(tǒng)。利用Visual Studio 2010(VS2010)開發(fā)電機(jī)控制界面,構(gòu)建了計算機(jī)(上位機(jī))與DSP(下位機(jī))之間串口的通信機(jī)制,實現(xiàn)對電機(jī)運(yùn)動的控制。著力討論以DSP為信息交換樞紐的電機(jī)驅(qū)動程序的設(shè)計。

1 控制系統(tǒng)開發(fā)

首先,利用集成了.net Framework 4.0的Visual Studio 2010 Windows應(yīng)用程序開發(fā)平臺,采用C#語言開發(fā)出電機(jī)控制界面,用以實現(xiàn)如開停、增/減速、運(yùn)行狀態(tài)查詢等可視化電機(jī)控制功能,如圖1所示;其次,構(gòu)建上位機(jī)與下位機(jī)之間的串口通信機(jī)制,由上位機(jī)PC把相應(yīng)的控制命令傳遞給下位機(jī)DSP,執(zhí)行電機(jī)控制的操作命令;最后,由DSP構(gòu)成電機(jī)控制系統(tǒng)的信息交換樞紐,一方面?zhèn)鬟f上位機(jī)下達(dá)的控制命令給電動機(jī),另一方面把電動機(jī)運(yùn)行狀態(tài)的相關(guān)信息反饋給上位機(jī),實現(xiàn)對電機(jī)運(yùn)行狀態(tài)的實時監(jiān)控。

該控制系統(tǒng)整體為主從式計算機(jī)結(jié)構(gòu)如圖2所示,其中PC為上位機(jī),DSP為下位機(jī),兩者之間通過串口RS232C協(xié)議交換數(shù)據(jù)。硬件電路連接如圖3所示,包括計算機(jī)、DSP開發(fā)板、仿真器、電機(jī)驅(qū)動電路板、直流電動機(jī)和一些電路連接線。

2 驅(qū)動程序設(shè)計

CCS3.3是一個集成版的DSP應(yīng)用程序開發(fā)環(huán)境,基本涵蓋了TI公司所有型號的DSP,與其它版本相比體積稍大,但是代碼優(yōu)化效率較高,調(diào)試方便,是目前用的最多的DSP程序開發(fā)平臺。該電機(jī)控制系統(tǒng)利用C語言基于CCS3.3軟件平臺開發(fā)DSP的電機(jī)驅(qū)動程序,建立電機(jī)控制策略實施的紐帶。

DSP的驅(qū)動程序主要包括:各個外設(shè)的初始化函數(shù)、主函數(shù)與輸入中斷函數(shù)。其中初始化函數(shù)完成相應(yīng)外設(shè)的初始化定義,如系統(tǒng)、輸入/輸出引腳、串行通信接口、事件管理器等;主函數(shù)完成相關(guān)變量、宏及功能函數(shù)的定義,最后形成一個死循環(huán),等待CPU對電機(jī)控制命令中斷請求的響應(yīng),完成對電機(jī)運(yùn)動的調(diào)節(jié);中斷函數(shù)為電機(jī)各種控制命令在DSP電機(jī)驅(qū)動程序中的入口,利用事件響應(yīng)機(jī)制去完成對電機(jī)行為的控制。程序整體采用模塊化結(jié)構(gòu),通過調(diào)用一個個功能子函數(shù)來實現(xiàn)對電機(jī)的不同控制,邏輯清晰,便于實現(xiàn)系統(tǒng)功能的擴(kuò)展。

驅(qū)動程序的設(shè)計思路如圖4所示,首先需要完成DSP及相應(yīng)功能外設(shè)的初始化,即準(zhǔn)備好去執(zhí)行電機(jī)的控制命令,然后等待串口的電機(jī)控制命令的輸入,即形成一個死循環(huán)。當(dāng)串口有電機(jī)操作指令輸入時,隨即發(fā)生中斷事件,調(diào)用中斷函數(shù),執(zhí)行相應(yīng)的電機(jī)操作指令,包括電機(jī)的起/停、正/反轉(zhuǎn)、加/減速、狀態(tài)查詢等;在指令完成后,返回死循環(huán)進(jìn)入待命狀態(tài),等待下一個電機(jī)操作指令,周而復(fù)始。

2.1 主函數(shù)

首先引用相關(guān)的頭文件,定義相應(yīng)的宏、變量與功能函數(shù),然后在主函數(shù)中完成相關(guān)變量、函數(shù)及外設(shè)功能的初始化,最后形成一個死循環(huán),等待串口輸入對CPU的中斷請求,既而完成電機(jī)行為的相關(guān)控制指令。以下程序代碼的省略部分,均為DSP程序的一些固定的功能語句,如中斷的使能、外設(shè)功能的設(shè)定等,為了節(jié)省篇幅,不再一一列出,可以參閱文獻(xiàn)[4]。

//頭文件,宏、變量、功能函數(shù)定義等

……;

void main(void)

{

InitSysCtrl(); //初始化系統(tǒng)函數(shù)

//CPU中斷,PIE寄存器、外設(shè)初始化[4]

……;

InitGpio(); //初始化Gpio口

InitEv();endprint

for(i = 0; i < 4; i++) //初始化數(shù)組變量

{

Sci_VarRx[i] = 0;//存儲電機(jī)控制指令

}

i = 0;//初始化

M1_Flag=0; M2_Flag=0;//電機(jī)起始為停止?fàn)顟B(tài)

//電機(jī)控制界面顯示波特率初值

sendMsg(SciaRegs.SCIHBAUD);

sendMsg(SciaRegs.SCILBAUD);

//定時器T3和T1計數(shù)使能

EvbRegs.T3CON.bit.TENABLE=1;

EvaRegs.T1CON.bit.TENABLE=1;

/*使能SCI中斷,開CPU中斷,使能全局與實時中斷[4]*/

……;

for(;;) { }

}

2.2 功能函數(shù)

該電機(jī)控制系統(tǒng)實現(xiàn)了控制2臺(易于擴(kuò)展到多臺)直流電機(jī)的起/停、正/反轉(zhuǎn)、加/減速、狀態(tài)查詢等行為,由于程序采用模塊化結(jié)構(gòu),每一個控制功能都對應(yīng)特定的功能函數(shù),且每一個功能函數(shù)的結(jié)構(gòu)類似,皆為先判斷指令對象,然后再依據(jù)不同的指令代碼執(zhí)行對應(yīng)的動作。因此在此僅列出加速功能函數(shù)的代碼,其中省略部分為對兩臺以上電機(jī)的相同操作,不再重復(fù)。其它功能函數(shù)以此類推。

void M_Inc(unsigned int num) //加速函數(shù)

{

if((num==1)&(M1_Flag!=0)) //電機(jī)M1

{

//占空比增加2%

EvaRegs.CMPR1=EvaRegs.CMPR1+375;

if(EvaRegs.CMPR1>=0x41EB)

{

//最大占空比值為90%

EvaRegs.CMPR1=0x41EB;

}

}

else if((num==2)&(M2_Flag!=0)) //其它電機(jī)

{

……;//相同控制代碼

}

}

2.3 系統(tǒng)初始化函數(shù)

在系統(tǒng)初始化函數(shù)中,主要完成關(guān)閉看門狗電路、初始化PLL鎖相環(huán)模塊、設(shè)定高/低速時鐘預(yù)定標(biāo)器頻率等,也就是說確定系統(tǒng)輸出PWM波的頻率,相關(guān)內(nèi)容可以參閱文獻(xiàn)[4]。以下主要列出該工程中用到的外設(shè)的初始化設(shè)置代碼:

void InitSysCtrl(void)

{

//關(guān)門狗電路、PLL模塊、高低速時鐘初始化[4]

……;

// EVA、EVB、SCIA模塊時鐘使能

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;

SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;

}

2.4 I/O口初始化函數(shù)

在輸入輸出引腳初始化函數(shù)中,主要完成工程用到引腳的功能與方向的設(shè)定,如引腳為功能引腳還是通用的輸入輸出引腳、是輸入還是輸出引腳等。其代碼如下:

void InitGpio(void)

{

EALLOW;//使能寄存器訪問

//設(shè)置串口的的發(fā)送和接收引腳為功能引腳 GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1;

GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1;

//設(shè)置GPIOA0、A1等引腳為功能引腳

GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=1;

GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1=1;

GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=1;

GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1=1;

EDIS;//關(guān)閉寄存器訪問

}

2.5 串口初始化函數(shù)

該工程利用串口的SCIA模塊,其初始化包括設(shè)置1位停止位、8位數(shù)據(jù)位,禁止奇偶校驗、禁止數(shù)據(jù)回送測試,使能串口的發(fā)送和接收數(shù)據(jù)功能,使能中斷方式發(fā)送和接收數(shù)據(jù),設(shè)置波特率等,最后重啟SCI保存設(shè)置,完成初始化。主要代碼如下所示:

void InitSci(void)

{

//停止位、數(shù)據(jù)位、極性校驗等設(shè)置[4]

……;

SciaRegs.SCIHBAUD=0x00;

SciaRegs.SCILBAUD=0xE7;//波特率為9600

//發(fā)送和接收數(shù)據(jù)使能,中斷使能。重啟SCI[4]

……;

}

2.6 事件管理器初始化函數(shù)

在事件管理器初始化函數(shù)中,分別設(shè)定事件管理器EVA的定時器T1與EVB的定時器T3工作于連續(xù)增/減計數(shù)模式,定時器的時鐘頻率為37.5MHz,暫時禁止T1計數(shù),使能T1內(nèi)部時鐘,設(shè)定T1的周期值為0x493E=18750(即相應(yīng)的PWM波頻率為1kHz),設(shè)定T1計數(shù)器初始值為0;使能比較單元的比較操作,全比較器輸出,相應(yīng)引腳PWM1~PWM6由比較邏輯驅(qū)動;立即重載寄存器保存設(shè)置;設(shè)定PWM1引腳為低電平有效,PWM2引腳為高電平有效,初始占空比值為0x1250(25%);設(shè)定死區(qū)定時器周期為10 s,定時器預(yù)定標(biāo)因子為(37.5 MHz)/8≈4.69 MHz,相應(yīng)的死區(qū)時間約為10/(4.69×106)≈2.13μs。對于EVB的操作完全類似,代碼如下所示:endprint

void InitEv(void)

{

/*EVA模塊。設(shè)定T1工作模式、時鐘頻率、周期值,T1計數(shù)器初值。比較單元1使能及相關(guān)引腳設(shè)定[4]。*/

……;

/*PWM1、PWM2引腳初始低電平,保證電機(jī)初始停止?fàn)顟B(tài)。*/

EvaRegs.ACTR.bit.CMP1ACT=0;

EvaRegs.ACTR.bit.CMP2ACT=0;

EvaRegs.CMPR1=0x1250;//占空比初始值25%

EvaRegs.DBTCONA.bit.DBT=10;//死區(qū)定時器周期

//死區(qū)定時器1使能

EvaRegs.DBTCONA.bit.EDBT1=1;

//死區(qū)定時器預(yù)定標(biāo)因子

EvaRegs.DBTCONA.bit.EDBT1=3;

/*EVB模塊。與EVA模塊完全類似,只需把定時器T1換為T3,引腳PWM1與PWM2改為PWM7與PWM8,死區(qū)定時器控制寄存器DBTCONA改為DBTCONB即可。*/

……;

}

2.7 中斷函數(shù)

DSP采用中斷方式響應(yīng)串口數(shù)據(jù)的讀取,所有對電機(jī)的控制操作皆在中斷函數(shù)里完成,不同的控制命令調(diào)用不同的功能子函數(shù)。相應(yīng)程序的代碼結(jié)構(gòu)如下:

/*只要串口輸入緩沖區(qū)有數(shù)據(jù)需要接收,CPU就//會執(zhí)行此中斷函數(shù)。*/

interrupt void SCIRXINTA_ISR(void)

{

//利用數(shù)組保存控制命令數(shù)據(jù)

Sci_VarRx[i] = SciaRegs.SCIRXBUF.all;

i++;//主函數(shù)中已定義

//根據(jù)命令代碼格式,01為電機(jī)正反轉(zhuǎn)識別代碼

if(Sci_VarRx[0]==0x0001)

{

Rec_Manage(Sci_VarRx[0]);//電機(jī)正/反轉(zhuǎn)

}

//02為電機(jī)停止識別代碼

else if(Sci_VarRx[0]==0x0002)

{

……;//電機(jī)停止

}

/*03、04分別對應(yīng)電機(jī)加/減速、占空比設(shè)定、運(yùn)行狀態(tài)查詢等識別代碼。*/

……;

if(i==4){ i=0; }

//使得同組其他中斷能夠得到響應(yīng)

PieCtrl.PIEACK.bit.ACK9=1;

EINT; //開全局中斷

}

3 結(jié)語

基于DSP所設(shè)計的電機(jī)運(yùn)動控制器目前應(yīng)用廣泛,方案眾多。本文介紹了一種可以實現(xiàn)對多臺直流電機(jī)實施調(diào)節(jié)的DSP電機(jī)控制系統(tǒng),利用VS2010開發(fā)了電機(jī)控制界面,并且建立了上、下位機(jī)之間的串口通信機(jī)制,成功實現(xiàn)了對多臺(兩臺)電機(jī)運(yùn)行的調(diào)制和狀態(tài)的實時監(jiān)控。另外,深入分析了基于C語言的DSP電機(jī)驅(qū)動程序的結(jié)構(gòu)和有關(guān)代碼,力爭建立DSP相關(guān)電機(jī)驅(qū)動程序的模塊化結(jié)構(gòu)與模式化設(shè)計的思維。

參考文獻(xiàn)

[1]任忠,王自強(qiáng).基于DSP控制的無刷直流電機(jī)調(diào)速系統(tǒng)的設(shè)計[J].電力電子,2008,30(3):30-32.

[2]李宏,徐德民,焦振宏.基于DSP的大功率永磁直流電機(jī)調(diào)速系統(tǒng)設(shè)計[J].電力電子技術(shù),2006,40(5):29-31.

[3]李方圓,李曉.基于dsp直流電機(jī)調(diào)速系統(tǒng)的設(shè)計[J].數(shù)字技術(shù)與應(yīng)用,2012,(12):128-130.

[4]顧衛(wèi)剛.手把手教你學(xué)DSP——基于TMS320X281x[M].北京:北京航空航天大學(xué)出版社,2011.endprint

猜你喜歡
串口通信直流電機(jī)程序設(shè)計
基于模糊PID的無刷直流電機(jī)速度控制系統(tǒng)的設(shè)計與仿真
基于Visual Studio Code的C語言程序設(shè)計實踐教學(xué)探索
從細(xì)節(jié)入手,談PLC程序設(shè)計技巧
基于FPGA的雙繞組無刷直流電機(jī)軟件設(shè)計
基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計
高職高專院校C語言程序設(shè)計教學(xué)改革探索
PLC梯形圖程序設(shè)計技巧及應(yīng)用
基于模糊神經(jīng)網(wǎng)絡(luò)PID的無刷直流電機(jī)控制系統(tǒng)研究
一種改進(jìn)的無刷直流電機(jī)控制方法
西盟| 黑山县| 平利县| 新巴尔虎右旗| 黔东| 商洛市| 杭州市| 彭阳县| 星座| 阳西县| 双江| 宜都市| 杭锦后旗| 宝丰县| 阳东县| 遂川县| 大足县| 阳曲县| 榆树市| 太谷县| 赣州市| 织金县| 桃园市| 榆社县| 柞水县| 汉中市| 富川| 民勤县| 瓮安县| 蓝田县| 新龙县| 沂水县| 麻阳| 澄迈县| 永新县| 施甸县| 玉环县| 营山县| 尼木县| 涞水县| 高青县|