RoboMasters机器人比赛开发板设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RoboMasters机器人比赛开发板设计
摘要
机器人技术是当今世界的主流尖端科技,在未来的几年内全球机器人会呈现井喷式增长,而中国会成为全球最重要的市场。

来自全国各地的大学生怀着对机器人的梦包括他们参加各种机器人比赛的经验历在深圳市大疆科技有限公司的资助下开始了RoboMasters项目。

2014年,RoboMasters全国大学生机器人大赛进行了全面的升级,将比赛形式初步定为参赛双方各自制造多台战车,在一个复杂的领域中相互匹配,最终由裁判系统来判断结果。

2014年11月,中国机器人大师全国机器人大赛正式成为全国大赛。

2015年5月至7月,RoboMasters全国大学生机器人大赛中国区预选赛正式打响。

作为全球首个工程技术和观赏价值相结合的机器人赛事,要求参赛选手对底盘、云台、发射机构、电机驱动等技术进行全面掌握,2015年也是我校第一次参加该比赛。

这次比赛中,我主要负责英雄车的机械结构和硬件电路的设计,而我设计的战车底盘是一个履带传动的机器人,而云台是一个二轴云台,云台上装有42mm的发射机构,除了发射机构外,底盘之上还设计了机械臂,用来实现一些特殊功能。

硬件部分我主要将若干功能模块集成在一起,并做了进一步的优化。

关键字:RoboMasters;云台发射机构;电机驱动;机械设计
RoboMasters robot competition development
board design
Abstract
Robotics is the mainstream and cutting-edge technology in today's world. In the next few years, there will be an explosion of robots around the world, and China will become the most important market in the world. University students from all over the country began the RoboMasters project with funding from shenzhen DJI technology co., with a dream for robots including their experience in various robot competitions. In 2014, RoboMasters a comprehensive upgrade the national undergraduate robot competition, will form a preliminary as each side to make several tanks, competing in a complex field, the final judgment by the referee system competition. In November 2014, RoboMasters national college student robot competition qualification in China officially became a national competition. From may to July 2015, RoboMasters national college student robot competition China's qualification contest was officially launched. As the world's first engineering and ornamental value of the combination of robot competition, contestants on the chassis, yuntai, emission mechanism, such as motor drive technology to conduct a comprehensive grasp, 2015 is the first time to participate in the game in our school. This game, my car is mainly responsible for the hero of the mechanical structure and the design of the hardware circuit, and I design the vehicle chassis is a crawler drive robot, yuntai and yuntai is a two axis, with the launch of the 42 mm in yuntai, in addition to launch services, above chassis also designed the mechanical arm, is used to realize some special functions. In the hardware part, I mainly integrated several functional modules and made further optimization.
Key words: RoboMasters; cloud platform transmitter; Motor drive; Mchanical design
目录
1绪论............................................................................................................................... 错误!未定义书签。

1.1课题背景............................................................................................................ 错误!未定义书签。

1.2论文的研究任务与内容.................................................................................... 错误!未定义书签。

