唐 杰,敖少鹏,袁文俊,林沛斐,汪 洋
(1.华南理工大学 电子与信息学院,广东 广州 510641;2.中国南方电网有限责任公司 超高压输电公司广州局,广东 广州 510405;3.中国工商银行股份有限公司 软件开发中心,广东 广州 510000)
随着移动通信技术的发展,其带来的价值对人们的日常生活无可估量。一次次的实践证明,移动通信往往有着更高的可行性,带来更多的便利。远程控制作为其中的重要应用之一,被广泛用于现今的生活与生产中。如设备的分散或者置于偏远地区的有限控制网络,所耗费的人力物力大都可以用远程控制来大大减少。通过手机和全球移动通信系统(Global System for Mobile communications, GSM)模块、通用分组无线业务(General Packet Radio Service, GPRS)模块的短信通信来实现信息的传输与控制,可大幅度减低成本以及提高效率。±500 kV牛从甲乙直流线路共用接地极极址,每次直流线路单极线路停电检修或从西站做实验时,需要线路班组配合拉合位于韶关市翁源县的接地极极址刀闸,每次拉合刀闸的时间基本都在凌晨。为了拉合一次3分钟的刀闸,班组人员需要提前到翁源县住宿,准备时间长,工作效率低。偶尔接到站内临时电话需要紧急拉合刀闸时,班组人员需要从增城出发,夜间连续来回行车6小时,在高速路上奔袭374公里,浪费了大量人力物力。目前,国内外直流线路接地极运维单位较少,接地极极址位于直流线路两端,接地极极址运行维护经验更少,对于接地极刀闸远程操作装置尚未有报道使用。针对当前状况,准备设计一款远程控制装置来实现刀闸的拉合。考虑到地址位于较为偏远地区,决定采用通信范围更加广泛的GSM通信网络来实现信息的传输。由于刀闸开合对于转动角度有着很高要求,力矩较大但转速低,故采用步进电机来实现整个系统的力矩输出[1]。
笔者基于短信息的步进电机远程控制系统为研究对象,结合相关控制理论,进行远程控制系统的研究和实现,构建基于STM32单片机的步进电机最小控制系统并接入GSM通信网络,实现远程控制。因此,研究课题具备一定的实际价值和现实意义。
图1 系统整体框架
基于短信息的步进电机远程控制系统采用STM32F103单片机、TB67S109A步进电机细分驱动器、Web服务器和GSM模块SIM800c构建一开环控制系统,进而实现对步进电机的驱动和远程控制[2-5]。用户终端和上位机间采用串口通信,上位机和服务器间采用Internet通信,系统的整体框架如图1所示。
根据系统架构分析,系统分为电机驱动控制子系统和远程通信子系统。其中,电机驱动控制子系统的主体是由单片机、GSM模块SIM800c、步进电机驱动器和步进电机构成;远程通信子系统是由单片机最小系统、GSM模块SIM800c和上位机组成的用户终端为主导。电机驱动控制子系统主要实现电机驱动控制、电机运动参数计算和GSM通信功能。其中,电机驱动控制功能实际上是利用输入的脉冲对电机的启动和停止、转动速度和转动方向进行控制。远程通信子系统主要实现串口通信、电机控制和GSM通信功能,其中串口通信功能是上位机通过串口向下与终端的单片机最小系统进行通信。电机控制主要通过转发用户的控制命令,实现包括步进电机的启动/停止、加速/减速和变向等功能。
在工程应用中,如何选择主控芯片是一门很大的学问。主控芯片的选择决定着整个系统的性能,是整个系统的关键。一般地,选取一款主控芯片需要考虑的问题如下:
(1)数据处理能力水平是否满足要求;
(2)片上外设数量以及存储容量;
(3)技术资料是否丰富;
(4)功耗是否足够低;
(5)价格是否昂贵,整体性价比高低。
综合考虑,课题选用ARM生产的STM32F103作为主控芯片。该芯片采用ARM Cortex-M3内核,较小的功耗、优质的性能令它十分受市场青睐。F103属于增强型系列,21个输入通道可以高效快速地转换多个电压模拟量,能够高效地运行程序完成相应的任务;其内部集成有多种通信接口,丰富的外设接口和大存储容量带来了更为全面的功能。基于以上性能,该芯片可用于电机驱动、智能设备、应用控制等场合;同时,STM32F103系列开源资料丰富,缩减了开发周期,十分适用于本课题。
在通信方面选用的是工业级GSM/GPRS模块,具体型号为SIM800c,可以低功耗实现语音、短信息业务(Short Message Service,SMS)、蓝牙数据信息传输等功能,支持5V~24V超宽电压工作范围。通过AT指令实现手机和微控制单元(Micro Controller Unit,MCU)的通信,可以很好地满足设计的要求。
在输出方面选用57步进电机57BYG250B来进行系统的仿真和模拟。步进电机驱动器采用共阴极接法,外接系统电源[6]。电源系统采用太阳能供电系统,平时待命时期将太阳能转化为电能储存在蓄电池,应用场景(接地极极址刀闸)一般为未通电,利用太阳能及蓄电池组为系统供电。
用户通过用户端(手机或电脑)进行系统身份的注册和验证。完成登录验证后,发送控制指令给GSM通信模块,GSM通信模块读取控制信息后传输给MCU微型控制单元(若休眠中则唤醒),MCU微型控制单元再根据接收的信号进行判断处理,然后由步进电机驱动器输出相应的驱动脉冲信号[7-9]。
系统上电以后完成了对 STM32F103 和 SIM800c 的初始化工作,并向用户端发送指令格式短信之后等待回应,接收合法短信后便会根据指令改变输出电机的状态,来控制电机的脱机状态和转动状态等,利用电机转动产生的扭矩实现刀闸的远程拉合操作。主程序流程图如图2所示。
图2 主程序流程图
通过向SIM800c芯片写入不同的AT指令,每个AT指令以“AT+”开始,以回车结尾。
下面为常用的AT指令:
AT+CMGF=1; 采用文本模式
ATD+电话号码; 拨打电话
ATH+回车; 挂断电话
AT+CMGS=电话号码; 发送短信
STM32单片机不断地对GSM通信模块进行查询,当有新短信收到时,返回:+CMTI,并通过指针将短信的存储位置在返回数据里查找出来,返回短信存储位置,以便读取。如果接收到新短信,则直接发送AT+CNGR=<存储位置>,便可实现短信的读取。
发送短信时,由于中英文字符编码的不同,需要将中文短信和英文短信分开进行处理:对于全英文的情况,只需要使用GSM的缺省字符集;若含有中文字符,则需使用UNICODE字符集;最后发送:1A,完成短信的发送环节。
在收发短信的过程中,由于涉及到GBK字符集和UNICODE字符集的转化,故而设计了函数ff_convert进行GBK编码和UNICODE编码的相互转换,由于两者之间没有线性的关系,所以需要通过查表的方式进行转换。该函数采用二分法的思想:首先,若字符小于0x80(在ASCII码码值范围内),就将它当作ASCII码,不需要进行转换;否则,根据二分法确定中点,将数据存储的大小对半分开,再分为每4个字节为一组,进行16次的二分,在表中查找相对应的编码。
步进电机是一种数字信号控制电机,它的运动方向、转动速度和转动角度分别与输入脉冲的通电顺序、频率和数量有关[10-11]。
设计中采用的驱动器细分数为32。下面以细分数为32为例,定义变量pulse_count,它记录的是引脚电平翻转的次数,可以通过它来记录输出脉冲信号的数量,其值应为输出脉冲数的两倍。实际输出的完整脉冲个数为6400。这样可以方便地记录和控制步进电机的实际转动圈数,通过改变pulse_count的值,即改变引脚电平翻转的次数,就能够实现旋转角度的控制输出。
在该设计中,通过dir和ena分别定义当前步进电机的运动方向和脱机使能情况;由变量Toggle_Pulse定义了定时器通道脉冲数计数,该值决定了输出的脉冲频率;pulse_count记录输出脉冲数量,每过一个完整的脉冲该值增加2,因为引脚翻转两次才是完整的脉冲信号。
在定时器计数器值与捕获比较计时器值相等时发生中断,调用下面的函数:
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim){
_IO uint16_t count;
count=_HAL_TIM_GET_COUNTER(&htimx_STEPMOTOR);
_HAL_TIM_SET_COMPARE(&htimx_STEPMOTOR,TIM_CHANNEL_1,count+Toggle_Pulse);
pulse_count++;
}
其中,_HAL_TIM_GETCOUNTER用于获取当前定时器计数值,并放在count中;_HAL_TIM_SET_COMPARE用于设置定时器通道比较值,这里用count和Toggle_Paulse之和赋给它。
最终效果是定时器通道引脚持续输出脉冲信号,周期为2×Toggle_Paulse,即改变Toggle_Paulse可以便捷地改变产生的脉冲信号的频率。
该系统为基于短信息的步进电机远程控制系统,选取包含单片机最小的系统、GSM通信模块和上位机的用户终端作为系统人机交互的窗口。根据系统实际,用户终端至少应具备以下功能:
(1)串口通信功能。上位机与单片机最小系统之间通过串口连接,终端软件需支持访问串行通信端口(简称串口)并进行数据的收发。
(2)用户管理功能。包括用户身份信息的验证和权限管理。
(3)电机远程控制。主要包括步进电机远程控制功能和电机运行状态信息获取功能。其中电机远程控制功能主要通过转发用户对电机的控制命令加以实现;电机运行状态信息的获取是实现接收电机反馈的信息,主要有电机的启停信息、位置速率和方向状态[12-14]。
设计前端使用ejs模板引擎开发,通过jquery发起ajax请求与后端的node.js进行交互。通过使用serialport库对底层的串口进行调用,完成串口的打开、关闭和串口数据的收发。
图3 用户终端界面截图
系统按上述准备部署成功后,对系统功能进行相关测试。通过在主控制界面点击电机的启动、停止、变向、加减速按键,查看主控制页面返回的电机状态信息(上位机)和现场端硬件平台电机的实际运动状态信息(下位机)。其测试结果如表1所示。
表1 步进电机远程控制系统测试结果
根据上述结果,步进电机的启停、变向及变速均达到预期效果,测试所得效果良好,远程电机的运行状态与控制状态一致,能达到步进电机远程控制的要求。实际测试过程中还发现使用SMS短信息进行通信存在1~2 s的延迟,这是由于SMS短信息本身的特性决定的。
采用上述方法开发的基于GSM远程控制系统通过短信息来实现开关的控制和状态的反馈读取,操作简单方便,对于操作环境和操作者的要求不高,需要时可以很容易访问。指令以短信形式发送到微控制器,只要存在有效的GSM网络即可进行相关的操作,而且控制器信号稳定,实现无线远程控制,时空限制小。控制器适应各种工作环境,通过短信这一无线传输形式来实现信息的交互可以很好解决人工布线的难题,电机转动产生的扭矩代替人工手摇,实现极址刀闸的自动拉合,可代替人工操作,实现了无人值守后的最大优化。在接下来的工作中,我们将继续利用深度学习的相关理论对系统进行优化,以提高系统性能和减少人工劳力。