/RoboMaster-Hardware-Group-Learning-Path

此仓库作为本人用以记录在RM硬件组的学习过程和文档分享。欢迎各位提交issue发表自己的看发。

Creative Commons Zero v1.0 UniversalCC0-1.0

RoboMaster硬件组学习路线指南

RM硬件组QQ交流群:826872833

本篇文章旨在为RM硬件组入门学习,以及对新人培训提供参考。

硬件组的职能

RoboMaster硬件组的职能一般有以下几点:

  1. 绘制分电板;
  2. 对遥控器、电池等设备进行检修和维护;
  3. 低成本自制利于调试或者高性能的模块。如:陀螺仪、无线下载器;
  4. 制作能量机关;
  5. 制作超级电容模块(电容组+控制板)。

也会有部分队伍的电控工作内容包含以上几个方面的,本篇文章也具有一定参考价值。

接下来要对以上内容分点进行解析:
  1. 绘制分电板,需要熟悉车子上常用的通信的走线和多设备连接结构,常用的通信协议有:CAN、RS485、USART;熟悉PCB绘制软件的基本操作和概念:原理图、符号、封装、PCB、设计规则、铺铜、差分线;对PCB铜箔的载流能力有一定了解(可以通过工具来计算);

  2. 对遥控器、电池等设备进行检修和维护。这个一般来说,拆开看看哪里坏了换哪里就好了,需要了解一些检修知识,和焊接技能。像遥控器摇杆一般是滑动变阻器测测阻值对不对、拨杆是多段开关测测能不能导通、天线断了就买一根(好像是2.4G频率的)、电池不好使就换电池、找不出毛病就刷固件;TB47电池的话参考这篇文章

  3. 这里分享几个项目:GY-H1六轴IMUWCH32+Lora高速无线DAPlinkESP32无线DAPlink临时电池架迷你CH343P USB转串口

  4. 能量机关只有准备超级对抗赛的队伍才会用到,此部分需要跟电控机械进行配合制作,具体分工看各自安排。硬件所需要掌握的知识:单片机引脚的功能(不一定要会用单片机,但是要知道他能干啥、怎么画图走线)、WS2812(SK6812)布线方式(主流方案)、三色LED调光原理、灯板和主控板的绘制、触发方案的选择和原理等等,如果要负责代码的话还要学单片机的简单使用。

  5. 超级电容模块对于步兵1V1、高校联盟赛以及超级对抗赛都适用,在比赛中灵活使用超级电容也有不容小觑的效果。制作超级电容模块的危险性可与无人机试飞、机械机加工相提并论,没有扎实的基础知识的不要轻易尝试。如今超级电容控制板趋向于数字化,利用模拟器件搭建难度较大,不适用于RM的应用场景。数字超级电容控制板需要掌握简单的C语言使用,STM32定时器、PWM、ADC的使用(跟电控沟通使用哪一种通信方式,如CAN、USART然后学习如何使用),Buck、Boost、Buck-Boost三种常见DCDC拓扑的原理,运算放大器的三种放大电路(同相放大器、反相放大器、差动放大器),MOS管的开关及其驱动原理。

超级电容模块的制作看起来要学的东西很多很难,但是其实一点也不少,也不简单。不过对于RM来说,通常都是老学长做好了,传承下来给学弟进行维护(没有的话,就加油),如果是大二当主力的队伍,大多数新生只有一年的学习时间,很难有人能够在第二年对超级电容的相关知识有深入的学习,更多的是通过抄开源,调试维护学长的板子等方式完成一个超级电容模块的制作(因为比赛就在眼前,你做不出来,队伍也没必要留着你),负责任的老学长通常会在两三年的学习,甚至毕业之后,独立地设计出一款满意的超级电容模块。RM每年的规则修改对硬件组几乎没有影响,只要把学长留下的东西学透,试着进行改进,并且传承下去就可以了。

写在前面:欢迎来到进度至上的RM

  凡是学什么都要学会自己找资料进行学习,硬件组要学的东西也没有很杂,总的方向是电力电子技术方面的知识,细分就是DCDC开关电源,像交流电,隔离电源这种不需要掌握。本篇文章只是类似于一个大纲,给予你学习路线上的规划,细致的内容会对网上的教程进行推荐,学不明白就自己去找相关知识,或者问人。

就以我的学习经历以及看到的现象来说,很多新人遇到的一个比较严重的问题是,学了一点东西之后,知道一块积木的作用,另一块是另一个作用,却不知道两个积木拼起来可以有别的作用,或者以此来创造更多的积木。意思就是,学了两样东西,不知道如何将这两样东西结合起来做成另一种东西,就是缺少多方面知识融合的意识,好像也没有人告诉新人将这些知识结合起来(可能都觉得这是理所当然的事?)。造成这个问题的因果是什么?感觉没有丰富的阅历也很难有发散的思维,不知道。