2 方案设计 (1)
2.1 机器人具备的基本功能 (1)
2.2 机器人各功能实现办法 (1)
3 硬件电路设计 (3)
3.1.机械臂控制板 (3)
3.1.1stm32f103最小系统(机械臂) (3)
3.1.2串口下载电路 (3)
3.1.3 底盘电机编码器接口 (4)
3.1.4 指示灯 (5)
3.1.5 步进电机驱动 (5)
3.1.6 电源电路 (6)
3.1.7 PCB 2D模型和 3D模型 (7)
3.2 驱动板 (7)
3.2.1stm32f103最小系统(驱动板) (7)
3.2.2串口下载电路 (8)
3.2.3机械臂步进电机接口 (9)
3.2.4底盘电机直流驱动 (9)
3.2.5夹具气泵驱动 (10)
3.2.6 PCB 2D模型和 3D模型 (11)
4 实际项目的应用于开发 (12)
4.1 机器人开发板应用 (12)
4.1.1 RM步兵机器人 (12)
4.1.2 无人超市上货机器人 (19)
4.1.3 多功能履带机器人 (20)
总结 (21)
参考文献 (22)
致谢 (23)
附录A (24)
附录B (31)
1绪论
2方案设计
2.1 机器人具备的基本功能
从RoboMasters机甲大师赛大角度来说,机器人得具备以下功能[1]:
1.具备可以移动的底盘
2.具备瞄准和射击17mm和42mm弹丸的云台
3.有机械臂,可以实现抓取功能
4.可以通过变形来适应各种地形
5.具备功率检测,可以实现功率闭环
6.具备17mm与42mm分离机构
7.支持多路PWM输出
8.SD卡槽
9.外接RM陀螺仪接口
2.2 机器人各功能实现办法
1.底盘靠4个直流电机来实现,所以开发板上得有4个以上直流电机驱动
2.机械臂可以靠带减速箱的大扭矩步进电机来实现,所以需要3个步进电机驱动
4.变形功能可以通过控制电磁阀来控制气缸来让机器人变形,所以需要多路PWM输出接口
5.功率检测可以通过单片机自带的AD DA接口来实现
6.17mm与42mm弹丸的分离也需要2个直流电机来实现
7.RM开发板为方便用户连接控制舵机等需要PWM控制的执行器,引出16路PWM,分别位于RM开发板的上边和下边。

三排排针依次用黑、红和蓝色标志,其中黑色连接GND,红色连接VCC5V OUT,蓝色连接8个通道的PWM信号,为防止烧坏主控芯片,每个PWM信号到管脚之间串联100R电阻,并并联双向芯片ESD到GND。

8.RM开发板为方便用户使用SD卡储存一些调试数据,开发板自带一个SD卡卡槽,用户可以根据具体需求自行选用。

9.RM开发板为满足用户外接陀螺仪的需求,开发板上设有一个CAN接口,用户可以外接CAN接口的陀螺仪模块。

3 硬件电路设计
3.1.机械臂控制板
3.1.1stm32f103最小系统(机械臂)
此模块在开发板中主要作用:做一些机械臂底层的驱动和控制,相当于机器人的小脑,上层控制是通过通信实现的,支持的通信方式有串口、I2C、CAN。

自带数模模数转化接口,可以实现功率闭环控制。

支持多个PWM输出,适合底部控制。

支持PWM输入模式,强输出模式,输出比较模式,PWM边缘模式,PWM中心模式[2]。

图3.1 MCU最小系统
3.1.2串口下载电路
此模块是用来实现给单片机烧写固件的,也可以用来通信。

CP 2102具有高集成度,内置USB2.0全功能空位周期,USB收发器、晶体振荡器、EEPROM和异步串行数据总线(UART),只支持调整权函数信号,不需要任何外部USB原件。

CP 2102在工作原理上与其他USBUART开关电路相似.通过驱动Chen序列,将计算机的USB接口虚拟为COM端口,达到了扩展的目的。

图3.2 串口下载电路
3.1.3 底盘电机编码器接口
此模块是将编码器的数据实时输入单片机,从而实现底盘电机的闭环控制,从速度环和位置环两个角度可以更好地控制电机。

该8位总线收发器是为数据总线之间的异步双通道通信而设计的.控制功能的使用可以使外部时序电路的要求最小化。

该电路可根据方向控制(DIR)输入逻辑级,将数据从A总线传输到B总线,或从B总线传输到A总线。

启用输入可以用于禁用此电路,使母线[3]-[5]之间能够有效隔离。

图3.3 底盘电机编码器接口
3.1.4 指示灯
此模块是用来显示系统状态的,不同的亮灯状态代表了开发板的不同状态,可以第一时间排查开发板的故障,并提示操作手如何排查故障和维修。

分类帐1和LED 2连接在分类帐1中,通过它们进行自我检查,然后分类帐1和LED 2的状态由分类帐1的状态提示。

图3.4 状态指示灯
3.1.5 步进电机驱动
此模块用来驱动步进电机,作为开环电机,步进电机的控制精度也是不错的,为拓展机器人的功能做了进一步的优化和集成。

