基于步进电机多轴联动控制系统设计与实现
2014-05-13李志华
李志华
基于步进电机多轴联动控制系统设计与实现
李志华*
(长沙高级技工学校, 湖南 长沙, 410000)
针对现有多步进电机控制系统的不足, 采用DSP 芯片TMS320F28335作为主控制器以及USB通信完成上位机与下位机通信, 给出了多轴步进电机控制系统硬件设计. 控制系统的软件部分包括上位机监控程序、G代码解释程序、USB通信程序和插补控制程序. 采用USB2.0总线与上位机通信, 实现了G代码高速下载和执行信息的反馈. 实践证明系统设计解决了低成本、高速传输和即插即用等关键问题, 有较好的工程应用价值.
步进电机; 多轴控制系统; DSP; USB
随着社会的发展, 产品规格和质量要求逐步提高, 而人力资源日益紧张, 机械制造企业亟需实施技术提升[1]. 目前, 国内外对多轴运动控制器进行了大量的研究. 国外己有成熟的产品应用在数控系统中, 但价格昂贵. 国内对运动控制器的研究以高校和研究所为主, 其产品价格相对低廉, 但是功能和精度均需要进一步完善[2]. 基于多步进电机的运动控制系统在制造加工领域有广泛的应用. 步进电机是将电脉冲信号转换成相应的角位移或线位移的机电执行元件. 其角位移或线位移量与输入的脉冲数成比例, 速度与单位时间内输入的脉冲数(即脉冲的频率)成比例, 方向则取决于输入脉冲的顺序[3].
本文研究了一种基于DSP的多步进电机控制系统, 控制系统由上位机监控平台和基于DSP的嵌入式执行平台组成, 平台间采用USB总线连接. 上位机平台主要完成对执行系统的参数设定, 加工文件的管理以及执行过程的人机交互. 嵌入式执行平台接收到的加工文件后, 对指令进行解析, 协调控制多步进电机带动刀具完成机械加工, 并实时将加工执行信息反馈给上位机控制平台. 系统可以实现步进电机的正反转、速度调节以及细分的控制, 可高效进行了两轴圆弧插补、三轴直线插补、S形曲线速度控制和连续曲线插补等功能.
1 控制系统硬件平台
控制系统由PC机、嵌入式控制平台和多轴电机等模块组成, 嵌入式控制平台硬件结构包括DSP控制核心模块、外围存储器模块、CPLD驱动与扩展模块、USB总线接口模块等, 系统结构框图如图1所示. 为提高系统的高速性、实时性和稳定性, 嵌入式执行平台使用TI公司TMS320F28335数字信号处理器(DSP)作为核心, 属于TMSC28x系列. 它的处理能力达到150MHz, 包含32位浮点处理单元, 6个DMA通道, 支持ADC、McBSP和EMIF输入, 有18路的PWM输出, 其中有6路为TI特有的更高精度的PWM输出, 12位16通道ADC. 新型F28335浮点控制器与TI前代领先数字信号控制器相比, 性能平均提高50%, 并与定点C28x控制器软件兼容[4].
1.1 存储模块设计
系统内存扩展选用三星K9F1G08U0A芯片, 容量为8位的(256MB+8MB). K9F1G08U0A的页编程操作(写操作)在(2 k + 64)字节的页上执行, 时间为200 μs, 块擦除操作是在(128 + 4 k)字节的块上执行, 时间为1.5 ms[5]. 数据寄存器里的数据每字节被读出是用25 ns的时间周期, 并可以直接映射到 DSP 外部存储接口的Zone 6或者Zone 7区域. Zone 6区域的范围是在地址0x100000- 0x1FFFFF, Zone 7区域的范围是在地址0x200000-0x2FFFFF.
图1 系统功能框图
1.2 USB模块设计
通用串行总线(USB, Universal Serial BUS)是一个外部总线标准, 用于规范电脑与外部设备的连接和通讯. 根据不同USB设备对数据传输的要求, USB定义了4种传输类型: 块传输、中断传输、同步传输和控制传输[6]. 本系统选用Cypress公司的高速USB芯片CY7C68001来完成平台间的USB通信, 该芯片对4种传输模式提供了全面支持. CY7C68001集成了USB2.0收发器和SIE (串行接口引擎) ,可完成物理层和链路层的数据通信管理, 但是芯片内不含微控制器, 因此须由TMS320F28335编程实现USB的应用层协议以及固件程序的加载. 该芯片支持高速480 Mbit/s或全速12 Mbit/s两种传输方式, 而且具备智能SIE功能, 可不借助微处理器中断的前提下完成枚举, 能够较好地完成系统所需功能.
1.3 CPLD模块及驱动模块设计
CPLD主要由可编程逻辑宏单元(MC, Macro Cell)围绕中心的可编程互连矩阵单元组成, 应用在外设的映射, 起到片选外设和桥接外设. 系统采用Altera公司EPM3064芯片, 这是一款高性能、低功耗的基于EEPROM的CPLD. 为增强信号的输出能力, 系统将输出信号均通过CPLD驱动后输出. 这不仅增强了带负载能力, 而且增加系统的灵活性和可扩展性. 系统数字输出信号包括三轴步进电机的驱动信号、驱动电路控制信号以及辅助限位信号等. 在驱动电路中增加了光电转换器以进行电平转换, 进一步增强电路驱动能力. 同时通过光电隔离, 可有效避免驱动器信号对控制器的影响.
2 控制系统软件设计
系统软件包括PC机端的上位机控制平台和嵌入式控制平台的执行软件部分, 嵌入式控制软件主要包括USB通信程序、电机驱动程序、插补程序和G代码解释程序等.
2.1 USB模块程序设计
根据模块化设计的思想, 固件的结构由不同的功能模块堆积而成(图2).
①硬件提取层: 对DSP的I/O口、数据总线等硬件接口进行操作;
②CY7C68001命令接口: 对芯片进行操作的模块子程序集;
③中断服务程序: 处理硬件的中断事务程序;
④标准请求处理程序: 对USB的标准设备请求进行处理;
⑤用户请求处理程序: 对用户添加的厂商请求进行处理;
⑥主循环程序: 发送USB请求、处理USB总线事件和用户功能处理等.
USB模块程序包括USB固体程序, 运行在DSP内部的程序和运行在Windows平台上USB驱动的程序. 在USB的数据传输方式中主要采用块传输和字节传输2种传输方式[2]. 系统的固体程序采用C语言编写, 由上位机监控平台的USB驱动程序发出指令, 如设备描述符等标准请求, 固体程序根据指令来接收或发送数据.
图2 固体结构图
2.2 G代码解释模块
加工文件主要由G代码组成, 也称为G指令. G代码在数控加工领域中得到了广泛的应用程. 嵌入式控制平台中设计专门的G代码解释器. 收到上位机传输过来的加工文件, 文件被暂存到嵌入式平台的外存(NAND FLASH)中, 解释器从外部存储设备逐次读取G代码信息. 由G代码解析程序解析数据流之后, 将加工指令转存至DSP内部RAM缓冲区内准备运行. 同时数据被转为标准GCode结构体数据, 然后根据指令的类型(如加工指令或辅助指令)进行分类操作. 当加工坐标有变化则表示该数据为运动指令, 反之则为辅助指令[7]. 对于运动指令, 则需要获取各坐标轴的运动坐标以及轨迹运动类型, 根据其轨迹运动类型进行相应的插补处理. 轨迹运动类型主要可分为为G01—直线运动; G02—顺弧运动; G03—逆弧运动. 反馈当前的执行状态, 由DSP控制器将步进电机运动信息写入NAND FLASH中, 上位机监控平台定时主动读取.
G代码解析程序首先根据预定义规则表进行语法和词法检查, 删除无效字符, 包括指令空格和N指令等. 再根据G代码组词规则, 对加工文件逐行读取, 依次检查, 包括是否为合法字符, 代码参数设置是否合适. 当发现某行中包含非法的代码, 则记录其行号和出错的信息代号, 并将出错信息反馈给上位机监控平台, 提示代码错误信息. 如加工文件无语法错误则进行运动指令的解析, 并将运动坐标信息和辅助指令信息分别存储到预定义的数据区域以便于后续处理.
G代码解析程序的主要程序.
void GCODEAnalysis(char *tempGcode, GCODE gCode[])
{
char *templine = tempGcode;
char temp[8] = {0} ;
int i; i nt num = 0;
templine[num] = (templine[num] & 0xFF);
while (templine[num]!= 0x00) //数据不为空则进入循环
{
switch (templine[num])
{ case 0x47: //G ASC码
i = 0;
templine[num + 1] = (templine[num + 1]&0xFF);
while((templine[num + 1]< 0x41)) //在数字的ASC码区域
{
temp[i] = templine[num + 1]; //接收的数据值存放到temp[8]
num++;
i++;
}
gn++;
gCode[gn].G = atol(temp); //把temp[8]数组中的字符串转换成长整型数
break;
}…}
2.3 直线插补程序
直线插补就是用逼近的方式把曲线用线段去逼近, 从而实际轮廓就由若干段折线拼接而成[8]. 虽然是折线, 但是如果每一段走刀线段都非常小(在精度允许范围内), 那么此段折线和实际轮廓还是可以近似地看成相同的曲线[9—10](图3).
各象限直线插补程序如下:
Line_Cabu(GCODE GCode){
long int Xsteps = 0, Ysteps = 0.0,
Total_steps = 0;
long int X = 0, Y = 0;
Xsteps = (GCode.X - cankao.X);
Ysteps = (GCode.Y - cankao.Y);
X = labs(Xsteps);
Y = labs(Ysteps);
Total_steps = X + Y;//总步数
while((Total_steps--) > 0)
{if(F >= 0)
{ F = F - Y;
if(Xsteps >= 0) {
GpioDataRegs.GPADAT.bit.GPIO0=0;
Pulse_X();// X正方向 }
else {
GpioDataRegs.GPADAT.bit.GPIO0= 1;
Pulse_X();// X反方向 } }
else
{ F = F + X;
if(Ysteps >= 0) {GpioDataRegs.GPADAT.bit.GPIO2= 0;
Pulse_Y();// Y正方向 }
else {
GpioDataRegs.GPADAT.bit.GPIO2= 1;
Pulse_Y();// Y反方向 } }}
cankao.X = GCode.X;
cankao.Y = GCode.Y;
}
图3 逐点比较法直线插补流程图
3 上位机监控平台设计
上位机监控平台主要是通过USB端口设置嵌入式平台参数, 向嵌入式控制平台传输加工文件, 接受反馈执行信息并仿真显示等功能. 数据传输采用了CRC算法进行校验. 监控平台在Visual Studio 2008平台上开发, 使用了C++语言编程, 主要通过调用系统相关API函数完成.
程序使用CreateFile函数打开设备句柄, 进而通过DeviceIoControl函数将数据发送到嵌入式控制平台(包括ReadFile读数据和用WriteFile写数据), 操作完毕后用CloseHandle函数关闭设备[11]. DSP嵌入式平台通过解析加工文件来控制多轴步进电机的运动, 同时实时反馈步进电机的运行情况, 如运动位置及运动的距离通给上位机. 上位机将执行数据进行相关处理后, 实现步进电机运动轨迹仿真, 仿真当中运用到GDI(Graphics Device Interface)的绘图技术, 将反馈数据在上位机运用GDI绘图技术实时显示出来. GDI是图形设备接口, 它的主要任务是负责系统与绘图程序之间的信息交换, 处理所有Windows程序的图形输出. 利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形和文本等操作.
其中比较核心的就是用DeviceIoControl函数对设备进行读写操作, 相关函数和程序如下所示:
①DeviceIoControl函数原型为:
BOOL DeviceIoControl(
HANDLE hDevice, //设备句柄
DWORD dwIoControlCode, //设备控制代码
LPVOID lpInBuffer, //输入数据缓冲区指针
DWORD nInBufferSize, //输入数据缓冲区长度
LPV OID1pOutBuffer//输出数据缓冲区指针
DWORD nOutBufferSize, //输出数据缓冲区长度
LPDWORD lpBytesReturned, //输出数据实际单元长度
LPOVERLAPPED lpOverlapped //重叠操作结构指针);
②设备句柄用来标识你所访问的设备. 发送不同的控制码, 可以调用设备驱动程序的不同类型的功能. 设备句柄可以用API函数CreateFile获得.
③打开USB设备.
HANDLE Handle = CreateFile ("\\.\
Ezusb-0",// USB设备名GENERIC_WRI TE
| GENERIC_READ, FILE_SHAR E_WRITE |
FILE_SHARE_READ,NULL, OPEN _EXIST
ING, 0, NULL);
在打开USB设备后通过DeviceIo Control函数获取USB管道信息
ULONG numBytes = 0;
UCHAR InterfaceInfo[1024] = NULL ;
ULONG pipeCount = 0;
DeviceIoControl (Handle, IOCTL_Ezusb_GET_PIPE_INFO, NULL, 0, &InterfaceInfo, sizeof(InterfaceInfo), &numBytes, NULL); //获取管道数
pipeCount =((PUSBD_INTERFACE_INFORMATION) InterfaceInfo) -> NumberOfPipes;
操作完成后用CloseHandle关闭设备句柄. 其原型如下:
System.Runtime.InteropServices.DllImport("kernel32.dll")
private static extern bool CloseHandle (IntPtr hObject //要关闭的句柄地址);
④接收控制器发送过来的数据时是通过ReadFile函数来实现的. ReadFile函数从文件指针指定的位置读取数据. 读操作完成后, 文件指针将根据实际对读出的数据自动进行调整. 经测试, 上位机软件很好的实现了对多步进电机的实时控制与仿真.
4 结论
针对在机械制造设备中常见的多步进电机的控制, 采用了一种基于DSP和CPLD联合控制的多轴步进电机控制系统. 系统具有优良的实时处理能力, 能充分满足开放式数控系统实时加工的要求; 可实现更加复杂的加工算法提高加工速度与精度. 采用USB协议作为DSP控制器与计算机主机之间的数据传输方式, 解决了数据传输速度慢、稳定性差等问题. 通过可视化的上位机程序, 用户可以方便的对各轴电机进行精确控制, 且可以实时监测运行状态, 提高了生产效率.
[1] 褚仁林. 基于DSP的电机控制系统的研究[D]. 西安: 西北工业大学, 2007: 30—32.
[2] 唐志强, 黄道平, 刘少君. 基于USB总线的多轴运动控制平台设计[J]. 组合机床与自动化加工技术, 2010 (11): 71—77, 86.
[3] 薛玉磊, 韩存武. 基于DSP的三轴转台控制系统的实现[J]. 微计算机信息, 2010, 26(9-2): 111—112.
[4] Texas Instruments.TMS320F28335, TMS320F28334, TMS320F28332 Digital Signal Controllers Data Manual[DB/OL].http://focus.ti.com/docs/prod/folders/print/tms320f28335.html.
[5] 李拥军, 杨龙, 安吉宇, 等. DSP原理及控制系统设计[M]. 北京: 清华大学出版社, 2010.
[6] 张严林, 李海生, 钟震宇, 等. 步进电机三轴联动的快速加减速算法研究[J]. 数控技术, 2009 (8): 111—112.
[7] 李建奇, 肖继国, 贺盛修, 等. 基于NURBS插补算法的数控雕刻机控制系统的设计与实现[J]. 计算机测量与控制, 2012, 20(12): 3249—3252.
[8] 张学飞, 李健. 开放式数控系统G代码的编译模块设计[J]. 机械设计与制造, 2010(10): 87—88.
[9] 何苏勤, 黄翠翠. 基于USB2.0的异步数据传输和控制接口的设计[J]. 国外电子测量技术, 2010(3): 79—83.
[10] 吕晔, 周洪强. EZ-USB FX2的数据采集和传输系统设计[J]. 单片机与嵌入式系统应用, 2009(5): 57—59.
[11] 郑振华, 郭庆, 吴国铖. 基于插补算法的二维数控平台研究与设计[J]. 测控技术, 2010(6): 58—61.
Control system for multi-axis stepper motor based on DSP and USB
LI ZhiHua
(Changsha Senior Technical School, Changsha 410000, China)
To improve the shortcomings of the multi-axis control system, the TMS320F28335 DSP chip was used as the main controller, and the USB was used to transfer data between the DSP controller and the host, a software design of the control system was presented. The software part of control system includes PC monitoring program, G code interpreter, USB communication program and the interpolation control program. The key codes of the program were introduced.The USB communication realized the high-speed download G code and information feedback. Simulation results show that the system had advantages of both high speed transmission, and better tracking performance, therefore, it can be widely used in radar engineering.
stepper motor; multi-axis control system; DSP; USB
10.3969/j.issn.1672-6146.2014.03.016
TP 273
1672-6146(2014)03-0067-06
email: 86051419@qq.com.
2014-04-18
(责任编校:刘刚毅)