APP下载

基于CC430F6137的工业手柄摇杆优化模型研究

2022-01-18刘伟静赵超泽徐文丽王小涛

自动化仪表 2021年12期
关键词:死区摇杆偏移量

刘伟静,赵超泽,王 东,徐文丽,姚 宁,王小涛

(1.天津航天机电设备研究所,天津 300458;2.天津市宇航智能装备技术企业重点实验室,天津 300458;3.北京交通大学海滨学院,河北 廊坊 061100)

0 引言

随着现代机械工程的快速发展,工业手柄[1-2]越来越多地应用于无人机、机器人[3]、移动车等。其中,工业手柄的摇杆[4]操作可实现设备移动的灵活性与稳定性。手柄控制方式分为无线和有线两种。无线手柄与有线手柄相比,具有较高的移动灵活性,且安装方便、操作简单、调试维护成本较低。因此,大部分领域使用无线手柄进行远程控制。文献[5]以STC89C52单片机为主控单元,设计了摇杆信号无线传输模块。该模块在模数转换器(analog to digital converter,ADC)模块初始化时读取的三组数据均为无效数据,且在检测数据时需在一定时间内关闭无线传输,因而增加了数据处理时间和设备能耗。文献[6]设计了一种便携式多功能无线游戏手柄。该手柄能准确输出控制命令,但同一时间从缓存区读取的11个字节不一定是同一个数据包中的,导致信道利用不充分甚至丢包。

本文从手柄软件设计入手,采用CC430F6137单片机[7]作为手柄控制器的核心部分,利用ADC采集摇杆偏移量,设置ADC采样参数,确保控制器每次均可采集到一个完整的数据包;通过对比的方式建立摇杆数学优化模型,以提高摇杆操作精度。

1 硬件系统

作为智能设备的上位机系统,无线手柄具有远距离遥控下位机的功能,可实现平移、转向、升降、翻转等动作。无线手柄操控方便,可靠性较高,能较好地满足使用者的要求。

单片机具有集成度高、可靠性高、控制功能强、功耗低的特点,是工业控制领域广泛使用的元件。德州仪器推出的射频芯片CC430延续了MSP430单片机的超低功耗设计,采用了CC1101[8]作为无线内核,成为新一代无线式单片机。因此,本文选用CC430F6137作为手柄控制核心单元。将CC430F6137中的13个I/O连接手柄按键,4个模拟量接口连接手柄摇杆。手柄显示屏采用并行通信模式。其中,手柄摇杆产生的模拟量信号通过ADC中断转换成数字量信号,并存入CC430F6137单片机寄存器内。解析该摇杆信号即可控制下位机的动作。手柄硬件结构如图1所示。

图1 手柄硬件结构框图

2 摇杆优化模型设计

本文设计的手柄采用双轴摇杆模块。该模块由2个滑动变阻器[9]组成。拨动摇杆时滑动变阻器的阻值发生变化,对应的x、y轴电压值随之变化,进而产生x、y轴方向的偏移量。当摇杆不进行任何操作时,单片机ADC采集到的x、y轴的偏移量视为摇杆的原点。然而,由于滑动变阻器的不稳定性,摇杆原点会在一定范围内浮动,易产生手柄无操作但下位机动作的问题。因此,必须将摇杆原点限定在一定范围(即死区[10]范围)内,以防止危害事故的发生。本文以该特性为出发点优化摇杆死区,提高手柄操控性能。摇杆偏移量采集流程如图2所示。

图2 摇杆偏移量采集流程

在保证摇杆正常应用的前提下扩大摇杆死区范围,确定在不进行任何操作时摇杆采集点数始终保持在死区范围内。不同的死区设置方式具有不同的效果。下面解析摇杆死区分别设置为方形和圆形时的特点,并优化设计。

2.1 方形死区模型

方形死区模型如图3所示。

图3 方形死区模型

当不操作摇杆时,设定摇杆x、y轴的实际偏移量分别为s、t(s>0,t>0)。死区范围设为:当x值满足a

