APP下载

嵌入式系统的多路步进电机控制系统的设计

2019-09-25

计算机测量与控制 2019年9期
关键词:网络通信上位命令

(广西师范大学 电子工程学院,广西 桂林 541004)

0 引言

随着社会与经济的飞速发展,自动化控制代替人为操作越显明显[1]。步进电机作为自动化控制重要的执行机构来说,其控制一直以来都是一个重要的研究课题,其主要研究集中在加减速曲线优化和具体实现上。与此同时随着嵌入式技术的快速发展,特别是其ARM架构芯片的性能有了大幅度的提升以及嵌入式实时控制系统的功能变得更加完善。因此将嵌入式技术应用于多路步进电机控制系统中不仅可以提高了步进电机控制的实时性和可靠性,而且还降低了控制系统的成本[2]。本文设计的主控芯片使用了ST公司的的STM32F4系列微处理器,嵌入式以太网控制器W5500、电机控制芯片A4984、光电传感器、RFID射频识别传感器等多种外设,操作系统采用嵌入式实时操作系统FreeRTOS,上位机控制软件应用程序采用PyQt,并进行相应的软件程序开发,本设计致力于设计一种可靠稳定,实时性高的多路步进电机控制系统。

1 硬件电路设计

1.1 总体设计

本设计总体架构如图1所示。主控芯片通过嵌入式以太网控制器W5500与上位机通信,接收上位机软件发送的命令,并向上位机返回现在所处的工作状态。W5500通过SPI通信将上位机命令发送给主控制端STM32,后由主控进行命令解析,得到指令中的电机脉冲数、频率以及正反转等参数,最终得到驱动电机的脉冲数量、脉冲频率以及脉冲信号顺序,从而控制各路步进电机按照指令所需的频率精确达到目的位置。

图1 系统总体结构图

本设计电路中主控芯片采用ST公司的STM32F407系列微控制器,电机驱动芯片采用A4984SLPTR-T芯片,步进电机选择俩相四线的混合式步进电机。

1.2 网络通信模块

STM32网络通信主要有俩种方式一种采用移植LWIP协议栈,一种是采用外置网络芯片与主控芯片之间进行通信。由于主控芯片已经移植了小型操作系统FreeRTOS,为了不增加主控芯片的内存压力且外置网络芯片加以外部晶振,较LWIP协议栈以及内部晶振时钟会更加精确,故采用外置网络芯片加以外部晶振来进行网络通信。网络通信芯片采用韩国WIZnet公司的W5500芯片,该芯片集成了IP/TCP协议栈,方编程模块化,有助于系统后期的扩展性,也减少了主控芯片的资源占用。

1.3 电机驱动模块

本系统电路中电机驱动模块采用Allegro公司的A4984SLPTR-T电机驱动器,该驱动器是一个完整的带有内置转换器的微电机驱动器。A4984SLPTR-T包括一个固定停机时间电流稳压器,该稳压器可在慢或混合衰减模式下工作。该电机驱动器具有高达35 V和±2 A的输入驱动能力,且控制简单。若电机的温度过高,会导致电机力矩降低乃至失步,故将电机的电流设定为1.414 A,既可以使得电机芯片不过载,又尽可能的使得电机的利用率更高。驱动模块电路如图2所示。

图2 电机驱动模块原理图

2 下位机软件系统设计

2.1 软件总体设计

根据设计需要实现的目标,本文把系统分为不同的子功能,充分利用嵌入式系统多任务的优势,把各个子功能作为系统中不同的任务进程实现[3],包括:网络通信任务、上位机通讯协议解析任务、电机驱动任务、光电传感器任务等,各个任务通过操作系统的信号量进行同步运行,由上位机软件统筹规划。为了保证步进电机系统的实时性,其中电机驱动进程为核心进程,设定其任务优先级为次高,除W5500的通信模块,没有其他进程可以抢占他的CPU控制权。

本文主要介绍软件设计网络通信管理和电机控制的实现:从网口读取运动指令,转换为实际电机的移动。

1)上位机软件通过工作人员设定的电机工作时序来发送相对应的电机控制指令,命令通过网络传输至网络控制芯片中的命令缓存区中,后由SPI通信发送至主控制端STM32所建立的循环链表中进行存储,防止命令丢失,最后又主控制端进行相对应的命令解析;