我们使用的驱动器是双通道H桥电机驱动器,DRV 8711,步进电机控制器,使用外部N通道MOSFET驱动双极步进电机或两个刷直流电机。

集成了一种微步索引器,以支持整个步骤到1/256步长模式。

利用自适应消隐时间和多种不同的电流衰减方式,包括自动混合衰减模式,可以实现非常平滑的运动系统配置。

电机停止旋转报告一个可选的反电动势输出。

图3.5 步进电机驱动
3.1.6 电源电路
该电源可为底盘电机提供电源,也可为开发板提供5V和3.3V的电源。

我们使用的芯片是LM 2596。

LM 2596包括150 kHz振荡器、1.23V基准电压调节器、热关电路、限流电路、放大器、比较器和内部稳压器电路。

防止对设备造成过度电压损坏,电源输入端有双向TVS(SMAJ24CA动作电压26.7V到29.5V)。

电源输入端含有防反接电路,当电源正负极接反,该电路不工作[6]。

图3.6 电源电路
3.1.7 PCB 2D模型和 3D模型
以下是机械手控制板的二维模型和三维模型。

上述功能的集成性较好,其功能和稳定性在竞赛中得到了验证。

它的体积相对较小,功能更好,比官方开发委员会更便宜。

在电子工业中,硬件的稳定性直接影响到产品的质量,而硬件在竞争中的稳定性直接影响到竞争的结果。

因此,开发板的稳定性是至关重要的[7]。

图3.7 驱动板3D模型
3.2.驱动板
3.2.1stm32f103最小系统(驱动板)
此模块在开发板中主要作用:做一些机器人底层的驱动和控制,相当于机器人的小脑,上层控制是通过通信实现的,支持的通信方式有串口、I2C、CAN。

自带数模模
数转化接口,可以实现功率闭环控制。

支持多个PWM输出,适合底部控制。

支持PWM输入模式,强输出模式,输出比较模式,PWM边缘模式,PWM中心模式[8]。

图3.8 MCU最小系统
3.2.2串口下载电路
该模块用于单片机固件的刻录,也可用于通信。

CP 2102具有高集成度,内置USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM和异步串行数据总线UART,支持调制解调器的全功能信号,无需外部USB设备。

CP 2102在原理上与其他USBUART开关电路相似.通过驱动程序将PC机的USB接口仿真为COM端口,达到
了扩展[9]的目的。

图3.9 串口下载电路
3.2.3机械臂步进电机接口
图3.10 机械臂步进电机接口
3.2.4底盘电机直流驱动
此驱动可以对电机进行脉冲宽度调制来控制电机转速和转向,支持24V 36V输入,自带隔离防止电机反电动势击穿芯片。

BTS 7960是一种大电流半桥式高集成电机驱动芯片,具有P沟道高边缘MOSFET、N沟道低MOSFET和驱动IC.P通道高侧开关节省了电荷泵,从而降低了电磁干扰.集成驱动集成电路具有逻辑电平输入、电流诊断、斜率调节、死区时间产生、过温、过电压、欠压、过电流和短路保护等功能。

BTS 7960的典型在态电阻为16mΩ,驱动电流可达43A[10]。

图3.11 底盘直流电机驱动
3.2.5夹具气泵驱动
此模块也是对机器人的功能进行了进一步的拓展和集成,可以用于更多类型机器人比赛,也丰富了机器人的功能。

气泵驱动主要用来驱动小型气泵吸取一些物体并进行搬用。

S8050是一款小功率NPN型硅管,集电极-基极(Vcbo)电压最大可为40V,集电极电流为(Ic)0.5A。

S8050是电路硬件设计最常用半导体三极管型号之一。

图3.12 夹具气泵驱动
3.2.6 PCB 2D模型和 3D模型
以下是机器人驱动板的2D模型和3D模型,较好的集成了上述的功能,并在比赛中对其功能和稳定性进行了验证。

尺寸相对较小,相对于官方开发板功能更齐全且成本更低。

在电子行业,硬件的稳定性直接影响着产品的质量,在比赛中硬件的稳定性直接影响着比赛的成绩。

