1.控制系统的软件平台
图4-9 基于CAN的控制系统实现流程
考虑到不同操作系统的利弊,本文分别开发了基于DOS平台和Windows XP平台的控制软件。
Windows XP是面向图形界面的多任务、多用户操作系统,可选软件开发平台丰富,如Delphi,Visual Basic,Visual C++,Borland C++Builder等。其中Borland C++Builder属于可视化编程环境,具有支持快速应用程序开发(RAD)的功能,也是本文采用的开发环境。
Borland C++Builder(简称BCB)是Borland公司1997年推出的可视化C/C++开发环境,它采用了面向对象的编程方法和“所见即所得”的开发界面形式。用户只要简单地拖动控件(Component)到窗体(Form)上,定义一下相关属性,就可以快速地建立应用程序可视化界面;C++Builder内置了丰富可重用的控件(定时器、按钮、绘图等),这些控件完全封装了Windows的相关公用特性,且完全可扩展,支持自定义控件;C++Builder完全支持32位长文件名、多线程程序设计,支持标准C++库,可直接调用Windows API函数,便于用户进行原有C/C++代码的移植等。
2.控制系统总流程
基于CAN的控制系统软件实现过程为:程序开始运行时,打开串口,如果串口打开失败,则无法与遥控器建立串口通信,此时显示出错信息,然后结束程序;如果串口打开成功,则可以与遥控器建立串口通信,此时打开PC/104-CAN总线适配卡,并对相关变量进行初始化;读取遥控器指令,并对其进行译码,将控制信息输出到CAN总线上,下位机根据所定义的协议对总线数据进行处理,对电机发出控制信号,并读取编码器信息,传输给上位机进行状态显示。具体流程如图4-9所示。
3.基于RS-232总线的串口通信软件实现
由基于CAN的控制系统结构图可知,控制系统需要一个RS-232串口,负责与无线接收模块通信。在Windows XP系统下开发环境使用的是Borland公司的C++Builder 6.0,而该集成开发环境虽然自身提供了很多可供选择编程的控件,但是并没有提供串口通信的命令和组件。故而,串口通信程序需要通过其他手段进行开发。
在C++Builder 6.0下实现串口通信一般有如下几种方法:一是在了解硬件的情况下,可以在C++程序中嵌入行间汇编,通过汇编代码直接操作UART硬件,该方法对开发人员的计算机素养要求较高;二是利用高性能的第三方控件,如MSComm、SPComm等,这些控件使用简单有效,不过字符之间的转换比较复杂;三是通过自定义串口控件进行开发。C++Builder 6.0支持自定义控件的开发使用,用户可以根据需要自定义控件。但是由于需要自定义各种属性,该种方法过于复杂,实现起来比较困难;四是利用Windows系统自带的API通信函数进行编程,该方法虽较为复杂,但灵活性最大。本文选取的编程方法是利用Windows自带的API函数实现串口通信。
Windows提供了丰富的API函数供用户进行编程调用,与串行通信相关的API函数及其作用如表4-1所示。
表4-1 常用串行通信API函数及其作用
在Windows操作系统下利用系统提供的API函数进行串口通信的编程,实际上是用函数CreateFile将串口以文件的方式打开,从而获得端口句柄;之后通过Get CommState获得通信参数,Set CommState设置通信参数函数(串口的波特率、数据格式),SetComm Timeouts设置读/写超时时间等;再通过Clear Comm Error函数检测串口是否有硬件错误,如果有,则清除硬件错误,并用PurgeComm函数清空串口缓冲区,如果没有,则可以调用Read File和WriteFile函数收发串行通信数据。在退出程序之前,要用CloseHandle关闭打开的文件(串口)。Windows下一般操作串口的流程如图4-10所示。
图4-10 Windows下串口的建立流程图
通过操作串口,获得无线遥控手柄发送的指令数据,当接收到无线模块发送来的数据之后,需要对数据进行解码处理,以判断Mecanum轮全方位移动机器人将要运行的模式和状态,得到具体的控制量。全方位移动机器人总共设计了五种运行模式:全方位模式、汽车模式、摆动模式、微动模式、停车模式。全方位模式运动最为灵活,可以实现左右、前后、斜向45°和原地旋转等共十个方向的运动;汽车模式可以使机器人像汽车一样运行,但是不能横向运动和原地旋转;摆动模式可以分别绕前后车轮之间的中点进行摆动;微动模式可以实现小位移移动;停车模式使机器人停止,并且不受遥控器摇杆影响。具体译码流程如图4-11所示。
图4-11 无线数据指令译码流程
4.基于CAN总线的应用层通信设计
本文中与上位机主处理器相连的PC/104-CAN总线适配卡对外主要用到如表4-2的驱动函数。
表4-2 Windows下CAN控制器驱动函数
表中的CAN_Init用于初始化并激活CAN卡,主要包括对PC/104-CAN总线适配卡的ID、CAN模式、波特率、输出控制方式、标识符屏蔽格式等的设置;CAN_Send用于向CAN总线发送8个字节的数据;CAN_Rec用于从CAN总线读取数据。
通过上述几个函数,可以完成对PC/104-CAN总线适配卡基本操作。
由上位机和下位机之间自定义的通信协议及下位机带CAN收发器的电机控制器的控制算法,可以实现对电机的闭环控制。上位机和下位机之间的通信协议定义如表4-3所示。
表4-3 上位机和下位机之间的通信协议
该协议共发7个字节数据,其中,第0个字节为类型(Type),用以判断后面几个数据的功能。当Type=0时,后续6个字节为机器人车体的长、宽、轮毂轴线与辊子轴线的夹角的高低字节;Type=1时,后续6个字节用来设置模糊控制的量化因子;Type=2时,表示系统处于微动(位置)控制模式,后续6个字节用来设置各向的位移;Type=3时,表示系统处于速度控制模式,后续6个字节用来设置各个方向的运动速度。
5.系统控制算法
系统控制算法采用“模糊-PID”控制方法,微动控制模式下的主体增量式PID算法和模糊控制流程如图4-12、图4-13所示。
图4-12 增量式PID控制流程
(www.xing528.com)
图4-13 模糊控制流程
6.模糊控制算法
在模糊化过程中,需要将偏差的基本论域量化到模糊集合论域中,也就是偏差数据离散化的过程。本章编写了int Err_Domain(float*err_data)函数实现这一过程,具体流程如图4-14所示。
图4-14 模糊化过程的函数实现流程
图4-15 模糊控制查询表流程
在将偏差数据进行模糊化之后,需由已建立的三个语言变量U、E、EC的赋值表,根据实际控制经验,拟定控制规则,进而计算出整个控制系统模糊控制规则(这里用的是马丹尼法)的总模糊关系R,由输入语言变量E、EC论域上的模糊子集及模糊控制规则,可求出模糊控制器输出语言变量U论域上的模糊集合,即模糊控制器查询表,这是整个模糊控制算法最核心的部分。
建立了模糊控制器查询表,可以将其存放在计算机的存储器中,这样在每一个实际的控制周期内,只要将采集到的实测偏差及其变化率分别调用前述的Err_Domain函数,取得相应的模糊化语言变量,再根据模糊控制器查询表,将查得控制量乘以比例因子,即得实际所需的控制量(也就是清晰化过程)。
本节设计了函数int Func_Fuzzy(float**E,float**EC,float**U,int**Uc)以求取模糊控制器查询表,具体流程如图4-15所示。
7.位置—速度检测模块算法
本算法所用无刷直流电机无编码器,只有内置的霍尔信号可用来进行位置和转速的测量。电机转动时,位置信号由霍尔元件产生。根据霍尔元件位置检测信号(一系列的脉冲串),可得到电机转过的角度(位置),进而可得整个Mecanum轮全方位移动机器人移动的距离。而角速度是角度的微分,如果测量该段角度的时间,还可得到机器人运行的速度。但是由于电机每转只给出5个霍尔信号,位置测量的分辨率太低,对我们的控制会产生较大影响。考虑到安装问题,这里用外置码盘与电机轴相连,通过光电传感器来进行位置信号的检测。码盘为100线,电机可以实现1.8°的分辨率,减速器减速比为25,故车轮分辨率为0.072°,整车理论位置精度可达0.2 mm。
在数字化转速测量方法中,比较常用的有M法、T法、同步M/T法。
(1)M法也就是测频法(图4-16),是在固定的时间间隔Δt1内读取的脉冲数,实际上就是测量脉冲的频率。如果传感器与某个转轴连接,并且每转产生N个脉冲,在固定的时间间隔Δt1内对传感器的输出脉冲进行计数,测得的脉冲数为m1,则由此可推算出转轴的转速为:
图4-16 M法测速原理
显然,在转速测量过程中要保持时间间隔的准确性和稳定性。如果不考虑因时间间隔不稳定而产生的误差,那么采用上述计数原理进行转速测量所产生的误差来源于±1个计数脉冲,故此其相对误差为1/m1。不难看出,当转轴转速较高的时候,m1较大,进而测速相对误差较小;当转轴转速较低的时候,m1较小,进而测速相对误差较大。因此,M法测速适合转轴转速较高的情况。
(2)T法也就是测周期法(图4-17),是使用传感器输出脉冲的上升或者下降沿来启动和结束计数器对一个基准时钟的计数,然后利用这个计数值来进行转速的测算。
图4-17 T法测速原理
如图4-17所示,基准时钟发出计数脉冲,而传感器信号的前沿用来结束上次计数并启动本次计数。假设本次计数值为m2,基准时钟频率为fc,则可以用下式来推算转轴转速:
T法测速的相对误差也取决于一个计数脉冲,为1/m2。显见,当转轴转速较低时,Δt2较大,m2较大,进而相对误差较小;当转轴转速较高时,Δt2较小,m2较小,进而相对误差较大。故而,T法测速适合转轴转速较低的情况。
(3)同步M/T法是所谓的测频测周期法(图4-18),它的基本原理是先确定一个时间Δt,在此时间内对传感器输出脉冲进行计数,且该时间的启动与传感器输出脉冲的前沿或者后沿同步。为使实际的测量时间为传感器脉冲周期的整数倍,在Δt的基础上延长一个变动时间Δtx,使得计数到下一个传感器脉冲到来之后再结束。故而实际测量时间为t=Δt+Δtx。
图4-18 M/T法测速原理
图4-19 速度、位置检测流程
假设两个计数器分别对基准时钟和传感器输出进行计数,得到的计数值分别为m1和m2,则被测转轴转速为:
同步M/T法测速的相对误差来源于m1的一个计数,表示为1/m1。
由上述分析可知,同步M/T法综合了M法和T法的优点,在低转速下也可以保证检测传感器输出脉冲为一个完整周期,在高速和低速条件下都可以进行较为准确的速度测量,这是一种比较好的测速方法。但是在用该法测量电机转速时,发现同步M/T法具有实时性差、测量精度非线性、计数时钟很难与转速脉冲同步等问题。所以,相比于前两种测量方法,M/T法的测量精度并没有本质的提高。
由于电机整体运行速度不高,故采用T法测速。具体速度、位置检测模块的程序流程如图4-19所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。