2)主控制端解析电机控制命令后,使用电机控制算法来控制电机来进行相对应的电机动作,其中主要参数包括电机脉冲频率、电机转动方向、脉冲总数以及加减速脉冲数等信息;

3)完成动作后,主控制端再通过SPI向网络控制芯片传输完成指令,请求下一指令;网络控制芯片向上位机返回相对应的结束命令,结束动作,等待下一次协议命令;

2.2 嵌入式系统选择

ARM系列的微处理器不支持大型操作系统的移植,但是在单片机模式下的纵向处理程序处理又满足不了任务量多的程序设计。而此时嵌入式实时操作系统既满足ARM处理器的内存要求且可以进行多个任务假性同步运行,一个处理器核心每次仅可以执行一个任务,但实时操作系统的主要工作则是将任务切换的时间变得非常短,而这已经满足了本设计对操作系统的需求。

本设计采用了FreeRTOS嵌入式实时操作系统。FreeRTOS实时操作系统内核占用空间小、源码公开、可移植、实时性高,可免费用于商业用途。其基本功能包括:通过时间片调度切换任务;多种信号量应用于各种场景;多个实时任务且及其优先级的配置;文件任务的管理等。

在嵌入式领域,FreeRTOS是不多的同时具有实行性,开源性,可靠性,易用性,多平台支持等特点的嵌入式操作系统[4]。

2.3 网络通信管理

由于单步执行的程序架构中,下位机会来不及处理上位机发送的连续运动指令,上位机向网关发送命令,对数据进行实时监控,但是由于接收到的命令要从流水线的控制器交互,交互需要一个过程,在这个过程里,导致上位机命令冗余,存储在一个数组里,但是上位机长时间收不到命令,网络连接会中断,这种异常在工业控制里是坚决不允许的,所以,对处理的命令进行过滤,即设计了一个环形链表算法,将先存储在链表中但未处理的命令删除,把刚接收到的命令,插入尾部。如图3环形链表示意图。

图3 环形链表示意图

环形链表结构体定义所示:

typedef struct rx_net_data

{

char rx_data[CMD_MAX_DATA_LEN];

unsigned char rx_data_len;

SemaphoreHandle_t task_binarySemaphore;

SemaphoreHandle_t ISR_binarySemaphore;

Struct rx_net_data *next;

} RX_NET_DATA_LinkedListDef;

结构体中的 rx_data用来存放上位机发送过来的指令,rx_data_len表示rx_data数据长度,task_binarySemaphore为任务级的二值信号量,ISR_binarySemaphore为中断级的信号量,用来同步中断中接收到的数据与数据包解析任务同步。

中断接收指令过程,流程图如图4所示。

图4 网络通信流程图

2.4 电机驱动控制

步进电机的控制方式通常分为俩种,一种是使用定时器中断来驱动步进电机,另一种则是定时器PWM脉宽调制来驱动。本文采用的则是定时器PWM脉宽调制,通过设置自动装载值和预分频值来控制占空比,从而控制电机的频率。

由于步进电机本身的局限性,在步进电机起始阶段频率变化过大,则会导致电机失步、过冲现象,所以启动阶段需要一段较为缓慢的预热阶段。为了防止电机出现过冲或失步的现象,在电机控制中加入改进型S型算法,则有效的规避了该现象。

由文献[3]可得S型曲线的速度函数,所得的S型曲线,如图5所示:

(1)

式(1)中:a为设定的系统加速度;Vm为步进电机运行的最大速度;Vs为步进电机运行的起始速度。

S型算法的好处是速度具有很好的平滑性,运动精度也很高[5-6]。S型算法又名Sigmoid函数,Sigmoid函数原型为:

(2)

对其加以修改,式如下所示:

(3)

在式(3)所示:F(i)为即时频率值;Fmin为步进电机运行的起始速度;Fmax为步进电机运行的最大速度;k为代表设定的加速度;i为加速或者减速的脉冲索引(i≥2 num)。

给定K值为7时,电机运作较为良好,值得提醒的是加速阶段或者减速阶段脉冲索引都从0开始计数。