所以一个开发板的稳定性是至关重要的。

图3.13 驱动板3D模型
第4章实际项目的应用于开发4.1 机器人开发板应用
4.1.1 RM步兵机器人
图4.1 RM步兵机器人
代码如下:
void motor_init(void)
{
PWM_Configuration();
motor_gpio_init();
// MOTOR_LF_DIR_FOR(); MOTOR_LF_SPEED_SET(1000);
// MOTOR_RF_DIR_FOR(); MOTOR_RF_SPEED_SET(1000); // MOTOR_LB_DIR_FOR(); MOTOR_LB_SPEED_SET(1000); // MOTOR_RB_DIR_FOR(); MOTOR_RB_SPEED_SET(1000);
// MOTOR_LF_DIR_REV(); MOTOR_LF_SPEED_SET(0);
// MOTOR_RF_DIR_REV(); MOTOR_RF_SPEED_SET(0);
// MOTOR_LB_DIR_REV(); MOTOR_LB_SPEED_SET(0);
// MOTOR_RB_DIR_REV(); MOTOR_RB_SPEED_SET(0);
MOTOR_LF_DIR_FOR(); MOTOR_LF_SPEED_SET(0);
MOTOR_RF_DIR_FOR(); MOTOR_RF_SPEED_SET(0);
MOTOR_LB_DIR_FOR(); MOTOR_LB_SPEED_SET(0);
MOTOR_RB_DIR_FOR(); MOTOR_RB_SPEED_SET(0);
}
void motor_calculate(s16 ch_vx, s16 ch_vy, s16 w)
{
w *= -1; //自转反向
// ch_vx *= -1; //左右反向
ch_vy *= -1; //前后反向
car.underpan.left_back = - ch_vx + ch_vy - w;
car.underpan.right_back = ch_vx + ch_vy + w;
car.underpan.left_front = - ch_vx + ch_vy + w;
car.underpan.right_front = ch_vx + ch_vy - w;
// 原函数解析式非此由于电机号码在接线时候错误,最后通过程序弥补,原函数为:
//
car.underpan.left_front = ch_vx + ch_vy - w;
//
car.underpan.right_front = - ch_vx + ch_vy + w;
//
car.underpan.left_back = - ch_vx + ch_vy - w;
//
car.underpan.right_back = ch_vx + ch_vy + w;
//
对应方程中前的变量为原定义
car.underpan.left_front *= 1.5;
car.underpan.right_front *= 1.5;
car.underpan.left_back *= 1.5;
car.underpan.right_back *= 1.5;
if (car.underpan.left_front>1000) car.underpan.left_front = 1000;
if (car.underpan.left_front<-1000) car.underpan.left_front = -1000;
if (car.underpan.right_front>1000) car.underpan.right_front = 1000;
if (car.underpan.right_front<-1000) car.underpan.right_front = -1000;
if (car.underpan.left_back>1000) car.underpan.left_back = 1000;
if (car.underpan.left_back<-1000) car.underpan.left_back = -1000;
if (car.underpan.right_back>1000) car.underpan.right_back = 1000;
if (car.underpan.right_back<-1000) car.underpan.right_back = -1000; }
void motor_output(void)
{
if (car.underpan.left_front>0)
{
MOTOR_LF_DIR_FOR();
MOTOR_LF_SPEED_SET(car.underpan.left_front);
}
else
{
MOTOR_LF_DIR_REV();
MOTOR_LF_SPEED_SET(1000 - car.underpan.left_front);
}
if (car.underpan.right_front>0)
{
MOTOR_RF_DIR_FOR();
MOTOR_RF_SPEED_SET(car.underpan.right_front);
}
else
{
MOTOR_RF_DIR_REV();
MOTOR_RF_SPEED_SET(1000 + car.underpan.right_front); }
if (car.underpan.left_back>0)
{
MOTOR_LB_DIR_FOR();
MOTOR_LB_SPEED_SET(car.underpan.left_back);
}
else
{
MOTOR_LB_DIR_REV();
MOTOR_LB_SPEED_SET(1000 - car.underpan.left_back); }
if (car.underpan.right_back>0)
{
MOTOR_RB_DIR_FOR();
MOTOR_RB_SPEED_SET(car.underpan.right_back);
}
else
{
MOTOR_RB_DIR_REV();
MOTOR_RB_SPEED_SET(1000 - car.underpan.right_back);
}
}
#include "main.h"
#include "core_cm4.h"
extern RC_Ctl_t RC_Ctl;
extern u8 rc_flag;
int main(void)
{
RC_Init(); //USART2_Init
motor_init();
gun_init();
TIM3_Int_Init(168-1,100-1); // 10k
while(1)
{
if (rc_flag)
{
rc_flag = 0;
motor_calculate(RC_Ctl.rc.ch2-1024, RC_Ctl.rc.ch3-1024,
RC_Ctl.rc.ch0-1024);
motor_output();
gimbal_calculate(RC_Ctl.rc.ch1, RC_Ctl.rc.ch1);
gun_control(RC_Ctl.rc.s1);
}
}
}
此机器人是RM步兵机器人,底盘是由4个麦克纳姆轮组成,可以实现全向移动,底盘之上由一个两轴云台,云台之上是17mm发射机构,具有视觉,可以实现自动瞄准射击。

