楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
電機控制系統的軟件設計與解決方案
楊 茜,朱艷芳,付 士,白 雷
( 湖北三江航天紅峰控制有限公司,湖北 孝感 432000)
為防止電機輸出軸因意外信號或者人為過失導致電機輸出軸偏離預想位置,提出一種基于1553B總線數據傳輸的電機控制系統解決方案。本系統包括測試儀模塊、控制盒、被控電機及位置傳感器等。主要實現電機1輸出軸鎖緊、解鎖及采集電機2電壓反饋功能。
數據傳輸;1553B bus;鎖緊;解鎖
為防止電機輸出軸因意外信號或者人為過失導致電機輸出軸偏離預想位置,導致輸出軸連接表盤指針指示角度偏離預期值[1],本文提出一種基于1553B總線數據傳輸的電機控制系統解決方案。電機控制系統包括測試儀模塊、控制盒、被控步進電機1、被控步進電機2及位置傳感器,如圖1所示,其中測試儀模塊1553B總線控制器采用NI公司的PXI 6232板卡,控制盒采用DSP TMS320F2812。
測試儀模塊發出鎖緊(解鎖)指令至控制盒,控制盒驅動步進電機1輸出軸自初始位置向外伸出或向內縮進。位置傳感器1及位置傳感器2實時采集步進電機1輸出軸的位置狀態,當位置傳感器1感知到步進電機1輸出軸到達鎖緊位置時,DSP的GPIOF5口電平由1變為0;反之當位置傳感器2感知到步進電機1輸出軸到達解鎖位置時,DSP的GPIOF4口電平由1變為0。
當系統處于解鎖狀態時,測試模塊可以發送不同大小的控制角度信號驅動步進電機2輸出軸作伸縮動作。電機2的輸出軸在齒輪的作用下促使與之相連的表盤指針發生一定角度的偏轉。
原控制方案中未用鎖緊裝置固定電機,在外部干擾嚴重的情況下會導致偏轉電機發生不必要的偏轉,使得控制角度偏離預期值。
電機控制系統示意圖如圖1所示。

圖1 電機控制系統示意圖Fig.1 The scheme of control system of motor
2.1 設計環境
設計環境為CCStudio 3.1,編程語言為C語言。
2.2 設計思路
控制盒中的DSP軟件用C語言設計開發,步進電機控制采用控制DSP的I/O口輸出脈沖的方式實現。整個控制軟件是一個死循環,在循環中接收1553B命令,根據CAN命令控制步進電機運動完成鎖緊及解鎖控制功能。軟件采用多線程控制方式,實時地更新通過1553B總線發送的伺服機構位置狀態信息[2]。
2.3 設計流程
控制主程序分為兩個分支,當控制盒上電后,系統循環查詢DSP的GPIOA15的狀態,如果GPIOA15電平為低電平則進行電機2的旋轉控制;反之,進行電機1的鎖緊解鎖控制。主程序設計流程圖如圖2所示。

圖2 主程序流程圖Fig.2 The flow chart of main function
電機2的旋轉控制流程如圖3所示。