摇杆在死区范围外,xvirtual、yvirtual轴正负方向的偏移量分别为1 024,即解析后的摇杆坐标范围为-1 024≤xvirtual≤1 024、-1 024≤yvirtual≤1 024。由此可以得到死区范围之外的角度计算方法,如式(1)所示。

(1)

式中:A为摇杆当前角度值。

当x、y值处于阴影区域2时,满足xvirtual=0或yvirtual=0,表示摇杆向正前、正左、正后、正右四个方向推动。

上述方式可在保证摇杆正常应用的前提下有效扩大死区范围,保证摇杆不会在非操作模式下发出错误信号。

以图3(a)的第一象限为例。当摇杆沿图3(b)中的虚线箭头方向推动时,摇杆角度会出现0°(OA)→90°(AB)→γ(0<γ<45°)的跳变,造成输出方向的突变,极易引起下位机方向突变,甚至死机。同理,在其他3个象限也会出现角度跳变现象。

2.2 圆形死区模型

满足(xvirtual-s)2+(yvirtual-t)2≤r2(r>0)的区域为死区范围。当摇杆处于死区范围内时,坐标设为O(0,0)。

死区范围之外的角度计算如式(1)所示。为判断摇杆向正前、正左、正后、正右四个方向的推动,设定:

(2)

式中:0°<α<45°。

圆形死区模型如图4所示。

图4 圆形死区模型

根据式(1)、式(2)可知,该设置方法扩大了摇杆0°、90°、180°、270°四个方向的范围。圆形死区模型拨动方向如图4(b)中阴影区域2所示。

分析图4(b)中的第一象限可知,直行推动摇杆至死区范围外,不会出现角度跳变,消除了摇杆操作造成的下位机方向突变的问题。

3 基于优化模型的无线传输程序

摇杆采用圆形死区模型。本文采用自定义方式设置无线传输程序,采用6个字节的自由协议:帧头为0xAA;第2个字节为x轴坐标数据;第3个字节为y轴坐标数据;第4个字节为角度;第5个字节为校验位,应用偶校验方式;帧尾0xBB。

手柄发送数据流程如图5所示。

图5 手柄发送数据流程

本文应用CC430F6137单片机中的ADC中断构建程序。具体程序构建流程如下所述。

3.1 ADC中断初始化

首先初始化ADC中断,然后通过配置寄存器,使能该中断。

void ADC_Init(void)

|{|P2SEL=0xCF;//使能ADC 通道输入

ADC12CTL0=ADC12ON+ADC12MSC+ADC12SHT0_8;

ADC12CTL1=ADC12SHP+ADC12CONSEQ_1+ADC12SSEL_3;

ADC12MCTL0=ADC12INCH_0;

ADC12MCTL1=ADC12INCH_1;

ADC12MCTL2=ADC12INCH_2;

ADC12MCTL3=ADC12INCH_3;

ADC12MCTL6=ADC12INCH_6;

ADC12MCTL7=ADC12INCH_7+ADC12EOS;

ADC12IE=0x08;

delayxms(100);

ADC12CTL0 |=ADC12ENC;

ADC12CTL0 |=ADC12SC;

delayxms(100);

}

3.2 配置ADC寄存器

在中断程序中应用无符号整型数组results[8]配置ADC中的0、1、2、3、6、7号寄存器,将x、y、z三轴坐标分别配置在results数组的1、0、6号寄存器中。具体如下。

results[0] = ADC12MEM0; //y轴坐标

results[1] = ADC12MEM1;

//x轴坐标

results[2] = ADC12MEM2;

//外部电压

results[3] = ADC12MEM3;

//电池电压

results[6] = ADC12MEM6;

//z轴坐标

results[7] = ADC12MEM7;

3.3 设置摇杆死区

x轴和y轴采用二维坐标,设置圆形死区。中心点设置方法为:采集20次x轴和y轴摇杆在起始点的坐标,取其平均值,设为中心点,例如(2 035,2 022)。以中心点为圆点,以Blind_Spot为半径,设置圆形死区。

z轴单独作为一维坐标。采集20次z轴摇杆在起始点的坐标,取其平均值,设为中心,例如2 050。以中心点为起点,上下取100,设置为死区范围,即z轴在(1 950,2 150)范围内的变化忽略不计。