该机器人有两种控制方式,可以通过遥控器来控制,也可将遥控器与电脑连接,然后通过鼠标键盘来控制电脑,底盘控制程序是靠一个麦轮的运动矩阵方程来实现。

接收机接收到xy值和w(旋转角度)然后传入MCU,通过MCU将其转化为对应电机的PWM值,该值输入到电机驱动中就可以控制电机转动,从而实现底盘的移动。

4.1.2 无人超市上货机器人
图4.2无人超市上货机器人
此上货机器人底盘靠麦轮来传动,底盘之上有一个机械臂,机械臂靠4个有减速箱的步进电机来控制,可以实现搬运货物与上货,可以联网进行远程控制,地盘上安有激光雷达,可以实现地图构建,从而进行地图导航。

4.1.3 多功能履带机器人
图4.3多功能履带机器人
此履带机器人可以通过一些路面比较复杂的地形,底盘之上有一个两轴云台,可以在上边挂载单反进行移动拍摄,也可挂在机械臂进行一些特定的抓取,而在robomaster比赛中担任过英雄车,可以发射42mm弹丸。

可以翻越资源岛的立柱区。

总结
本次毕业设计是关于RM机器人开发板的设计,它是针对机器人比赛设计的,开发板有直流电机的接口,用来做为底盘电机的控制,用几个步进电机的接口,可以做一些步进电机控制,上边的编码器接口是用来做电机的闭环控制,本次的毕业设计不只是对我的技能磨炼,更是对我知识的全面考察。

从制作开始到完成制作,我想我已经获得了很多能力。

我不不但在理论上有了很大的提升,而且我也对自己的知识技能有了客观的认识。

本文首先说明了整个系统的工作原理和实现方法,给出了系统工作的总体框图。

在此基础上,介绍了系统设计中各模块的功能特点,提出了几个解决方案并进行比较,并选择了性能最好的。

总而言之,此毕业设计相对比较成功,达到预期的设计标准。

我不但学到了诸多从书本上中无法学到的知识与技能,而且还提高了大脑的思辨能力,丰富了他们对创新和创造力的探索。

由于我缺乏很多理论和实践,思想的构架和功能的实现办法都存在很多缺陷。

请老师批评和纠正我。

设计结束了,但学习仍在继续。

从毕业论文的设计中,我真正认识到,在未来的
学习中,我们必须结合理论和实践,运用我们所学到的理论知识来实践。

实践是检验
真理的唯一标准。

这尤其适用于我们的电气专业学习。

我们不仅要有丰富的理论知识,还要有较强的动手能力。

只有理论和实践才能提高专业水平。

这是毕业设计中最大的
收获。

今后,我们将继续更新和补充我们所学到的知识。