圖3 控制軟件旋轉功能流程圖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]實現部分代碼如下所示:
void main(void)
{
InitSysCtrl();
……//初始化系統
while (1)
{
if(GpioDataRegs.GPADAT.bit.GPIOA15 == 0)
{ MyControlCircle(); }// 電機2旋轉動作
else { MyLockCircle();}//電機1鎖緊解鎖動作
}
}
電機1鎖緊解鎖功能實現部分代碼[4]如下所示:
void MyLockCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號
Uk = AD_Val[0]; //取出對應電機控制指令位數據
DT = 1280 - (Uk / 3.2); //計算比較寄存器值
if (DT >= 0){EvbRegs.CMPR4 = DT;}//PWM波輸出
else {EvbRegs.CMPR4 = -DT;} //PWM波輸出
}
電機2旋轉控制部分代碼[5]如下所示:
void MyControlCircle(void)
{
read_AD_With_Filter(AD_Val); //讀取AD通道采集信號
Uk = AD_Val[0]; //取出對應電機控制指令位數據
Uf = AD_Val[2]; //取出對應電機反饋指令位數據
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 設計環境
設計環境為Microsoft Visual Studio 2005,編程語言為C語言。
3.2 設計思路
測試軟件用VS2005開發,主要完成控制命令的發送以及轉位機構位置信息的讀取。本測試儀通過NI公司的1553B總線控制器PXI6232[6]完成命令的發送和位置信息的獲取。
3.3 設計流程
鎖緊解鎖模塊控制電機1輸出軸動作,實現系統鎖緊解鎖功能。測試軟件鎖緊解鎖功能實現流程圖如圖5所示。

圖5 測試軟件解鎖鎖緊功能流程圖Fig.5 The flow chart of lock function of test software
系統循環查看PXI6232板卡IO口P1.0及P1.1的狀態信息[7],并根據其狀態信息使能或禁止系統解鎖或鎖緊功能。當系統提示已鎖緊后,電機2旋轉功能禁止,用戶需完成解鎖操作,當系統提示已解鎖后,電機2旋轉功能使能。
當系統旋轉功能使能后,系統可以實現對電機2的旋轉控制。旋轉功能流程圖如圖6所示。

圖6 測試軟件旋轉功能流程圖Fig.6 The flow chart of rotate function of test software
3.4 代碼編寫
鎖緊操作功能部分代碼[8]如下所示:
void OnBnClickedSuojin() //鎖緊
{
CNiBoard *pPXI6232; //定義新的板卡操作對象指針
bool ioflag_F4, ioflag_F5;//IO口電平標志位
pPXI6232 = new CNiBoard; //定義板卡操作對象
pPXI6232->AOTaskConfig(_T("Dev1/ao0"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(1); //發送1°控制指令
do {//解鎖位置
ioflag_F4 = pPXI6232->IORead(_T("Dev1/port0/line0"));
//鎖緊位置
ioflag_F5 = pPXI6232->IORead(_T("Dev1/port0/line1")); }
while (ioflag_F5);
pPXI6232->WriteSingleSample(0); //發送零控信號
MessageBox(_T("已鎖緊"), NULL, MB_OK); //提示“已鎖緊”信息
}
解鎖操作功能部分代碼如下所示:
void OnBnClickedButton4() //解鎖
{
CNiBoard *pPXI6232; //定義新的板卡操作對象指針
bool ioflag_F4, ioflag_F5;//IO口電平標志位
pPXI6232 = new CNiBoard; //定義板卡操作對象
pPXI6232->AOTaskConfig(_T("Dev1/ao0"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(-1); //發送-1°控制指令
do {//解鎖位置
ioflag_F4 = pPXI6232->IORead(_T("Dev1/port0/line0"));
//鎖緊位置
ioflag_F5 = pPXI6232->IORead(_T("Dev1/port0/line1")); }
while (ioflag_F4);
pPXI6232->WriteSingleSample(0); //發送零控信號
MessageBox(_T("已解鎖"), NULL, MB_OK); //提示“已解鎖”信息
}
電機2的旋轉控制過程中需要實時采集電機反饋角度信號[9],本設計中采取多線程[10]模式進行反饋角度讀取操作。
當用戶點擊旋轉按鈕后系統執行旋轉功能,部分代碼如下所示:
void OnBnClickedXuanzhuan()
{
CString s;
hDlg->GetDlgItem(IDC_TESTAMPLITUDE)->GetWindo-wText(s);
double amplitude = atof(s.GetBuffer());//獲取“目標角度”輸入值
pPXI6232->AOTaskConfig(_T("Dev1/ao1"));//配置控制指令輸出口
pPXI6232->WriteSingleSample(amplitude); //發送設計“目標角度”
OnBnClickedGetuf();//調用反饋獲取函數
}
當用戶點擊采集反饋按鈕時,觸發系統采集反饋角度功能,部分代碼如下所示:
void OnBnClickedGetuf()
{
if (getukflag == true){return;} //采集反饋標志位為真則跳出
getukflag = true; //采集反饋標志位置位
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為反饋角度采集函數)
ResumeThread(xuanzhuan); //啟動采集角度反饋線程
}
反饋角度采集函數如下所示:
void XUANZHUAN(TestFormView *hWnd) //測試界面傳入旋轉線程
{
hWnd->pPXI6232->AITaskConfig(_T("Dev1/ai0"));//配置AI通道
while (hWnd->getukflag) //當采集反庫標識置位時讀取反饋角度
{
hWnd->ukreadvector = hWnd->pPXI6232->ReadSingleSample();//讀取反饋角度值
PostMessage(hWnd->m_hWnd, WM_SHOWUF, NULL, NULL);//發送消息置界面
Sleep(500);//反饋角度獲取間隙為0.5s
}
}
當用戶點擊停止采集按鈕時,觸發系統采集反饋角度功能,部分代碼如下所示:
void OnBnClickedStopgetuf()
{
GetDlgItem(IDC_STOPGETUF)->EnableWindow(FALSE);
GetDlgItem(IDC_GETUF)->EnableWindow(TRUE);
getukflag = false;
}
3.5 用戶界面功能描述
進入電機控制界面時,用戶可以對電機進行解鎖鎖緊控制及旋轉控制,在電機旋轉過程中,用戶可以對反饋角度進行采集。測試界面如圖7所示。

圖7 測試界面示意圖Fig.7 The scheme of test interface
當圖7中鎖緊按鈕、旋轉按鈕、采集反饋按鈕及停止采集按鈕均被禁止時,表示目前電機1輸出軸所處位置為鎖緊位置,系統僅可進行鎖緊操作。
當點擊解鎖按鈕,測試軟件界面提示信息已解鎖(如圖8所示)后,用戶可在界面輸入目標角度,并點擊旋轉,電機2在控制信號作用下進行相應動作,用戶可點擊采集反饋按鈕,系統可采集與電機2輸出軸相連接的表盤指針實際偏轉角度并顯示于界面內。

圖8 解鎖提示信息示意圖Fig.8 The scheme of hint of unlock
點擊圖9中的停止按鈕時,界面反饋停止更新,且停止采集按鈕被禁止,采集反饋按鈕被使能。

圖9 測試界面示意圖Fig.9 The scheme of test interface
3.6 數據對比
在新控制方案鎖緊狀態下人為扳動步進電機2的輸出軸若干次,然后采集零位值ZeroNew,在舊控制方案中人為扳動電機輸出軸若干次并采集輸出軸位置零位反饋值ZeroOld,結果如表1所示。

表1 數據對比表
由表1可知,鎖緊裝置有效地防止了電機因外力干擾而發生不必要的動作所造成的偏離預期位置。
本文針對電機輸出軸易因意外信號或者人為過失導致電機輸出軸偏離預想位置的問題,根據需求設計基于1553B總線數據傳輸的電機控制系統,實現電機系統解鎖鎖緊操作,并能實時控制和采集電機偏轉角度。經多組測試數據實驗驗證與對比,證明了所設計電機控制系統具有較高的精確度。該方案可以保證電機控制的實時性和準確性,解決了因電機輸出軸意外偏離而導致測試結果與預期相差較大的問題。
[1] 顧衛鋼.手把手教你學DSP——基于TMS320X281x[M].北京:北京航空航天大學出版社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 原理與開發[M].北京:電子工業出版社,2005:33-36.
[6] 孫麗明.TMS320F2812原理及其C語言程序開發[M].北京: 清華大學出版社,2008:112-120.
[7] TMS320F281x Assembly Language Tools User’s Guide[R].Texas Instruments, 2002:243-250.
[8] TMS320F28xx28xxx DSCs模擬接口設計綜述[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] 張衛寧.TMS320C28x系列DSP的CPU與外設(下)[M].北京:清華大學出版社,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