具体程序如下。

if(zeroflag==0)

//原点限制

{

ShiftZeroX = results[1];

ShiftZeroY = results[0];

if ((pow((ShiftZeroX-2035),2)+pow((ShiftZeroY-2022),2))>=pow(Blind_Spot,2))

{

ShiftZeroX=2035;

ShiftZeroY=2022;

}

ShiftZeroZ = results[6];

if((ShiftZeroZ>2150)||(ShiftZeroZ<1950))

ShiftZeroZ=2050;

}

3.4 x、y、z轴坐标变换

摇杆坐标变化范围为0~4 096,在初始位置时在2 048上下变化。将中心(2 035,2 022)转换为原点(0,0),将上下1 024设置为摇杆的死区范围,超出1 024的部分记为1 024。其中,x、y轴坐标变换代码如下。

void XYConvert(int x,int y,int rocker)

|{

if ((pow((x-2035),2)+pow((y-2022),2))>=pow(Blind_Spot,2))

{

if((x>SZeroXN-1024)&&(x

statex=x-SZeroXN;

//x-

else if(x

statex=-1024.0;

else if((x>SZeroXP)&&(x

statex=x-SZeroXP;

else if(x>SZeroXP+1024)

statex=1024.0;

else statex=0;

if((y>SZeroYP)&&(y

statey=y-SZeroYP;

//y+

else if(y>SZeroYP+1024)

statey=1024.0;

//y+

else if((ySZeroYN-1024))

statey=y-SZeroYN;

//y-

else if(y

statey=-1024.0;

//y+

else statey=0;

}

else

{

statex=0;

statey=0;

}

_no_operation();

|}

z坐标变换代码如下:

|int ZConvert(int z,int rocker)

|{

int q;

if((z>SZeroZP)&&(z

q=z-SZeroZP;

//z+

else if(z>SZeroZP+1024)

q=1024.0;

//z+

else if((zSZeroZN-1024))

q=z-SZeroZN;

//z-

else if(z

q=-1024.0;

//z-

else q=0;

return q;

|}

4 试验验证

本文应用工业手柄无线遥控全向移动转运车的方式,测试摇杆死区优化模型。试验选择周围障碍物较少、地面干净平整的场地,使转运车可全向移动。试验工业手柄发射功率为-10 dBm,最大发射半径为100 m,距离转运车5 m处。x轴和y轴的死区半径设置为100 mm。多次拨动摇杆并将角度值显示于液晶屏(liquid crystal display,LCD)上,观察转运车的移动方向是否与LCD上的角度信息一致。以x、y轴第一象限为例,说明圆形死区模型和方形死区模型的优劣。缓慢推动摇杆,观察x轴和y轴偏移量的变化。

角度数值变化如表1所示。

表1 角度数值变化

由表1可知,当设置圆形死区时,由0°变化到65°,无角度跳变发生;当设置方形死区时,转运车的移动方向由0°变化到90°,再跳变到65°。该跳变会引起转运车的行走角度突然发生变化,造成危险。而设置圆形死区时,无角度跳变的情况发生,消除了上述危险。

5 结论

本文以CC430F6137作为手柄控制核心,根据工业手柄的可靠性建立摇杆数学模型,设定摇杆的死区模型,并分析该模型的优劣。针对摇杆信号的无线传输程序进行了分析设计,编写了主要的功能函数,实现了数据的转换和无线传输功能。该研究为后续的应用奠定了良好的基础。

猜你喜欢

死区摇杆偏移量
基于格网坐标转换法的矢量数据脱密方法研究
曲柄摇杆机构的急回程度分析与探讨*
具有输入死区的分数阶Victor-Carmen 系统的有限时间同步(英)
曲柄与摇杆摆角的关系
基于ANSYS的曲柄摇杆机构的仿真分析及优化设计
零电压开关移相全桥的死区时间计算与分析
搅拌针不同偏移量对6082-T6铝合金接头劳性能的影响
基于最小二乘平差的全极化SAR配准偏移量估计方法
输油站进站压力控制方案优化
曲柄摇杆行星系取苗机构参数匹配与优化