参考文献
[1] 强彦,叶文鹏,屈明月,赵涓涓.基于红外避障的智能小车的设计[J].微电子学与
计算机,2013,30(02):140-143.
[2] 赵津,朱三超.基于Arduino单片机的智能避障小车设计[J].自动化与仪
表,2013,28(05):1-4.
[3] 林碧琴. 基于单片机的智能避障小车的设计和制作[J].电子测试,2013(15):60-
62.
[4] 顾群,蒲双雷.基于单片机的智能小车避障循迹系统设计[J].数字技术与应
用,2012(05):23.
[5] 顾志华,戈惠梅,徐晓慧,廉美琳,张金龙.基于多传感器的智能小车避障系统设
计[J].南京师范大学学报(工程技术版),2014,14(01):12-17.
[6] 张伟,邢玉秀,曹义,张怡.超声波智能避障小车系统设计[J].电子技术与软件工
程,2014(01):261.
[7] 胡晓芳.基于AVR单片机的智能避障小车设计[J].自动化技术与应
用,2014,33(06):95-97+111.
[8] Wan Zhen Zhou,Zhe Li. Design of Intelligent Fire Truck Based on STC80C51[J].
Advanced Materials Research,2013,2649(791).
[9] Yu Zhu,Zhe Xin Han,Peng Kun Sun,Tian Hao Wang,Yin Han Gao. Research on
the Design of Intelligent Obstacle Avoidance Car Model Based on Ultrasonic Wave[J]. Applied Mechanics and Materials,2014,2850(461).
[10] Ming Jiang,Jian Min Zhang. Design of Intelligent Obstacle Avoidance Car
Based on FPGA[J]. Applied Mechanics and Materials,2014,3365(602).
致谢
时光荏苒,岁月如梭。

历时半载的论文即将走向完结。

凤凰涅槃需要历经烈火的煎熬和痛苦的考验。

从一开始论文选题的迷茫,到写开题报告的彷徨、直至论文初稿的编写并反复修改,最终到最后的定稿,这从中经历了痛苦、聒噪、喜悦等各种各样复杂的心情。

然而,在我们一度觉得论文简直就是一项不可能完成的任务时,我们却在不知不觉中就完成了人生中最大的一次成就。

论文这一次经历,不只是一次学术的研究,这彰显着对四年来学习的知识的运用,更多的是一次人生中的一次历练,自己从论文的选题开始就一直亲力亲为,亲身融入在调查研究去,收集资料,累积经验,发现问题并找出解决对策,这都是一种磨炼。

让我能在以后的工作学习中不畏艰难,勇于攀登。

我要感谢我的指导老师,从选题,修改,到最后的定稿,都离不开指导老师的悉心教导。

在完成论文的过程中,曾经感到过迷茫,不知所措,老师是我前进路上的明灯。

正是他的教诲,他的鞭策,让我养成了严谨、踏实的求学态度,这将是一笔受用终身的财富。

感谢我的父母,在我的求学路上一直支持着我,默默地为我奉献,请让我跟你们说一声辛苦了,我的父亲母亲。

最后,感谢我的母校,我的所有老师,舍友以及同学,大学四年终生难忘。

