基于51单片机的六足机器人控制系统设计与制作
作者:庄严、宋鸣、张劭凤、李超来源:原创日期:2013-11-15人气:2277
引言
在自然界和人类社会中存在一些可能危及人类生命的特殊场合,在一些地形不规则和崎岖不平的环境下,六足机器人具有比轮式机器人和履带式机器人更好的运动稳定性和更强的环境适应性,可应用于抢险、勘察、探测等领域。当前对于六足机器人多路舵机控制一般采用排序算法或分时控制算法,存在精度不足或数量有限的问题。本研究基于51单片机采用新型算法产生18路PWM信号控制舵机,结合避障传感器、无线通信模块和上位机模块控制机器人的六足运动[1][2]。
1 控制方案制定
采用图1所示的六足结构,对六足机器人运动机理、步态设计进行研究,选择合适的驱动系统。
1.1 运动机理 机器人有六个足,每个足有三个关节,每个关节处安装一个舵机,舵机驱动关节做旋转运动。因此可通过对每个足上三个舵机的旋转控制实现足端部到达地面上可达范围内的任意一点。
1.2 步态设计 六足机器人采用三角步态方式行走,如图2所示。向前运动时,左中足、右前足、右后足为一组(a图黑点)保持支撑地面,左前足、左后足、右中足为二组(a图白点)抬起向前迈步变为b图;二组支撑地面(c图黑点),一组足做迈步动作(d图白点)。如此循环交替实现向前运动。转弯运动有两种方式,一种为自转,一种为公转。自转为一组足保持支撑地面,二组足抬起向一个方向旋转一定角度后落下支撑地面,然后抬起一组足同方向旋转,如此交替实现自转。公转方式与前进方式大体相同,只是左右两侧足迈步的距离不同。
1.3 驱动系统 关节处为舵机驱动,舵机转角为180°,工作电压3.5V-6V,可提供力矩为1.6kg·cm(4.8V)。使用PWM信号控制舵机的角度。PWM信号周期为20ms,产生高电平范围为0.5ms-2.5ms,高电平的时间线性的对应舵机-90°到+90°角度。通过控制各个I/O的PWM占空比来控制每个舵机的角度,从而实现六足机器人的行走动作。
2 电气控制设计
为实现上述的控制方案,需要对电路、算法、程序等进行设计。
2.1 电路设计 六足机器人采用模块化的设计,主控芯片采用STC12C5A60S2,使用51单片机的最小系统作为核心,舵机电源为两节18650电池,可提供3.7V电压,每节可给9路舵机供电,51单片机的18个I/O连接到舵机信号线上,4个I/O连接无线遥控模块上,2个I/O口连接到红外避障传感器上,串口TXD/RXD连接到PL2303串口通信模块上。
2.2 舵机的控制算法设计 舵机控制的原理是在信号线上给舵机20ms一个周期中0.5~2.5ms的5V高电平,其余时间为低电平的PWM信号,通过调节高电平的时间来控制舵机转动的角度。
若取51单片机最小系统的外部晶振为11.0592M,机器周期为1.08507us,舵机转动的精度可达0.1°。
使用一个定时器产生多路舵机信号的方法有主要有两种。一种是将舵机高电平时间排序,在一个舵机周期开始时,拉高所有舵机信号的电平,然后给定时器赋值舵机最少高电平的时间。当单片机进入定时器中断后,再将高电平时间第二长的与第一长的时间差赋值给定时器。这样直到最后一组时间被赋值,最长电平时间的舵机信号被拉低,再给定时器赋值(20ms与最长时间差对应的值)[3]。另一种为将20ms分成8个2.5ms的时间段,舵机的高电平信号依次在这8个时间段内。定时器依次赋值高电平时间和2.5ms与高电平时间的差[4]。
方法一理论上可以控制任意多路,但实验发现,当舵机数量增加,排序后相邻舵机高电平时间差就会减少,而定时器中断的值越小,定时的误差就越大,所以这种方法在保证精度的情况下产生几路PWM舵机信号。方法二:由于是20ms最多只能分成8个时间段,所以控制舵机的数量有限,但是每个的精度都较高。
所以要想在保证精度的情况下控制18路舵机,就可以采用以上两种方法结合的方式,即3×6法。用方法二在6个2.5ms时间段中的每个时间段内产生3段高电平。这样既能控制多路舵机又能保证PWM信号的精度。
2.3 Protues仿真舵机信号 开发过程中借助Protues软件仿真舵机运行情况,仿真主要有51单片机最小系统,18个舵机,示波器三个部分,可以观察示波器的波形周期及占空比来调试程序,也可以同时观察到舵机的角度变化,18路舵机Protues仿真如图3所示。
2.4 避障模块 六足机器人避障模块采用2个E18- D50NK光电式传感器,放置于六足机器人的左前和右前处。此传感器共有三个引脚,分别为VCC、GND、OUT。其中VCC接4.5V-5V电压,OUT为输出信号,常态为+5V高电平,遇到障碍时会产生低电平。通过51单片机不断的检测IO口的状态来判断前方是否有障碍物,并选择避开方式。
2.5 无线遥控模块 六足机器人采用点动方式MX-J05V无线遥控的模块,遥控器有4个按键,该模块的D1D2D3D4为数据位,接到51单片机的IO口上,常态为低电平,按下按键,对应数据位变为高电平。
2.6 串口通信模块 串口通信采用PL2303模块,该模块为一种高度集成的RS232-USB接口转换器,可以将上位机发送给COM端口的信号转换为TTL电平,使51单片机能够接受PC机发送的数据。
2.7 下位机接收上位机数据模块 上位机与51单片机的通讯,采用串口通讯方式,中断流程如图4所示。上位机发送5个字节的报文来传递给下位机数据,其中控制18个舵机5个字节报文包括起止符的“#”“控制位”“舵机号”“舵机角度”“$”。下位机将接受到的数据储存在结构体中,当接收到“$”时,对储存的结构体数据进行处理,并做出相应的响应[5]。
3 上位机设计
通过上位机设计可扩展六足机器人的运动形式。上位机采用C#编程语言,实现控制串口的打开和关闭、用serialport设置端口属性、发送字符指令控制六足机器人的功能。
3.1 设置端口属性
结合serialport属性,编写了串口通讯的代码。
串口设置码:
①打开串口
serialPort1.Open();
②设置串口号,波特率,校验位,数据位,停止位
serialPort1.PortName="COM1";
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.Parity=System.IO.Ports.Parit.None;
serialPort1.StopBits=System.IO.Ports.StopBits.One;
③运用write函数发送数据
3.2 无线遥控、避障模式、行走模式的实现 此三类模块的实现均为直接打开串口,向下位机发送相应指令,控制下位机发出相应动作指令。
3.3 舵机控制模块的实现 采用滑块控件,每个滑块位置对应0~255个字符,每次鼠标对滑块的滑动,上位机即通过串口发送相应报文信息。下方插入一个18列的表格,可将当前滑块的位置添加到表格里,可以通过选中一行或者几行,然后点击发送键,将18个舵机位置一次发给下位机,来实现动作的编写与控制[6]。
在此功能完成中,核心代码主要为重新定义一类write函数,由新函数完成具体数据发送,示例:
将数据依次取出
serialPort1.Write(buffer,0,21);
发送
Write(Convert.ToChar(0×04),jiao);
4 结论
本文设计了一种基于51单片机的六足机器人控制系统,研究结果表明:①采用3×6法控制舵机既能实现对多路舵机的控制又能保证PWM信号的精度;②六足机器人由于自由度多,结合上位机对舵机的控制,可以完成除了行走外很多复杂的动作,比如可以在键盘上打字,可以越过一定高度的障碍物;③六足机器人运用了51单片机的I/O口控制、定时器中断、串口中断等功能,所以也可以作为单片机教学的一个实践。
在自然界和人类社会中存在一些可能危及人类生命的特殊场合,在一些地形不规则和崎岖不平的环境下,六足机器人具有比轮式机器人和履带式机器人更好的运动稳定性和更强的环境适应性,可应用于抢险、勘察、探测等领域。当前对于六足机器人多路舵机控制一般采用排序算法或分时控制算法,存在精度不足或数量有限的问题。本研究基于51单片机采用新型算法产生18路PWM信号控制舵机,结合避障传感器、无线通信模块和上位机模块控制机器人的六足运动[1][2]。
1 控制方案制定
采用图1所示的六足结构,对六足机器人运动机理、步态设计进行研究,选择合适的驱动系统。
1.1 运动机理 机器人有六个足,每个足有三个关节,每个关节处安装一个舵机,舵机驱动关节做旋转运动。因此可通过对每个足上三个舵机的旋转控制实现足端部到达地面上可达范围内的任意一点。
1.2 步态设计 六足机器人采用三角步态方式行走,如图2所示。向前运动时,左中足、右前足、右后足为一组(a图黑点)保持支撑地面,左前足、左后足、右中足为二组(a图白点)抬起向前迈步变为b图;二组支撑地面(c图黑点),一组足做迈步动作(d图白点)。如此循环交替实现向前运动。转弯运动有两种方式,一种为自转,一种为公转。自转为一组足保持支撑地面,二组足抬起向一个方向旋转一定角度后落下支撑地面,然后抬起一组足同方向旋转,如此交替实现自转。公转方式与前进方式大体相同,只是左右两侧足迈步的距离不同。
1.3 驱动系统 关节处为舵机驱动,舵机转角为180°,工作电压3.5V-6V,可提供力矩为1.6kg·cm(4.8V)。使用PWM信号控制舵机的角度。PWM信号周期为20ms,产生高电平范围为0.5ms-2.5ms,高电平的时间线性的对应舵机-90°到+90°角度。通过控制各个I/O的PWM占空比来控制每个舵机的角度,从而实现六足机器人的行走动作。
2 电气控制设计
为实现上述的控制方案,需要对电路、算法、程序等进行设计。
2.1 电路设计 六足机器人采用模块化的设计,主控芯片采用STC12C5A60S2,使用51单片机的最小系统作为核心,舵机电源为两节18650电池,可提供3.7V电压,每节可给9路舵机供电,51单片机的18个I/O连接到舵机信号线上,4个I/O连接无线遥控模块上,2个I/O口连接到红外避障传感器上,串口TXD/RXD连接到PL2303串口通信模块上。
2.2 舵机的控制算法设计 舵机控制的原理是在信号线上给舵机20ms一个周期中0.5~2.5ms的5V高电平,其余时间为低电平的PWM信号,通过调节高电平的时间来控制舵机转动的角度。
若取51单片机最小系统的外部晶振为11.0592M,机器周期为1.08507us,舵机转动的精度可达0.1°。
使用一个定时器产生多路舵机信号的方法有主要有两种。一种是将舵机高电平时间排序,在一个舵机周期开始时,拉高所有舵机信号的电平,然后给定时器赋值舵机最少高电平的时间。当单片机进入定时器中断后,再将高电平时间第二长的与第一长的时间差赋值给定时器。这样直到最后一组时间被赋值,最长电平时间的舵机信号被拉低,再给定时器赋值(20ms与最长时间差对应的值)[3]。另一种为将20ms分成8个2.5ms的时间段,舵机的高电平信号依次在这8个时间段内。定时器依次赋值高电平时间和2.5ms与高电平时间的差[4]。
方法一理论上可以控制任意多路,但实验发现,当舵机数量增加,排序后相邻舵机高电平时间差就会减少,而定时器中断的值越小,定时的误差就越大,所以这种方法在保证精度的情况下产生几路PWM舵机信号。方法二:由于是20ms最多只能分成8个时间段,所以控制舵机的数量有限,但是每个的精度都较高。
所以要想在保证精度的情况下控制18路舵机,就可以采用以上两种方法结合的方式,即3×6法。用方法二在6个2.5ms时间段中的每个时间段内产生3段高电平。这样既能控制多路舵机又能保证PWM信号的精度。
2.3 Protues仿真舵机信号 开发过程中借助Protues软件仿真舵机运行情况,仿真主要有51单片机最小系统,18个舵机,示波器三个部分,可以观察示波器的波形周期及占空比来调试程序,也可以同时观察到舵机的角度变化,18路舵机Protues仿真如图3所示。
2.4 避障模块 六足机器人避障模块采用2个E18- D50NK光电式传感器,放置于六足机器人的左前和右前处。此传感器共有三个引脚,分别为VCC、GND、OUT。其中VCC接4.5V-5V电压,OUT为输出信号,常态为+5V高电平,遇到障碍时会产生低电平。通过51单片机不断的检测IO口的状态来判断前方是否有障碍物,并选择避开方式。
2.5 无线遥控模块 六足机器人采用点动方式MX-J05V无线遥控的模块,遥控器有4个按键,该模块的D1D2D3D4为数据位,接到51单片机的IO口上,常态为低电平,按下按键,对应数据位变为高电平。
2.6 串口通信模块 串口通信采用PL2303模块,该模块为一种高度集成的RS232-USB接口转换器,可以将上位机发送给COM端口的信号转换为TTL电平,使51单片机能够接受PC机发送的数据。
2.7 下位机接收上位机数据模块 上位机与51单片机的通讯,采用串口通讯方式,中断流程如图4所示。上位机发送5个字节的报文来传递给下位机数据,其中控制18个舵机5个字节报文包括起止符的“#”“控制位”“舵机号”“舵机角度”“$”。下位机将接受到的数据储存在结构体中,当接收到“$”时,对储存的结构体数据进行处理,并做出相应的响应[5]。
3 上位机设计
通过上位机设计可扩展六足机器人的运动形式。上位机采用C#编程语言,实现控制串口的打开和关闭、用serialport设置端口属性、发送字符指令控制六足机器人的功能。
3.1 设置端口属性
结合serialport属性,编写了串口通讯的代码。
串口设置码:
①打开串口
serialPort1.Open();
②设置串口号,波特率,校验位,数据位,停止位
serialPort1.PortName="COM1";
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.Parity=System.IO.Ports.Parit.None;
serialPort1.StopBits=System.IO.Ports.StopBits.One;
③运用write函数发送数据
3.2 无线遥控、避障模式、行走模式的实现 此三类模块的实现均为直接打开串口,向下位机发送相应指令,控制下位机发出相应动作指令。
3.3 舵机控制模块的实现 采用滑块控件,每个滑块位置对应0~255个字符,每次鼠标对滑块的滑动,上位机即通过串口发送相应报文信息。下方插入一个18列的表格,可将当前滑块的位置添加到表格里,可以通过选中一行或者几行,然后点击发送键,将18个舵机位置一次发给下位机,来实现动作的编写与控制[6]。
在此功能完成中,核心代码主要为重新定义一类write函数,由新函数完成具体数据发送,示例:
将数据依次取出
serialPort1.Write(buffer,0,21);
发送
Write(Convert.ToChar(0×04),jiao);
4 结论
本文设计了一种基于51单片机的六足机器人控制系统,研究结果表明:①采用3×6法控制舵机既能实现对多路舵机的控制又能保证PWM信号的精度;②六足机器人由于自由度多,结合上位机对舵机的控制,可以完成除了行走外很多复杂的动作,比如可以在键盘上打字,可以越过一定高度的障碍物;③六足机器人运用了51单片机的I/O口控制、定时器中断、串口中断等功能,所以也可以作为单片机教学的一个实践。
热门排行
推荐信息
期刊知识
- 2025年中科院分区表已公布!Scientific Reports降至三区
- 官方认定!CSSCI南大核心首批191家“青年学者友好期刊名单”
- 2023JCR影响因子正式公布!
- 国内核心期刊分级情况概览及说明!本篇适用人群:需要发南核、北核、CSCD、科核、AMI、SCD、RCCSE期刊的学者
- 我用了一个很复杂的图,帮你们解释下“23版最新北大核心目录有效期问题”。
- 重磅!CSSCI来源期刊(2023-2024版)最新期刊目录看点分析!全网首发!
- CSSCI官方早就公布了最新南核目录,有心的人已经拿到并且投入使用!附南核目录新增期刊!
- 北大核心期刊目录换届,我们应该熟知的10个知识点。
- 注意,最新期刊论文格式标准已发布,论文写作规则发生重大变化!文字版GB/T 7713.2—2022 学术论文编写规则
- 盘点那些评职称超管用的资源,1,3和5已经“绝种”了