楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
電機控制系統(tǒng)的軟件設(shè)計與解決方案
楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
為防止電機輸出軸因意外信號或者人為過失導(dǎo)致電機輸出軸偏離預(yù)想位置,提出一種基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C控制系統(tǒng)解決方案。本系統(tǒng)包括測試儀模塊、控制盒、被控電機及位置傳感器等。主要實現(xiàn)電機1輸出軸鎖緊、解鎖及采集電機2電壓反饋功能。
數(shù)據(jù)傳輸;1553B bus;鎖緊;解鎖
為防止電機輸出軸因意外信號或者人為過失導(dǎo)致電機輸出軸偏離預(yù)想位置,導(dǎo)致輸出軸連接表盤指針指示角度偏離預(yù)期值[1],本文提出一種基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C控制系統(tǒng)解決方案。電機控制系統(tǒng)包括測試儀模塊、控制盒、被控步進電機1、被控步進電機2及位置傳感器,如圖1所示,其中測試儀模塊1553B總線控制器采用NI公司的PXI 6232板卡,控制盒采用DSP TMS320F2812。
測試儀模塊發(fā)出鎖緊(解鎖)指令至控制盒,控制盒驅(qū)動步進電機1輸出軸自初始位置向外伸出或向內(nèi)縮進。位置傳感器1及位置傳感器2實時采集步進電機1輸出軸的位置狀態(tài),當(dāng)位置傳感器1感知到步進電機1輸出軸到達(dá)鎖緊位置時,DSP的GPIOF5口電平由1變?yōu)?;反之當(dāng)位置傳感器2感知到步進電機1輸出軸到達(dá)解鎖位置時,DSP的GPIOF4口電平由1變?yōu)?。
當(dāng)系統(tǒng)處于解鎖狀態(tài)時,測試模塊可以發(fā)送不同大小的控制角度信號驅(qū)動步進電機2輸出軸作伸縮動作。電機2的輸出軸在齒輪的作用下促使與之相連的表盤指針發(fā)生一定角度的偏轉(zhuǎn)。
原控制方案中未用鎖緊裝置固定電機,在外部干擾嚴(yán)重的情況下會導(dǎo)致偏轉(zhuǎn)電機發(fā)生不必要的偏轉(zhuǎn),使得控制角度偏離預(yù)期值。
電機控制系統(tǒng)示意圖如圖1所示。
圖1 電機控制系統(tǒng)示意圖Fig.1 The scheme of control system of motor
2.1 設(shè)計環(huán)境
設(shè)計環(huán)境為CCStudio 3.1,編程語言為C語言。
2.2 設(shè)計思路
控制盒中的DSP軟件用C語言設(shè)計開發(fā),步進電機控制采用控制DSP的I/O口輸出脈沖的方式實現(xiàn)。整個控制軟件是一個死循環(huán),在循環(huán)中接收1553B命令,根據(jù)CAN命令控制步進電機運動完成鎖緊及解鎖控制功能。軟件采用多線程控制方式,實時地更新通過1553B總線發(fā)送的伺服機構(gòu)位置狀態(tài)信息[2]。
2.3 設(shè)計流程
控制主程序分為兩個分支,當(dāng)控制盒上電后,系統(tǒng)循環(huán)查詢DSP的GPIOA15的狀態(tài),如果GPIOA15電平為低電平則進行電機2的旋轉(zhuǎn)控制;反之,進行電機1的鎖緊解鎖控制。主程序設(shè)計流程圖如圖2所示。
圖2 主程序流程圖Fig.2 The flow chart of main function
電機2的旋轉(zhuǎn)控制流程如圖3所示。
圖3 控制軟件旋轉(zhuǎn)功能流程圖Fig.3 The flow chart of rotate function of control software
電機1的鎖緊解鎖流程如圖4所示。
圖4 控制軟件鎖緊解鎖功能流程圖Fig.4 The flow chart of lock function of control software
2.4 代碼編寫
控制主程序[3]實現(xiàn)部分代碼如下所示:
void main(void)
{
InitSysCtrl();
……//初始化系統(tǒng)
while (1)
{
if(GpioDataRegs.GPADAT.bit.GPIOA15 == 0)
{ MyControlCircle(); }// 電機2旋轉(zhuǎn)動作
else { MyLockCircle();}//電機1鎖緊解鎖動作
}
}
電機1鎖緊解鎖功能實現(xiàn)部分代碼[4]如下所示:
void MyLockCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號
Uk = AD_Val[0]; //取出對應(yīng)電機控制指令位數(shù)據(jù)
DT = 1280 - (Uk / 3.2); //計算比較寄存器值
if (DT >= 0){EvbRegs.CMPR4 = DT;}//PWM波輸出
else {EvbRegs.CMPR4 = -DT;} //PWM波輸出
}
電機2旋轉(zhuǎn)控制部分代碼[5]如下所示:
void MyControlCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號
Uk = AD_Val[0]; //取出對應(yīng)電機控制指令位數(shù)據(jù)
Uf = AD_Val[2]; //取出對應(yīng)電機反饋指令位數(shù)據(jù)
ek = Uk + Uf * 5 * 35 / 246; //誤差生成
DT = -(ek * 6 / 2 - 1280); //計算比較寄存器值
if (DT >= 0) {EvbRegs.CMPR4 = DT;} //PWM波輸
else {EvbRegs.CMPR4 = -DT; } //PWM波輸
}
3.1 設(shè)計環(huán)境
設(shè)計環(huán)境為Microsoft Visual Studio 2005,編程語言為C語言。
3.2 設(shè)計思路
測試軟件用VS2005開發(fā),主要完成控制命令的發(fā)送以及轉(zhuǎn)位機構(gòu)位置信息的讀取。本測試儀通過NI公司的1553B總線控制器PXI6232[6]完成命令的發(fā)送和位置信息的獲取。
3.3 設(shè)計流程
鎖緊解鎖模塊控制電機1輸出軸動作,實現(xiàn)系統(tǒng)鎖緊解鎖功能。測試軟件鎖緊解鎖功能實現(xiàn)流程圖如圖5所示。
圖5 測試軟件解鎖鎖緊功能流程圖Fig.5 The flow chart of lock function of test software
系統(tǒng)循環(huán)查看PXI6232板卡IO口P1.0及P1.1的狀態(tài)信息[7],并根據(jù)其狀態(tài)信息使能或禁止系統(tǒng)解鎖或鎖緊功能。當(dāng)系統(tǒng)提示已鎖緊后,電機2旋轉(zhuǎn)功能禁止,用戶需完成解鎖操作,當(dāng)系統(tǒng)提示已解鎖后,電機2旋轉(zhuǎn)功能使能。
當(dāng)系統(tǒng)旋轉(zhuǎn)功能使能后,系統(tǒng)可以實現(xiàn)對電機2的旋轉(zhuǎn)控制。旋轉(zhuǎn)功能流程圖如圖6所示。
圖6 測試軟件旋轉(zhuǎn)功能流程圖Fig.6 The flow chart of rotate function of test software
3.4 代碼編寫
鎖緊操作功能部分代碼[8]如下所示:
void OnBnClickedSuojin() //鎖緊
{
CNiBoard *pPXI6232; //定義新的板卡操作對象指針
bool ioflag_F4, ioflag_F5;//IO口電平標(biāo)志位
pPXI6232 = new CNiBoard; //定義板卡操作對象
pPXI6232->AOTaskConfig(_T("Dev1/ao0"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(1); //發(fā)送1°控制指令
do {//解鎖位置
ioflag_F4 = pPXI6232->IORead(_T("Dev1/port0/line0"));
//鎖緊位置
ioflag_F5 = pPXI6232->IORead(_T("Dev1/port0/line1")); }
while (ioflag_F5);
pPXI6232->WriteSingleSample(0); //發(fā)送零控信號
MessageBox(_T("已鎖緊"), NULL, MB_OK); //提示“已鎖緊”信息
}
解鎖操作功能部分代碼如下所示:
void OnBnClickedButton4() //解鎖
{
CNiBoard *pPXI6232; //定義新的板卡操作對象指針
bool ioflag_F4, ioflag_F5;//IO口電平標(biāo)志位
pPXI6232 = new CNiBoard; //定義板卡操作對象
pPXI6232->AOTaskConfig(_T("Dev1/ao0"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(-1); //發(fā)送-1°控制指令
do {//解鎖位置
ioflag_F4 = pPXI6232->IORead(_T("Dev1/port0/line0"));
//鎖緊位置
ioflag_F5 = pPXI6232->IORead(_T("Dev1/port0/line1")); }
while (ioflag_F4);
pPXI6232->WriteSingleSample(0); //發(fā)送零控信號
MessageBox(_T("已解鎖"), NULL, MB_OK); //提示“已解鎖”信息
}
電機2的旋轉(zhuǎn)控制過程中需要實時采集電機反饋角度信號[9],本設(shè)計中采取多線程[10]模式進行反饋角度讀取操作。
當(dāng)用戶點擊旋轉(zhuǎn)按鈕后系統(tǒng)執(zhí)行旋轉(zhuǎn)功能,部分代碼如下所示:
void OnBnClickedXuanzhuan()
{
CString s;
hDlg->GetDlgItem(IDC_TESTAMPLITUDE)->GetWindo-wText(s);
double amplitude = atof(s.GetBuffer());//獲取“目標(biāo)角度”輸入值
pPXI6232->AOTaskConfig(_T("Dev1/ao1"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(amplitude); //發(fā)送設(shè)計“目標(biāo)角度”
OnBnClickedGetuf();//調(diào)用反饋獲取函數(shù)
}
當(dāng)用戶點擊采集反饋按鈕時,觸發(fā)系統(tǒng)采集反饋角度功能,部分代碼如下所示:
void OnBnClickedGetuf()
{
if (getukflag == true){return;} //采集反饋標(biāo)志位為真則跳出
getukflag = true; //采集反饋標(biāo)志位置位
GetDlgItem(IDC_GETUF)->EnableWindow(FALSE);//禁止采集反饋功能
GetDlgItem(IDC_STOPGETUF)->EnableWindow(TRUE); //使能停止采集反饋功能
xuanzhuan = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)XUANZHUAN, this, CREATE_SUSPENDED, &xuanzhuanid); //定義采集反饋角度的線程(其中xuanzhuanid為DWORD型變量,XUANZHUAN為反饋角度采集函數(shù))
ResumeThread(xuanzhuan); //啟動采集角度反饋線程
}
反饋角度采集函數(shù)如下所示:
void XUANZHUAN(TestFormView *hWnd) //測試界面?zhèn)魅胄D(zhuǎn)線程
{
hWnd->pPXI6232->AITaskConfig(_T("Dev1/ai0"));//配置AI通道
while (hWnd->getukflag) //當(dāng)采集反庫標(biāo)識置位時讀取反饋角度
{
hWnd->ukreadvector = hWnd->pPXI6232->ReadSingleSample();//讀取反饋角度值
PostMessage(hWnd->m_hWnd, WM_SHOWUF, NULL, NULL);//發(fā)送消息置界面
Sleep(500);//反饋角度獲取間隙為0.5s
}
}
當(dāng)用戶點擊停止采集按鈕時,觸發(fā)系統(tǒng)采集反饋角度功能,部分代碼如下所示:
void OnBnClickedStopgetuf()
{
GetDlgItem(IDC_STOPGETUF)->EnableWindow(FALSE);
GetDlgItem(IDC_GETUF)->EnableWindow(TRUE);
getukflag = false;
}
3.5 用戶界面功能描述
進入電機控制界面時,用戶可以對電機進行解鎖鎖緊控制及旋轉(zhuǎn)控制,在電機旋轉(zhuǎn)過程中,用戶可以對反饋角度進行采集。測試界面如圖7所示。
圖7 測試界面示意圖Fig.7 The scheme of test interface
當(dāng)圖7中鎖緊按鈕、旋轉(zhuǎn)按鈕、采集反饋按鈕及停止采集按鈕均被禁止時,表示目前電機1輸出軸所處位置為鎖緊位置,系統(tǒng)僅可進行鎖緊操作。
當(dāng)點擊解鎖按鈕,測試軟件界面提示信息已解鎖(如圖8所示)后,用戶可在界面輸入目標(biāo)角度,并點擊旋轉(zhuǎn),電機2在控制信號作用下進行相應(yīng)動作,用戶可點擊采集反饋按鈕,系統(tǒng)可采集與電機2輸出軸相連接的表盤指針實際偏轉(zhuǎn)角度并顯示于界面內(nèi)。
圖8 解鎖提示信息示意圖Fig.8 The scheme of hint of unlock
點擊圖9中的停止按鈕時,界面反饋停止更新,且停止采集按鈕被禁止,采集反饋按鈕被使能。
圖9 測試界面示意圖Fig.9 The scheme of test interface
3.6 數(shù)據(jù)對比
在新控制方案鎖緊狀態(tài)下人為扳動步進電機2的輸出軸若干次,然后采集零位值ZeroNew,在舊控制方案中人為扳動電機輸出軸若干次并采集輸出軸位置零位反饋值ZeroOld,結(jié)果如表1所示。
表1 數(shù)據(jù)對比表
由表1可知,鎖緊裝置有效地防止了電機因外力干擾而發(fā)生不必要的動作所造成的偏離預(yù)期位置。
本文針對電機輸出軸易因意外信號或者人為過失導(dǎo)致電機輸出軸偏離預(yù)想位置的問題,根據(jù)需求設(shè)計基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C控制系統(tǒng),實現(xiàn)電機系統(tǒng)解鎖鎖緊操作,并能實時控制和采集電機偏轉(zhuǎn)角度。經(jīng)多組測試數(shù)據(jù)實驗驗證與對比,證明了所設(shè)計電機控制系統(tǒng)具有較高的精確度。該方案可以保證電機控制的實時性和準(zhǔn)確性,解決了因電機輸出軸意外偏離而導(dǎo)致測試結(jié)果與預(yù)期相差較大的問題。
[1] 顧衛(wèi)鋼.手把手教你學(xué)DSP——基于TMS320X281x[M].北京:北京航空航天大學(xué)出版社2011:180-189.
[2] TMS320F2810, TMS320F2812 Digital Signal Processors[R].Texas Instruments, 2003:68-69.
[3] TMS320F28x Boot ROM Reference Guide (Rev.A)[R].Texas Instruments, 2003:31-36.
[4] Hardware Design Guidelines for TMS320F28xx and TMS320F28xxx DSCs[R].Texas Instruments, 2008:11-17.
[5] 蘇奎峰,呂強.TMS320F2812 原理與開發(fā)[M].北京:電子工業(yè)出版社,2005:33-36.
[6] 孫麗明.TMS320F2812原理及其C語言程序開發(fā)[M].北京: 清華大學(xué)出版社,2008:112-120.
[7] TMS320F281x Assembly Language Tools User’s Guide[R].Texas Instruments, 2002:243-250.
[8] TMS320F28xx28xxx DSCs模擬接口設(shè)計綜述[R].Texas Instruments,2008:11-14.
[9] Running an Application from Internal Flash Memory on the TMS320F28xx DSP[R].Texas Instruments, 2008:10-19.
[10] 張衛(wèi)寧.TMS320C28x系列DSP的CPU與外設(shè)(下)[M].北京:清華大學(xué)出版社,2005:180-200.
Software Design and Solution for a Control System of Motor
YANG Xi, ZHU Yan-fang, FU Shi, BAI Lei
(Hubei Sanjiang Aerospace Hongfeng Control Co.,Ltd., Xiaogan, Hubei 432000,China)
To provent the motor axis's departure from the expected position due to accidental signal or artificial fault, a solution for motor control system by using 1553B bus data transmission is put forward to realize locking/unlocking function of motor 1 and collect position state of motor 2 at the same time.
Data transmission; 1553B bus; Lock; Unlock
10.19306/j.cnki.2095-8110.2016.06.015
2015-03-28;
2015-07-01。
楊茜(1987 - ),女,碩士,助理工程師,主要從事軟件測試方面的研究。E-mail: yangxi_88@163.com
TP311.1
A
2095-8110(2016)06-0076-06