楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
電機(jī)控制系統(tǒng)的軟件設(shè)計(jì)與解決方案
楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
為防止電機(jī)輸出軸因意外信號(hào)或者人為過失導(dǎo)致電機(jī)輸出軸偏離預(yù)想位置,提出一種基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C(jī)控制系統(tǒng)解決方案。本系統(tǒng)包括測(cè)試儀模塊、控制盒、被控電機(jī)及位置傳感器等。主要實(shí)現(xiàn)電機(jī)1輸出軸鎖緊、解鎖及采集電機(jī)2電壓反饋功能。
數(shù)據(jù)傳輸;1553B bus;鎖緊;解鎖
為防止電機(jī)輸出軸因意外信號(hào)或者人為過失導(dǎo)致電機(jī)輸出軸偏離預(yù)想位置,導(dǎo)致輸出軸連接表盤指針指示角度偏離預(yù)期值[1],本文提出一種基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C(jī)控制系統(tǒng)解決方案。電機(jī)控制系統(tǒng)包括測(cè)試儀模塊、控制盒、被控步進(jìn)電機(jī)1、被控步進(jìn)電機(jī)2及位置傳感器,如圖1所示,其中測(cè)試儀模塊1553B總線控制器采用NI公司的PXI 6232板卡,控制盒采用DSP TMS320F2812。
測(cè)試儀模塊發(fā)出鎖緊(解鎖)指令至控制盒,控制盒驅(qū)動(dòng)步進(jìn)電機(jī)1輸出軸自初始位置向外伸出或向內(nèi)縮進(jìn)。位置傳感器1及位置傳感器2實(shí)時(shí)采集步進(jìn)電機(jī)1輸出軸的位置狀態(tài),當(dāng)位置傳感器1感知到步進(jìn)電機(jī)1輸出軸到達(dá)鎖緊位置時(shí),DSP的GPIOF5口電平由1變?yōu)?;反之當(dāng)位置傳感器2感知到步進(jìn)電機(jī)1輸出軸到達(dá)解鎖位置時(shí),DSP的GPIOF4口電平由1變?yōu)?。
當(dāng)系統(tǒng)處于解鎖狀態(tài)時(shí),測(cè)試模塊可以發(fā)送不同大小的控制角度信號(hào)驅(qū)動(dòng)步進(jìn)電機(jī)2輸出軸作伸縮動(dòng)作。電機(jī)2的輸出軸在齒輪的作用下促使與之相連的表盤指針發(fā)生一定角度的偏轉(zhuǎn)。
原控制方案中未用鎖緊裝置固定電機(jī),在外部干擾嚴(yán)重的情況下會(huì)導(dǎo)致偏轉(zhuǎn)電機(jī)發(fā)生不必要的偏轉(zhuǎn),使得控制角度偏離預(yù)期值。
電機(jī)控制系統(tǒng)示意圖如圖1所示。
圖1 電機(jī)控制系統(tǒng)示意圖Fig.1 The scheme of control system of motor
2.1 設(shè)計(jì)環(huán)境
設(shè)計(jì)環(huán)境為CCStudio 3.1,編程語言為C語言。
2.2 設(shè)計(jì)思路
控制盒中的DSP軟件用C語言設(shè)計(jì)開發(fā),步進(jìn)電機(jī)控制采用控制DSP的I/O口輸出脈沖的方式實(shí)現(xiàn)。整個(gè)控制軟件是一個(gè)死循環(huán),在循環(huán)中接收1553B命令,根據(jù)CAN命令控制步進(jìn)電機(jī)運(yùn)動(dòng)完成鎖緊及解鎖控制功能。軟件采用多線程控制方式,實(shí)時(shí)地更新通過1553B總線發(fā)送的伺服機(jī)構(gòu)位置狀態(tài)信息[2]。
2.3 設(shè)計(jì)流程
控制主程序分為兩個(gè)分支,當(dāng)控制盒上電后,系統(tǒng)循環(huán)查詢DSP的GPIOA15的狀態(tài),如果GPIOA15電平為低電平則進(jìn)行電機(jī)2的旋轉(zhuǎn)控制;反之,進(jìn)行電機(jī)1的鎖緊解鎖控制。主程序設(shè)計(jì)流程圖如圖2所示。
圖2 主程序流程圖Fig.2 The flow chart of main function
電機(jī)2的旋轉(zhuǎn)控制流程如圖3所示。
圖3 控制軟件旋轉(zhuǎn)功能流程圖Fig.3 The flow chart of rotate function of control software
電機(jī)1的鎖緊解鎖流程如圖4所示。
圖4 控制軟件鎖緊解鎖功能流程圖Fig.4 The flow chart of lock function of control software
2.4 代碼編寫
控制主程序[3]實(shí)現(xiàn)部分代碼如下所示:
void main(void)
{
InitSysCtrl();
……//初始化系統(tǒng)
while (1)
{
if(GpioDataRegs.GPADAT.bit.GPIOA15 == 0)
{ MyControlCircle(); }// 電機(jī)2旋轉(zhuǎn)動(dòng)作
else { MyLockCircle();}//電機(jī)1鎖緊解鎖動(dòng)作
}
}
電機(jī)1鎖緊解鎖功能實(shí)現(xiàn)部分代碼[4]如下所示:
void MyLockCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號(hào)
Uk = AD_Val[0]; //取出對(duì)應(yīng)電機(jī)控制指令位數(shù)據(jù)
DT = 1280 - (Uk / 3.2); //計(jì)算比較寄存器值
if (DT >= 0){EvbRegs.CMPR4 = DT;}//PWM波輸出
else {EvbRegs.CMPR4 = -DT;} //PWM波輸出
}
電機(jī)2旋轉(zhuǎn)控制部分代碼[5]如下所示:
void MyControlCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號(hào)
Uk = AD_Val[0]; //取出對(duì)應(yīng)電機(jī)控制指令位數(shù)據(jù)
Uf = AD_Val[2]; //取出對(duì)應(yīng)電機(jī)反饋指令位數(shù)據(jù)
ek = Uk + Uf * 5 * 35 / 246; //誤差生成
DT = -(ek * 6 / 2 - 1280); //計(jì)算比較寄存器值
if (DT >= 0) {EvbRegs.CMPR4 = DT;} //PWM波輸
else {EvbRegs.CMPR4 = -DT; } //PWM波輸
}
3.1 設(shè)計(jì)環(huán)境
設(shè)計(jì)環(huán)境為Microsoft Visual Studio 2005,編程語言為C語言。
3.2 設(shè)計(jì)思路
測(cè)試軟件用VS2005開發(fā),主要完成控制命令的發(fā)送以及轉(zhuǎn)位機(jī)構(gòu)位置信息的讀取。本測(cè)試儀通過NI公司的1553B總線控制器PXI6232[6]完成命令的發(fā)送和位置信息的獲取。
3.3 設(shè)計(jì)流程
鎖緊解鎖模塊控制電機(jī)1輸出軸動(dòng)作,實(shí)現(xiàn)系統(tǒng)鎖緊解鎖功能。測(cè)試軟件鎖緊解鎖功能實(shí)現(xiàn)流程圖如圖5所示。
圖5 測(cè)試軟件解鎖鎖緊功能流程圖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)提示已鎖緊后,電機(jī)2旋轉(zhuǎn)功能禁止,用戶需完成解鎖操作,當(dāng)系統(tǒng)提示已解鎖后,電機(jī)2旋轉(zhuǎn)功能使能。
當(dāng)系統(tǒng)旋轉(zhuǎn)功能使能后,系統(tǒng)可以實(shí)現(xiàn)對(duì)電機(jī)2的旋轉(zhuǎn)控制。旋轉(zhuǎn)功能流程圖如圖6所示。
圖6 測(cè)試軟件旋轉(zhuǎn)功能流程圖Fig.6 The flow chart of rotate function of test software
3.4 代碼編寫
鎖緊操作功能部分代碼[8]如下所示:
void OnBnClickedSuojin() //鎖緊
{
CNiBoard *pPXI6232; //定義新的板卡操作對(duì)象指針
bool ioflag_F4, ioflag_F5;//IO口電平標(biāo)志位
pPXI6232 = new CNiBoard; //定義板卡操作對(duì)象
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ā)送零控信號(hào)
MessageBox(_T("已鎖緊"), NULL, MB_OK); //提示“已鎖緊”信息
}
解鎖操作功能部分代碼如下所示:
void OnBnClickedButton4() //解鎖
{
CNiBoard *pPXI6232; //定義新的板卡操作對(duì)象指針
bool ioflag_F4, ioflag_F5;//IO口電平標(biāo)志位
pPXI6232 = new CNiBoard; //定義板卡操作對(duì)象
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ā)送零控信號(hào)
MessageBox(_T("已解鎖"), NULL, MB_OK); //提示“已解鎖”信息
}
電機(jī)2的旋轉(zhuǎn)控制過程中需要實(shí)時(shí)采集電機(jī)反饋角度信號(hào)[9],本設(shè)計(jì)中采取多線程[10]模式進(jìn)行反饋角度讀取操作。
當(dāng)用戶點(diǎn)擊旋轉(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è)計(jì)“目標(biāo)角度”
OnBnClickedGetuf();//調(diào)用反饋獲取函數(shù)
}
當(dāng)用戶點(diǎn)擊采集反饋按鈕時(shí),觸發(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); //啟動(dòng)采集角度反饋線程
}
反饋角度采集函數(shù)如下所示:
void XUANZHUAN(TestFormView *hWnd) //測(cè)試界面?zhèn)魅胄D(zhuǎn)線程
{
hWnd->pPXI6232->AITaskConfig(_T("Dev1/ai0"));//配置AI通道
while (hWnd->getukflag) //當(dāng)采集反庫標(biāo)識(shí)置位時(shí)讀取反饋角度
{
hWnd->ukreadvector = hWnd->pPXI6232->ReadSingleSample();//讀取反饋角度值
PostMessage(hWnd->m_hWnd, WM_SHOWUF, NULL, NULL);//發(fā)送消息置界面
Sleep(500);//反饋角度獲取間隙為0.5s
}
}
當(dāng)用戶點(diǎn)擊停止采集按鈕時(shí),觸發(fā)系統(tǒng)采集反饋角度功能,部分代碼如下所示:
void OnBnClickedStopgetuf()
{
GetDlgItem(IDC_STOPGETUF)->EnableWindow(FALSE);
GetDlgItem(IDC_GETUF)->EnableWindow(TRUE);
getukflag = false;
}
3.5 用戶界面功能描述
進(jìn)入電機(jī)控制界面時(shí),用戶可以對(duì)電機(jī)進(jìn)行解鎖鎖緊控制及旋轉(zhuǎn)控制,在電機(jī)旋轉(zhuǎn)過程中,用戶可以對(duì)反饋角度進(jìn)行采集。測(cè)試界面如圖7所示。
圖7 測(cè)試界面示意圖Fig.7 The scheme of test interface
當(dāng)圖7中鎖緊按鈕、旋轉(zhuǎn)按鈕、采集反饋按鈕及停止采集按鈕均被禁止時(shí),表示目前電機(jī)1輸出軸所處位置為鎖緊位置,系統(tǒng)僅可進(jìn)行鎖緊操作。
當(dāng)點(diǎn)擊解鎖按鈕,測(cè)試軟件界面提示信息已解鎖(如圖8所示)后,用戶可在界面輸入目標(biāo)角度,并點(diǎn)擊旋轉(zhuǎn),電機(jī)2在控制信號(hào)作用下進(jìn)行相應(yīng)動(dòng)作,用戶可點(diǎn)擊采集反饋按鈕,系統(tǒng)可采集與電機(jī)2輸出軸相連接的表盤指針實(shí)際偏轉(zhuǎn)角度并顯示于界面內(nèi)。
圖8 解鎖提示信息示意圖Fig.8 The scheme of hint of unlock
點(diǎn)擊圖9中的停止按鈕時(shí),界面反饋停止更新,且停止采集按鈕被禁止,采集反饋按鈕被使能。
圖9 測(cè)試界面示意圖Fig.9 The scheme of test interface
3.6 數(shù)據(jù)對(duì)比
在新控制方案鎖緊狀態(tài)下人為扳動(dòng)步進(jìn)電機(jī)2的輸出軸若干次,然后采集零位值ZeroNew,在舊控制方案中人為扳動(dòng)電機(jī)輸出軸若干次并采集輸出軸位置零位反饋值ZeroOld,結(jié)果如表1所示。
表1 數(shù)據(jù)對(duì)比表
由表1可知,鎖緊裝置有效地防止了電機(jī)因外力干擾而發(fā)生不必要的動(dòng)作所造成的偏離預(yù)期位置。
本文針對(duì)電機(jī)輸出軸易因意外信號(hào)或者人為過失導(dǎo)致電機(jī)輸出軸偏離預(yù)想位置的問題,根據(jù)需求設(shè)計(jì)基于1553B總線數(shù)據(jù)傳輸?shù)碾姍C(jī)控制系統(tǒng),實(shí)現(xiàn)電機(jī)系統(tǒng)解鎖鎖緊操作,并能實(shí)時(shí)控制和采集電機(jī)偏轉(zhuǎn)角度。經(jīng)多組測(cè)試數(shù)據(jù)實(shí)驗(yàn)驗(yàn)證與對(duì)比,證明了所設(shè)計(jì)電機(jī)控制系統(tǒng)具有較高的精確度。該方案可以保證電機(jī)控制的實(shí)時(shí)性和準(zhǔn)確性,解決了因電機(jī)輸出軸意外偏離而導(dǎo)致測(cè)試結(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] 蘇奎峰,呂強(qiáng).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è)計(jì)綜述[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 - ),女,碩士,助理工程師,主要從事軟件測(cè)試方面的研究。E-mail: yangxi_88@163.com
TP311.1
A
2095-8110(2016)06-0076-06