附录A
驱动程序
void motor_init(void)
{
PWM_Configuration();
motor_gpio_init();
// MOTOR_LF_DIR_FOR(); MOTOR_LF_SPEED_SET(1000); // MOTOR_RF_DIR_FOR(); MOTOR_RF_SPEED_SET(1000); // MOTOR_LB_DIR_FOR(); MOTOR_LB_SPEED_SET(1000); // MOTOR_RB_DIR_FOR(); MOTOR_RB_SPEED_SET(1000);
// MOTOR_LF_DIR_REV(); MOTOR_LF_SPEED_SET(0);
// MOTOR_RF_DIR_REV(); MOTOR_RF_SPEED_SET(0);
// MOTOR_LB_DIR_REV(); MOTOR_LB_SPEED_SET(0);
// MOTOR_RB_DIR_REV(); MOTOR_RB_SPEED_SET(0);
MOTOR_LF_DIR_FOR(); MOTOR_LF_SPEED_SET(0);
MOTOR_RF_DIR_FOR(); MOTOR_RF_SPEED_SET(0);
MOTOR_LB_DIR_FOR(); MOTOR_LB_SPEED_SET(0);
MOTOR_RB_DIR_FOR(); MOTOR_RB_SPEED_SET(0);
}
void motor_calculate(s16 ch_vx, s16 ch_vy, s16 w)
{
w *= -1; //自转反向
// ch_vx *= -1; //左右反向
ch_vy *= -1; //前后反向
car.underpan.left_back = - ch_vx + ch_vy - w;
car.underpan.right_back = ch_vx + ch_vy + w;
car.underpan.left_front = - ch_vx + ch_vy + w;
car.underpan.right_front = ch_vx + ch_vy - w;
//原函数解析式非此由于电机号码在接线时候错误,最后通过程序弥补,原函数为:
//
car.underpan.left_front = ch_vx + ch_vy - w;
//
car.underpan.right_front = - ch_vx + ch_vy + w;
//
car.underpan.left_back = - ch_vx + ch_vy - w;
//
car.underpan.right_back = ch_vx + ch_vy + w;
//
对应方程中前的变量为原定义
car.underpan.left_front *= 1.5;
car.underpan.right_front *= 1.5;
car.underpan.left_back *= 1.5;
car.underpan.right_back *= 1.5;
if (car.underpan.left_front>1000) car.underpan.left_front = 1000;
if (car.underpan.left_front<-1000) car.underpan.left_front = -1000;
if (car.underpan.right_front>1000) car.underpan.right_front = 1000;
if (car.underpan.right_front<-1000) car.underpan.right_front = -1000;
if (car.underpan.left_back>1000) car.underpan.left_back = 1000;
if (car.underpan.left_back<-1000) car.underpan.left_back = -1000;
if (car.underpan.right_back>1000) car.underpan.right_back = 1000;
if (car.underpan.right_back<-1000) car.underpan.right_back = -1000;
}
void motor_output(void)
{
if (car.underpan.left_front>0)
{
MOTOR_LF_DIR_FOR();
MOTOR_LF_SPEED_SET(car.underpan.left_front);
}
else
{
MOTOR_LF_DIR_REV();
MOTOR_LF_SPEED_SET(1000 - car.underpan.left_front); }
if (car.underpan.right_front>0)
{
MOTOR_RF_DIR_FOR();
MOTOR_RF_SPEED_SET(car.underpan.right_front);
}
else
{
MOTOR_RF_DIR_REV();
MOTOR_RF_SPEED_SET(1000 + car.underpan.right_front); }
if (car.underpan.left_back>0)
{
MOTOR_LB_DIR_FOR();
MOTOR_LB_SPEED_SET(car.underpan.left_back);
}
else
{
MOTOR_LB_DIR_REV();
MOTOR_LB_SPEED_SET(1000 - car.underpan.left_back); }
if (car.underpan.right_back>0)
{
MOTOR_RB_DIR_FOR();
MOTOR_RB_SPEED_SET(car.underpan.right_back);
}
else
{
MOTOR_RB_DIR_REV();
MOTOR_RB_SPEED_SET(1000 - car.underpan.right_back);
}
}
#include "main.h"
#include "core_cm4.h"
extern RC_Ctl_t RC_Ctl;
extern u8 rc_flag;
int main(void)
{
RC_Init(); //USART2_Init
motor_init();
gun_init();
TIM3_Int_Init(168-1,100-1); // 10k
while(1)
{
if (rc_flag)
{
rc_flag = 0;
motor_calculate(RC_Ctl.rc.ch2-1024, RC_Ctl.rc.ch3-1024, RC_Ctl.rc.ch0-1024);
motor_output();
gimbal_calculate(RC_Ctl.rc.ch1, RC_Ctl.rc.ch1);
gun_control(RC_Ctl.rc.s1);
}
}
}
附录B
图B1 步进电机驱动
图B2 MCU最小系统
图B3 串口下载电路
图B4 气泵驱动
图B5 编码器接口
图B6 电源电路
图B7 驱动板PCBtop
图B8 驱动板PCBbottom。

相关文档
最新文档