通过MATLAB对公式(3)的加速部分进行仿真,取电机初始频率Fmin为2 000 Hz,最大频率Fmax为3 000 Hz,加速脉冲数num(电机一个脉冲数为1.8°)为4 000,T1取值为2 000,加速度k为7,所获得加速S曲线如图5所示:电机转动主要分为3个阶段,加加速,匀加速以及加减速阶段[7-8],减速和加速阶段类似,故不做多余讲解。

图5 文献[3]S型加速曲线图

图6 本文S型加速曲线图

通过图5,图6俩者比较可以明显发现,本文中的S型算法有效的避免了电机初始加速速率变化过大而导致的电机速率突变的情况,避免了电机过冲与丢步的现象;电机也可以在最短的时间内达到所需的频率,也大大的降低系统的功耗[9-10]。将图5、图6进行对比,通过对MATLAB仿真图进行取脉冲值0,1 000,2 000,3 000,4 000,得到电机的实时频率值,比较S型加减速的脉冲数和频率之间的关系如表1。

3 上位机软件设计

PC上位机使用python3.5和pyqt5进行研发编写。

表1 步进脉冲时间间隔

Python是功能很强大的跨平台解释性脚本语言,而 PyQt 是python针对Qt的一门功能性拓展[11]。由于Qt本身功能的强大性加上Python语言的良好的扩展性,该设计选择Python和PyQt作为开发语言和开发环境。

界面如图7所示,电机开始侦听则开始与下位机进行连接,连接成功则显示连接成功,如果失败则返回连接失败。界面主要参数包括:脉冲总数、电机转向、起始频率值、最大频率值、脉冲加速脉冲数、减速脉冲数以及电机选择等。通讯协议数据帧以图7为例为:

图7 上位机软件示意图

0231|CT|MA|500|10 000|CW|20 000|5 000|5 000|AABB03。其中起始位0231,控制位CT;电机选择为MA;起始频率为500;最大频率10 000;电机转向,正向为CW,反向为CCW;电机总脉冲数为20 000;加速脉冲数为5 000;减速脉冲数为5 000;校验位为AABB以及截止位为03。当电机动作完成之后,下位机需返回信息给上位机告知动作完成。返回信息的通讯协议仅将控制位和电机选择进行互换,表示是下位机向上位机返回的信息。电机动作完全结束后,需将电机进行复位,等待下一次的动作命令。复位是通过触碰光电传感器从而使电机返回初始位置,后进入待机状态,等待上位机的协议命令。电机的误差就不会进行叠加。

4 实验结果与分析

在实际应用中有8台步进电机同时工作,所以在FreeRTOS中创建8个实时电机控制任务。给电机相同起始频率2 000以及最大频率5 000,不同脉冲数,比较丢失步的比例。由于电机转动需要主控制端给脉冲,而每给一个脉冲数就要进入一次定时器中断,故在定时器中断中给一个叠加参数,当脉冲数完成后由串口通信打印至串口调试助手,即可得到其电机实际接受到的脉冲数。

表2 电机丢失步比例情况

由上述数据以及通过若干次测试可以显示该电机控制系统的丢失步比例均在1%以内,电机一个脉冲为1.8°,加上电机细分数为8细分,所以电机丢失步所造成的转动距离非常的小。因此将此控制系统运用至实际工程中去,实际项目工程图如图8所示。

图8 项目工程图

5 结论

用嵌入式实时控制系统和步进电机控制技术,设计了一种基于嵌入式系统的多路步进电机控制系统,并且阐述了系统的硬件设计、步进电机控制技术以及上位机控制软件应用程序。通过测试表明该系统提高了电机控制的稳定性以及可靠性,有效的防止步进电机失步和过冲现象,有效的提高了试管架的检测效率;另一方面使用ARM7微处理器的嵌入式控制技术,使得控制成本大大降低,更适合中小型控制系统的低成本要求。该系统现已在多进样流水线中运用,且系统运作良好。

猜你喜欢

网络通信上位命令
管理Windows10的PowerShell命令行使用记录
物联网智能燃气表传感网络通信技术发展方向
信息化时代网络通信安全的背景和对策
安装和启动Docker
基于网络通信的智能照明系统设计
计算机网络通信常见问题与技术发展研究
特斯拉 风云之老阿姨上位
移防命令下达后
解析Windows10的内部命令
基于ZigBee和VC上位机的教室智能监测管理系统