# 2024北航机器人队电控方向招新
**Repository Path**: Why7788/ElectronicControl
## Basic Information
- **Project Name**: 2024北航机器人队电控方向招新
- **Description**: 2024北航机器人队电控方向招新
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2024-07-11
- **Last Updated**: 2025-11-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 2024北航机器人队电控方向招新
## 写在前面
本测试题用于北京航空航天大学机甲大师Transistor战队电控组的入队考核过程,我们希望有更多的同学能够加入队伍,因此每周的考核将分为基础篇与进阶篇两部分,其中进阶部分的题目难度将会**略微**超过本科期间的**正常**知识范畴。
电控组分为偏**控制**和偏**硬件**两个两个,其中电控-控制主要负责整车的控制和调试工作,电控-硬件主要负责PCB电路板的设计绘制以及超级电容等关键电器元件的设计。在测试题中,会存在**偏控制或偏硬件方向**两个方向的题目,部分都需要学习,部分选做,请大家仔细阅读题目,并按照要求格式提交测试答案。最后考核结束后请大家根据自己的兴趣,**选择**自己想要加入的方向。
**请注意:**
1. 考核为期3周,每周都会发放一定数量的题目,**并要求在当周内提交**,提交时间将在**上一周末**与答题卡同步在群内下发。
2. 每个组别基础部分的题目要求**全部完成**,进阶部分的题目**不是必须全部完成**的,但为了我们能够更好的了解你的技术水平,请各位尽力而为。
3. 提交方法包括发送至邮箱、使用git提交等,不同考核题的提交方法会在每周任务发布的同时公布。请大家**按照规定格式提交**,以方便阅卷以及分辨报名方向(偏控制还是偏硬件)。
4. 编程类型的题目需要有一定的可读性,**并包含一定的注释**。
5. 了解其他组别的题目有助于各位更好地获取机器人方向的知识。
6. **不可互相抄袭!**如果我们发现有同学的提交内容高度雷同,**经查验发现有互相抄袭情况的存在,将取消考核资格!**我们在考核期**更看重的是面对问题和挑战的态度,是否具有一定独立的思考**,而非最后的结果。
初心高于胜负,希望各位能够加入Transistor战队!
——奠基人:**张天然**
## 第一周
### 基础篇
#### **软件安装**
在电控组的工作中涉及到单片机开发、C / C++ IDE以及PCB绘制相关的的软件,请参考网络上的资料,安装下列软件:
- **Keil**:
Keil为Arm系列的单片机提供了完整的开发环境,能够满足绝大多数Arm系列芯片的开发要求,并提供了成熟的代码编译、烧录与调试工具,建议在Keil官网([Keil Product Downloads](https://www.keil.com/download/product/))下载,注意下载**MDK-Arm Version 5.39**版本,并查找相关资料完成软件的激活。
- **CLion / VS Code**:
- 尽管Keil在嵌入式开发领域已经是一款足够优秀的软件了,但是它对自动折叠、代码补全、高亮等方面仍有所欠缺,尽管这些功能并不是必要的,但可以在很大程度上提升你的coding体验,此外CLion还是一款跨平台的IDE,支持CMake、clang、gcc、mingw等等,总之,CLion是一款十分好用的C / C++ IDE。软件需要在官网下载([CLion: A Cross-Platform IDE for C and C++ by JetBrains](https://www.jetbrains.com/clion/)),并可以通过申请学生优惠免费使用CLion。
- VS Code并不是一款IDE,它只是一款由微软开发的编辑器,但它的功能十分强大,可以用来写你在**Transistor队伍里**需要写的一切代码,此外它足够轻量化,支持远程开发与代码仓库管理。软件同样在官网下载([Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/))。
- **Altium Designer**:掌握基础的硬件电路的设计与制作也是电控组成员或者说嵌入式工程师必备的技能,Altium Designer是一款PCB设计工具,可以完成原理图设计与PCB的绘制。
注:本题无需提交。
#### git基本操作:
**任务简介**
> Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,可以帮助你进行自动的版本管理。控制组**之后的线上测试都是通过`gitee`发布**,在多人协作的情况下,使用`git`就会相当的方便,能够有效地协调多位开发者对不同地方的改动。
>
> Transistor电控组使用gitee来协作编写代码,上传工作日志。
**任务要求**
- 安装git,并且注册好`gitee`账户与`git`绑定,并且点击加入[邀请连接](https://gitee.com/Why7788/ElectronicControl/invite_link?invite=c4a8025b77aef26be31a41e07326829d382af3d9c7ec8f01e511b1509403e86e16b32bf7f470c341bf94c493d6df8dec)本远程仓库
- 注意邀请链接的有效期为3天(17日-20日)
- 在想要克隆本仓库的地方,右键菜单点击“**`Git Bash Here`**”,输入以下代码,即可实现将远程仓库克隆到本地的操作,注意**之后的任务会放置在任务文件夹中**
```c
>>> git clone https://gitee.com/Why7788/ElectronicControl.git
```
- 创建一个markdown文件,命名格式为{**{你的名字}.md**},如`李明.md` 撰写你对本周题目的难度的看法。
- 创建一个markdown文件,简述自己对**git组成以及常见命令使用原理的理解**,命名格式为 {**{你的名字}ToMarkDown.md**}。
- 两个文件统一放到`ElectronicControl\第一周测试题提交`下面。
- `git commit -m {改动的内容}` 在这里写清这次提交改动的内容:**{你的名字}提交git操作**。
- 本任务结果提交方式为**git提交**
**任务提示**
- 可以使用`git push` 将本地所有未上传的提交推送到远程仓库
- 此时有可能会提示推送失败,这是因为远程仓库里面有本地未获取的提交
- 此时需要先`git pull`获取当前远程仓库的最新版本, 将远程仓库的最新版本和本地最新版本合并(`merge`)后,才能够推送
- 第一次进行提交操作时需要登记提交者信息,提交时`git`会有相关的操作说明
- 更多详细的`git`用法请查询参考资料或借助网络搜索
**注意**
**不是**所有任务都需要利用git进行提交,第一周以及以后的其它任务提交方式**请以对应的任务说明为准**
##### 参考资料
- [git入门教程](https://www.cnblogs.com/imyalost/p/8762522.html)
- [菜鸟教程yyds](https://www.runoob.com/git/git-tutorial.html)
- 一个可以打开md文件的软件:[Typora](https://www.typora.io/windows/dev_release.html)
#### 自动控制原理基础:
自动控制原理是电控组最核心的理论知识之一,传递函数(Transfer Function)是经典控制理论的基础,系统的传递函数定义为,在零初始条件下,系统输出的拉普拉斯变换与系统输入的拉普拉斯变换的比值:

请查找相关资料,利用有关拉普拉斯变换与微分方程的知识,给出如图所示电阻电感网络系统的传递函数。

$$
图1.2 RC无源网络
$$
#### C / C++基础:
使用C / C++,随机生成1000个float类型的数据,范围在[0, 100]内,使用**不少于4种**方法将随机数从小到大排序,并输出结果。**(C++禁用sort函数)**
#### 嵌入式基础:
图1.3是STM32H750VBT6最小系统的一部分,封装为LQFP100,请自行查询STM32H750VBT6的芯片手册([STM32H750VB - 带DSP和DP-FPU的高性能Arm Cortex-M7 MCU,具有128 KB Flash存储器,1 MB RAM,480 MHz CPU,一级缓存,外部存储器接口,JPEG编解码器,硬件加密,大量外设 - 意法半导体STMicroelectronics](https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32h750vb.html#overview))以及其他相关资料,回答下列问题:
1. 第72、76号引脚的意义是什么?
2. 如果需要使用2号定时器的通道1,需要使能哪个GPIO管脚?
3. 该管脚还能被复用为哪些些功能?
4. 电容C1,C2的作用分别是什么?

$$
图1.3 STM32H750VBT6最小系统部分原理图
$$
#### 硬件设计基础:
参照下列步骤,使用Altium Designer完成原理图库与PCB库的创建。
1. 使用立创商城导入:
1. 注册立创商城账号;[立创商城_一站式电子元器件采购自营商城_嘉立创电子商城 (szlcsc.com)](https://www.szlcsc.com/)
2. 搜索要添加的元件型号;

2. 点击数据手册;

3. 点击立即打开;

4. 将原理图文件和PCB文件导出为Altium Designer格式;

5. 将schdoc文件与pcbdoc文件在Altium Designer中打开;
6. 在Altium Designer中新建原理图库和PCB元件库;

7. 将从立创中下载的schdoc文件和pcbdoc文件复制到新建的原理图库和PCB元件库中;


8. 自行绘制导入:查阅相关资料,在Altium Designer中绘制元件的原理图与PCB,导入现有库中,参考https://github.com/KitSprout/AltiumDesigner_PcbLibrary(一个封装得超级好的库,涵盖了市面上大多数元件),仿照其命名与绘制风格,将STM32H743VGT6芯片的原理图与PCB导入到SCH_Microcontroller.SchLib和PCB_IntegratedCircuit.PcbLib中,同时建立原理图与封装的映射关系。
### 进阶篇
#### PID算法的实现
`比例-积分-微分控制(PID)`是一种控制领域应用最广泛的算法,其计算流程与应用场景并无关系,是一种典型的无模型控制方法,请查阅相关资料完成下列问题:
1. 在PID控制中涉及到了KP,KI,KD三个参数,简要介绍它们的作用。
2. C语言在大多数的单片机开发过程中占据了绝对的主流地位。但作为一种面向过程的语言,C语言在面对当下以面向对象思想来构建可复用代码为主流的现状时,显得有些力不从心。
目前STM32开发中被广泛使用的HAL(抽象硬件层)库使用结构体将诸多外设抽象为一系列模型,通过配合句柄(Handle)实现对外设的操作。意法公司费尽心力地使用了大量的指针以实现面向对象的封装、继承、多态三大特性。

$$
图1.4 令人生畏的操作
$$
目前在主流的IDE(如Keil 5,STM32CubeIDE等)中,都支持C语言与C++混合编程。为了避免重复编写同样的代码,我们往往会将PID算法进行封装,请在STM32H743TEST工程文件(在工作空间中以zip的形式存在,可从git随测试题一起下载)基础上,实现**面向对象**的PID函数封装。要求在**Algorithm**在中新建PID.hpp与PID.cpp文件(或.h与.c文件)。

$$
图1.5 在Keil中使用Arm Compiler 6以实现对C++14及更高版本的支持
$$
#### PID调试模拟
在Simulink中搭建电机控制仿真模型,该模型由PID控制环节,单片机定时器装载的滞后环节与电机电流模型三个环节组成,其中,电机参数,。请根据提供的PID.slx文件(以PID.zip形式存在,可从git随测试题一起下载),**调节PID参数,使其单位阶跃响应调节时间小于0.5ms,超调小于5%,无稳态误差,并总结PID调试流程**。

$$
图1.6 电流环PID控制仿真模型图
$$
#### 线性降压电路设计
设计一块基于AMS1117-3.3电源芯片的线性降压电源板,实现将5V输入电压降至3V3后输出。问题要求如下:
1. 5V电压通过XH2.54 - 2Pin接口输入,经AMS1117-3.3降压至3V3后,通过XH2.54 - 2Pin接口输出;
2. 完成PCB设计,要求板子尺寸限制在 30mm * 30mm之内;
3. 原理图设计可参考如下电路,请思考是否可以使用容值相等的单个电容代替并联的两个或多个电容,为什么?

$$
图1.7 AMS1117典型电路
$$
4. 查询相关资料,回答下面两个问题:
- 什么是**共地**;
- 如何在Altium Designer中实现**铺铜(Polygon Pour)操作**,铺铜的意义是什么。
### 提交方式
- **git基本操作部分,通过该部分详细说明的方式,在git上提交**;
- 其余任务的提交方式为**邮箱提交**,地址为`bhjqrzx2024@163.com`。需要邮箱提交的任务放在**同一个zip文件**中,zip文件命名格式为{**{你的名字}第一周测试题**}。