RM新生第一年入队培训的首要任务,是快速入门,快速学会如何使用所学的知识,并且接手学长的工作,做不到这些,你钻研的再深,跟不上进度也白搭

第一章:C语言

建议视觉、电控、硬件新生第一次培训统一进行学习,我队的规划是10月一个月,至于怎么学,我这边是视觉在负责,然后根据志愿,硬件降分录取。

  我认为硬件需要掌握的内容有:基础数据类型,运算符,数组,if、while、for,代码的运行逻辑以及简单算法,稍微了解指针和结构体(看到知道是什么)就差不多了。
  推荐个菜鸟教程吧。

间章:成为焊武帝

这个说实话,我也不知道应该放在哪里比较好,不过考虑到后面基本都要自己来焊板子,感觉一开始就学会好一点。(大概花个一周时间?一个人一天怎么也能焊好了)

  焊板子,在淘宝上统一购买那种什么“焊接练习板”50个贴片元器件左右,带SOT、SOP、LQFP、0603电阻电容二极管就好了。
焊接教程视频

不需要自己买工具,直接找学长借用实验室的(毕竟你在宿舍也不方便弄这些)

第二章:STM32单片机(CubeMX,HAL库)

请不要问为什么不学51单片机,请先想想为什么要学51单片机
STM32不难,重在实践,不建议使用仿真的方式进行学习,我感觉给两个月的时间就差不多了,也就是大一上把这部分内容学完应该是没问题的。

  STM32作为一种工具,我们学习的是如何去使用它,而不是学习他的结构和原理。就像开车,你知道要先启动,挂挡踩油门才能走,扭方向盘可以拐弯,而不用关注这个车子发动机怎么工作,方向盘怎么实现拐弯。

如果你对他感兴趣,可以自己深入学习,对于RM,以及初学者而言这些底层知识晦涩难懂,容易劝退,而且对现阶段的学习、使用也没有明显的帮助。

  STM32CubeMX是一种图形工具,通过分步过程可以非常轻松地配置STM32微控制器和微处理器,以及为Arm® Cortex®-M内核或面向Arm® Cortex®-A内核的特定Linux®设备树生成相应的初始化C代码。这是ST对CubeMX的简述,CubeMX可以使用HAL库函数生成你在CubeMX中配置的对应的初始化代码,从而让开发者忽略底层的配置,而将重心放在应用层的开发中,极大提高了开发的便捷程度和效率,所以现在使用STM32就只需要学习如何使用CubeMX对你所需要的功能进行配置(由于是图形化的,只需要动动鼠标就能完成),以及HAL库中包装好的用于实现单片机各种功能的C语言函数即可。
  以我在RM硬件组的工作来说,工作重心在超级电容模块(控制板+电容组)。其中超级电容控制板需要用到的STM32相关的知识有:

  • GPIO
  • 中断
  • 定时器
  • PWM
  • ADC

  作为入门学习,只需要掌握如何配置以及使用即可,过后进阶学习再深入
  这一部分需要培训负责人提前准备好相应的培训开发板,不要使用市面上的成品开发板,又贵又臃肿。开发板用尽量便宜的芯片,如STM32G030F6P6这种两块钱一片,搭配按键、LED、滑动变阻器,板载一个CH552做DAPlink下载器就能够满足上述学习要求了(板子打回来让学弟焊,焊接难度也不大,最终成本不超10元)。
  有一定基础或者学习能力比较强的,如果你还没有板子,就可以提前找学长要板子来做(或者自己学着做一个)。非常不建议自己去买那种什么《入门套件》,带什么什么传感器的一大堆割韭菜的东西,对于RM硬件组来说,90%的东西都用不上,他那些所谓的套件,是为了迎合他们配套的教程来进行学习的,实际上看着内容很多,但是本质上就是给你个例程,你抄一遍,跑起来了,你就觉得你学到了。虽然它能起到一点丰富知识的作用,但是没必要花这个冤枉钱。

  在正式开始学习STM32之前,除了C语言以外,还需要一点电路相关的基础知识:

  • 认识基本元器件(看得出来是什么东西就行)
  • 电源与地的概念(重要)
  • 电路图怎么看(知道他们的连接关系就行,不需要知道它的结构功能)
  • 万用表电压档的使用(高中都学过吧)
  • 建议跟第三章一起学

暂时想不到还有啥了

开发环境:
主流:Keil+CubeMX
新颖:CubeIDE
复杂?:VSCode/Eclipse+Cmake+GCC+CubeMX

软件怎么装就自己找教程

