999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2015-05-04 08:48:49黃文力元曉
數(shù)字技術與應用 2014年12期

黃文力++元曉

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

關鍵詞:DSP 直流電機 串口通信 程序設計

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

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

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

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

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

2 驅(qū)動程序設計

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

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

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

2.1 主函數(shù)

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

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

……;

void main(void)

{

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

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

……;

InitGpio(); //初始化Gpio口

InitEv();endprint

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

{

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

}

i = 0;//初始化

M1_Flag=0; M2_Flag=0;//電機起始為停止狀態(tài)

//電機控制界面顯示波特率初值

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ù)

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

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

{

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

{

//占空比增加2%

EvaRegs.CMPR1=EvaRegs.CMPR1+375;

if(EvaRegs.CMPR1>=0x41EB)

{

//最大占空比值為90%

EvaRegs.CMPR1=0x41EB;

}

}

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

{

……;//相同控制代碼

}

}

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

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

void InitSysCtrl(void)

{

//關門狗電路、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ù)中,主要完成工程用到引腳的功能與方向的設定,如引腳為功能引腳還是通用的輸入輸出引腳、是輸入還是輸出引腳等。其代碼如下:

void InitGpio(void)

{

EALLOW;//使能寄存器訪問

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

GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1;

//設置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;//關閉寄存器訪問

}

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

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

void InitSci(void)

{

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

……;

SciaRegs.SCIHBAUD=0x00;

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

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

……;

}

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

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

void InitEv(void)

{

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

……;

/*PWM1、PWM2引腳初始低電平,保證電機初始停止狀態(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ū)定時器預定標因子

EvaRegs.DBTCONA.bit.EDBT1=3;

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

……;

}

2.7 中斷函數(shù)

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

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

interrupt void SCIRXINTA_ISR(void)

{

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

Sci_VarRx[i] = SciaRegs.SCIRXBUF.all;

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

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

if(Sci_VarRx[0]==0x0001)

{

Rec_Manage(Sci_VarRx[0]);//電機正/反轉

}

//02為電機停止識別代碼

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

{

……;//電機停止

}

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

……;

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

//使得同組其他中斷能夠得到響應

PieCtrl.PIEACK.bit.ACK9=1;

EINT; //開全局中斷

}

3 結語

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

參考文獻

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

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

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

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

主站蜘蛛池模板: 亚洲国产成人久久77| 国产一级毛片网站| av在线5g无码天天| 美女啪啪无遮挡| a级毛片免费播放| 99re在线免费视频| 国国产a国产片免费麻豆| 国产丝袜精品| 国产一级一级毛片永久| 国产午夜在线观看视频| 久操线在视频在线观看| 精品成人一区二区| 91精品国产情侣高潮露脸| 天天躁夜夜躁狠狠躁躁88| 精品国产Av电影无码久久久| 色综合天天视频在线观看| 国产成人夜色91| 99视频精品在线观看| 欧美成人午夜视频| 午夜日韩久久影院| 成人精品免费视频| 免费高清自慰一区二区三区| 亚洲福利一区二区三区| 色哟哟精品无码网站在线播放视频| 国产XXXX做受性欧美88| 久久综合亚洲鲁鲁九月天| 亚洲h视频在线| 亚洲AV无码乱码在线观看代蜜桃| 亚洲一区波多野结衣二区三区| 啪啪永久免费av| 中文字幕免费在线视频| 无码日韩人妻精品久久蜜桃| 国产精品偷伦视频免费观看国产| 久久香蕉国产线看观看精品蕉| 亚洲国产欧洲精品路线久久| 成人无码区免费视频网站蜜臀| 亚洲国产亚洲综合在线尤物| 2020国产免费久久精品99| 99伊人精品| 国产成人喷潮在线观看| 免费在线国产一区二区三区精品| 亚洲制服丝袜第一页| 国产精品黄色片| 国产精品v欧美| 久久精品无码一区二区国产区| 青青草国产一区二区三区| 亚洲二三区| 国产99热| 亚洲欧美一区二区三区图片| 亚洲人成在线免费观看| 成人亚洲国产| 国产最新无码专区在线| 亚洲日韩欧美在线观看| 亚洲大学生视频在线播放| 啊嗯不日本网站| 免费精品一区二区h| 伊人福利视频| 日韩欧美国产成人| 久久精品一品道久久精品| 久久精品波多野结衣| 亚洲乱码在线视频| 麻豆精选在线| 久久香蕉国产线看精品| 久久精品国产电影| 国产成人综合久久| 亚洲V日韩V无码一区二区| 伊人激情综合| 精品视频一区二区观看| 日韩人妻无码制服丝袜视频| 国国产a国产片免费麻豆| 亚洲精品亚洲人成在线| 一级成人欧美一区在线观看| 天天综合色网| 日韩精品一区二区三区大桥未久 | 国产在线观看第二页| 国产91精选在线观看| 国产精品人成在线播放| 亚洲AV永久无码精品古装片| 亚洲最新地址| 国产一级α片| 亚洲欧美人成电影在线观看| 伊伊人成亚洲综合人网7777|