本文基于RoboMaster比赛的需求编写的电控入门,其中难免存在错漏之处,后续会持续补充完善
电控简介
电控在RoboMaster里面主要的工作是完成机器人的硬件设计与接线,以及底层软件(或者我们一般指的是单片机上运行的软件)设计。硬件部分主要设计单片机主控电路板、用于接线接口的电路板、功率部分的超级电容相关的电路板,以及各个各种硬件模块间的接线。软件方面下至处理机器人中各种传感器数据的读取、各种执行器的输出、模块间的通信,上至信号处理算法,控制算法等设计。电控组在RoboMaster里面起到承接软硬件之间的作用,负责的工作也比较广,所需能力需要较为全面。
本文旨在给出一篇尽可能完整全面的指南,但对于具体全部技能和知识的掌握不要求全面,多数人在某些技能上能够做到一定深度已经可以是合格的电控成员
基础理论
以下学科或知识可以说是电控组工作的入门门槛,掌握的程度直接决定电控工作水平的上限。这部分课程如果学校的专业学习里面有的,请抓住机会认真学,没有的可能需要自己找书或者看视频学。列举的这些学科或知识按照顺序是从低级到高级,靠前的是电控工作最低要求的知识,越往后的要求越高,当然越低级的理论知识重要性越高:
- 英语
这一点需要单独拿出来讲。由于目前的现状是大部分优秀的技术它们的解释以及相关文档都是用英语表达的,包括下面列举的一些参考文档。若想要学习这些技术,英语的阅读理解能力就极为重要。当然对于电控来讲能够无障碍地阅读英文文档(也就是能够很轻松完成考试里面的阅读理解)就已经足够了,并不要求实际其他的英语能力需要非常高。 - C/C++与Python/Matlab
最基础的软件技能,C/C++主要是对于STM32等单片机或嵌入式系统的编程,而Python/Matlab则用于对算法仿真方面 - 电路分析基础
这个应该不用多解释,主要了解常见的电路分析方法,可以说是硬件设计中最通用的能力之一 - 模拟电路/数字电路
模拟电路主要了解常见的信号处理电路与功率电路与其实际应用,例如运放放大与滤波电路,电源电路等,这些在实际硬件设计中会相当频繁地出现,硬件方向的成员应该要十分重视。数字电路的作用在这里看来主要为后续的嵌入式软件逻辑设计打下基础,毕竟其本质也是数字逻辑。 - 信号与系统/数字信号处理
这个主要是偏理论分析方面的内容,在硬件里主要涉及滤波器的设计等信号处理电路的分析,当然针对数字信号方面的主要是在编写软件算法方面的应用,例如各种数字滤波器算法。 - 自动控制原理
只要带“控制”两个字的基本上绕不开自动控制原理,包括机器人的控制算法(云台、底盘等控制),电源输出的控制等,可以说机器人大部分的执行机构的理论分析和实际应用算法都离不自动控制原理。 - 数学
如果数学基础优秀是再好不过了,因为实际上能够理解算法的原理并独立开发算法的所有基础就在于数学,在于本科学的高等数学,概率论,线性代数等,当然很多时候给出一个算法至少知道如何实现并调参也能应付研发,但是像这样要求创新能力的竞赛还是建议好好学数学
技能
安全
这个需要单独列出来,因为这部分培训的内容往往很多时候都被我们忽略。即使后面提到的工作几乎不存在什么危险性,但还是有几点安全守则需要注意的:
电机运行安全
对于机器人调试来讲,最容易出现意外伤害的就是调试过程中对电机的失控。从设计上来讲需要有一定的急停措施,例如遥控器某个挡位是用于中值机器人所有的运动,以便及时制止运动。另外一般调试中存在较大危险的是底盘运动调试,在落地之前除了保证功能完善还要做好失控时的保护措施工具使用/用电安全
用电安全的培训应该较为普遍,但是工具的使用例如焊接中的高温也存在造成伤害的危险,这个是硬件制作过程需要注意的
硬件
焊接元件与线路
这一点是纯动手的技能,技巧性的内容大部分靠实际操作获得PCB电路板设计
目前硬件上的线路连接都是在印刷电路板(PCB)上完成的,我们需要将设计出的PCB交给厂商加工后获得线路板并完成焊接得到电路成品。设计工具我们一般称之为EDA,最基础的功能就是完成原理图和板图的绘制。按照我个人的使用经验来讲,主要推荐使用立创EDA,Kicad以及Altium Designer。三者的功能均能够满足我们目前的EDA功能要求,但是三者的软件稳定性按照列举顺序从低到高。- 立创EDA专业版-使用教程 立创EDA使用教程
- Getting Started In Kicad Kicad使用教程
- Altium Designer - Getting Started with PCB Design Altium Designer官方画板教程
PCB设计笔记
另外由于加工商的不同及其本身的政策变化,将文件提交至加工商并得到PCB实物的具体工作流请去问身边有过制作线路板经验的人
元器件选型
数据手册阅读How to Read a Datasheet
运放选型基础Understanding Operational Amplifier Specifications
MOSFET参数解释Infineon - Datasheet Explanation Update for Infineon’s Automotive MOSFETs模拟滤波器设计
去看模拟电路以及信号处理相关的书了解相关原理,针对有源滤波器的设计看《运算放大器权威指南》(Op Amps for Everyone),想要开箱即用的设计工具可以使用Ti的滤波器设计工具,根据设计的参数还需要进一步仿真验证开关电源设计
以下是关于开关电源书籍和文档推荐,重点关注设计方法,即电源的设计流程是怎样的。而如果想要了解原理则需要关注它们的分析方法是怎样的,例如稳态下我们经常提到的伏秒平衡和安秒平衡,模电的小信号模型等- Sanjaya Maniktala - Switching Power Supplies A–Z (Second Edition)
- Robert W. Erickson - Fundamentals of Power Electronics (Second Edition)
- Basic Calculation of a Buck Converter’s Power Stage 简单总结Buck降压的参数设计的Ti文档
- Understanding Buck Power Stages in Switchmode Power Supplies Buck降压的简化理论计算,包括稳态和小信号建模
在了解设计流程和分析方法之后,其他的设计细节可以通过看厂商的参考设计以及其他文档学习。在实际设计的时候也需要看一些类似的参考电路,观察他们设计的时候是怎么完成设计任务的,例如: - TI reference designs
- ADI - Reference Designs
除此之外还可以在RM论坛上找到一些相关的硬件开源设计进行参考,这里就不列举了
电路测试
这里就涉及到一些基础的工具的使用,包括万用表,信号源,示波器,直流电源以及电子负载等,大部分内容可见于模拟电路实验的课堂中,如果不熟悉的话也可查找教程学习
全国大学生电子设计竞赛——常用测试仪器的使用要领视频教学
电源设计小贴士 6:精确测量电源纹波 这种方法同样适用于微弱信号的直接测量
底层软件
工具使用(编译系统,STM32CubeMX)
这里采用主流单片机平台STM32,通过STM32CubeMX生成项目代码(包含外设驱动)在如Keil MDK或者STM32CubeIDE等环境下编译,使用烧录器/调试器烧录后即可在单片机上运行对应的程序。烧录器/调试器是一个可以接入PC的硬件设备,目前使用的主要有STLink,开源的CMSIS-DAP,以及Jlink
STM32CubeMX for STM32 configuration and initialization C code generation
STM32CubeIDE quick start guide
RoboMaster A板下的STM32CubeMX应用代码阅读与理解
这个能力实际上就是英语与C/C++的功底。在完成C/C++基础的学习之后,就必须阅读具体的机器人的代码,包括我们用的以及官方提供的开发板例程- RoboMaster A型开发板例程
- RoboMaster C型开发板例程
同样应该还要阅读其他优秀队伍开源的电控代码,例如: - 上交2019步兵代码
- 上交2020英雄代码
前者官方代码只是作为如何完成基础功能如电机控制的参考,后者其他队伍的代码则作为新方案代码如何确定的参考,例如其他队伍的飞坡在电控上有无对应的解决方案等
软件调试技巧
如何优雅地进行单片机调试
FreeMaster使用教程
配合OpenOCD的RTT使用Trice日志库
STM32开发技巧传感器信号读取
Robomaster开发板C型IMU驱动踩坑记录各种模块的通信、协议制定
数字滤波器设计与实现
关于数字滤波器设计
如何理解Kalman滤波控制算法(PID/LQR)编写与调试
Matlab辅助PID调参IMU相关算法编写与调试
IMU | 原理与选型
IMU | 误差模型与校准
IMU | 姿态解算算法概述
IMU | 算法设计实践:基于四元数的解算
IMU | 算法设计实践:基于DCM的解算
运营管理
代码版本管理(Git)
Git代码管理使用器件库存管理(有源/无源电子器件,接线,接口等)
常见采购商(国内)立创商城,云汉芯城,TB门店
常见采购商(国际)得捷电子DigiKey,E络盟Element,贸泽电子Mouser,艾睿电子Arrow培训体系建设
如上所见,本文也是培训体系建设中的一环。只不过培训的方式是通过提供比较松散的文档给自学者帮助,实际上本文的每一小节均可以严格编排为一堂堂课(当然除了现场教学我见到的有以视频的形式的)。技术文档编写
目前从格式上看大概就这两种
解决问题的的技术文档
简单描述一个解决问题的过程,至少包括:- 问题现象(描述已知的可观察到的现象,注意包含背景与测试条件)
- 原因分析(解释原理)
- 解决方案
例子:解决哨兵云台莫名其妙抖动问题 | 搬砖笔记
调试操作的技术文档
这个一般是与文档配套的代码,基本内容是单个功能的原理以及如何调试- 整体概述
- 功能概述
- 实现细节描述
- 关键参数
- 调试步骤
具体可以参考其他项目的额文档5. 模块功能 ISPTuningGuide master 文档
设计思想
- 层次导图
导图适用于2022年RoboMaster的技术,仅供参考,实际根据比赛规则以及创新性的技术出现有可能会有巨大差异
这张图的作用是用于分解电控整个系统为多个子模块,在初入门的时候学习都是以这些模块展开。除了硬件方向的成员之外,一般正常的学习过程都是在硬件之上的模块一步步往上走,从最基本的STM32如何编写,再到各个执行器和传感器的输入输出,然后再学习调试这些模块组成的一个小的子系统例如云台,底盘等。最终学习的目标是能够开发调试整台机器人,并且机器人上出现任何问题都能马上反应出是哪个模块可能出现异常