比较通俗的教程
深入一点的教程

  目前看到的比较好的教程就是这两个了。对于RM硬件组重点是学习GPIO、中断、定时器、PWM、ADC相关的CubeMX如何配置,以及HAL库对应的函数的用法;这些基础用法的配置无论STM32什么型号的单片机都是一样的,当你学会这些基础功能的配置和使用的时候,剩下的就靠你自己不断去丰富你的见识,多看看开源项目,了解这些功能具体能实现什么东西,以及他们之间的配合使用和技巧,从小项目做起,一点点堆砌成大项目(屎山)。

  在学习STM32的过程中,会遇到大量的陌生的名词,绝大多数情况下,你只要把它当作专有名词进行处理即可,因为这些词语是厂商对STM32某些功能给起的名字,是个代号、称呼。而你要关心的,是一些关键的设定参数,你要知道他应该设置成什么(做成笔记记下来,以后用多了就记住了)。

下面列举一些功能的实现:

  • 引脚输入/输出高/低电平,作为单片机最基础的功能,输入通常作为按键的检测,如:键盘,输出则用来点亮LED,如:LED点阵屏
  • 定时器,顾名思义,可以拿来定时。做时钟(要用RTC)、秒表、倒计时,或者是间隔一定时间来执行一段程序。
  • PWM(Pulse Width Modulation)脉宽调制,是依靠定时器来产生的,常用来做呼吸灯,搭配外围电路可以控制电机的转速、蜂鸣器发出响声,其本质都是调节占空比或者频率。
  • ADC(analog-to-digital converter)模数转换器,用于读取引脚上的电压值,大多数传感器都能间接或者直接引起电压变化,如:压力传感器、热敏电阻、热电偶、光敏电阻、霍尔传感器、加速度计等,这些能做什么得靠你的阅历和创造力。

你会使用单片机的某个功能很简单,难的是你需要思考做出一个东西需要用到单片机的那些功能,如何实现,这就依靠长期学习的经验积累和阅历了。
学完本章知识,可以试着编写一段程序:可以使用按键切换LED的的工作状态,呼吸灯或者闪烁。通过电位器改变电阻的大小来改变LED的亮度,或者闪烁速度、呼吸速度。

第三章:硬件知识

这部分知识的学习,如果可以利用寒假的时间进行学习,一个寒假基本就能稍微留个印象,能知道他们都有什么用,要用的时候知道怎么用就行。不仅需要认识这些电路的功能,还需要掌握他们如何与单片机进行结合,这是一个很重要的知识点,将这些电路与电路相结合,单片机才能发挥更强大的功能。

  很多人看到硬件、电路,脑子里第一个想到的肯定是模电、数电两座大山(更难的其实还有信号与系统、工程电磁场、电力电子技术)。但是,我认为,对于RM硬件组入门来说,这些东西全都是理论,且过于全面。对,没错,太过于全面、深入的东西对于RM硬件入门来讲,只会浪费时间,当你入门学习一两年,发现你对硬件的某些方面感兴趣,想要深入学习的时候,再去研读这些书籍我觉得是最好的选择(工科生最好上课要认真听,早学晚学都得学,除非你不从事这方面的工作)。
  我们入门学习的话,更多接触的是模电方面的知识,将我们需要用到的知识单独拿出来讲,我感觉不会对知识的理解的难度有太多的提升。这部分要学的基本就是一些有源器件的使用,以及各种经典的电路(知道这个电路能实现什么功能就行,后面会深入学习他的原理)。

现阶段,只需要关注芯片的耐压、封装和典型应用即可,后面再学习其他参数,对器件进行合理的选型。

第四章:嘉立创EDA

我推荐嘉立创EDA有以下几点:

  1. 不用安装,入门简单,器件库多(虽然管理得很烂);
  2. 嘉立创EDA每个月无门槛免费打次板(虽然每个月画20领通用券也不贵);
  3. 嘉立创EDA可以创建团队,方便共享工程、协作(再也不用基于群文件的版本控制了);
    然后有几个重要的概念:
  • 原理图:以抽象的符号直观反应电子元器件的电路连接的图纸;
  • 符号:使用一个具有统一规范的抽象图形对电子元器件进行表示;
  • 封装:电子元器件的引脚焊盘、器件外形在二维平面的投影,其中引脚排列顺序、引脚间距、器件规格都有统一的标准(只有少数的异形封装);
  • PCB:印制电路板,符号转换为对应封装之后,通过原理图的连接关系在封装引脚上有飞线展示出各个元器件的连接方式。需要对元器件以封装的形式进行布局,走线之后投递板厂进行打样。
      原理图通过各种芯片的数据手册典型应用缝合起来,符号和封装则通过芯片手册中厂家提供的数据进行绘制,一个元器件可能会有很多封装,画PCB的时候要注意符号绑定的封装是不是你想要的。