APP下载

电机控制系统的软件设计与解决方案

2016-03-16朱艳芳

导航定位与授时 2016年6期
关键词:控制指令流程图代码

杨 茜,朱艳芳,付 士,白 雷

( 湖北三江航天红峰控制有限公司,湖北 孝感 432000)

电机控制系统的软件设计与解决方案

杨 茜,朱艳芳,付 士,白 雷

( 湖北三江航天红峰控制有限公司,湖北 孝感 432000)

为防止电机输出轴因意外信号或者人为过失导致电机输出轴偏离预想位置,提出一种基于1553B总线数据传输的电机控制系统解决方案。本系统包括测试仪模块、控制盒、被控电机及位置传感器等。主要实现电机1输出轴锁紧、解锁及采集电机2电压反馈功能。

数据传输;1553B bus;锁紧;解锁

0 引言

为防止电机输出轴因意外信号或者人为过失导致电机输出轴偏离预想位置,导致输出轴连接表盘指针指示角度偏离预期值[1],本文提出一种基于1553B总线数据传输的电机控制系统解决方案。电机控制系统包括测试仪模块、控制盒、被控步进电机1、被控步进电机2及位置传感器,如图1所示,其中测试仪模块1553B总线控制器采用NI公司的PXI 6232板卡,控制盒采用DSP TMS320F2812。

1 工作原理

测试仪模块发出锁紧(解锁)指令至控制盒,控制盒驱动步进电机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 控制软件设计

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 控制软件设计

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可知,锁紧装置有效地防止了电机因外力干扰而发生不必要的动作所造成的偏离预期位置。

4 结论

本文针对电机输出轴易因意外信号或者人为过失导致电机输出轴偏离预想位置的问题,根据需求设计基于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

猜你喜欢

控制指令流程图代码
云的识别指南
城轨车辆控制指令试验装置研制
宏指令控制的多轴系统研究及实现
一种程序源代码的标准化流程图转化方法∗
创世代码
创世代码
创世代码
创世代码
高速公路隧道通风、照明联动控制方案探讨