江苏省赛-哨兵机器人

【公开课】基于 STM32 单片机的机器人控制

2021-22 秋季学期

各位同学,欢迎来到基于 STM32 的机器人控制课程。本课程由西交利物浦大学 GMaster 机器人战队电控组制作,21赛季和22赛季电控组组长,王景祎和林文浩主讲。

课程前期使用经典的 STM32F103 最小系统板,其价格便宜,方便各位同学快速上手。课程前半部分会介绍STM32的各个外设的使用方法和开发流程,后半部分会以STM32为平台来介绍机器人控制的相关知识。课程最终的目标是使用STM32控制一个迷你版的步兵机器人,其具有四个直流电机麦克纳姆轮和两个舵机组成的云台。

STM32F103C8T6 最小系统板

Lecture 1: 初识 STM32 与 GPIO 介绍

主讲人:林文浩
时间地点:2021年10月14日周四 19:00 BS4114

本次课程将是各位同学上手STM32单片机的第一节课。课程会先介绍单片机与我们的电脑相比的区别,特性,应用场景,然后以点亮一盏LED灯为目标,介绍STM32的最基本的一个外设——GPIO。最后会介绍使用CubeMX初始化代码生成器,和Keil集成开发环境的开发流程。

课程视频

本次课程暂无视频。

幻灯片

下载地址:https://site.mr-digital.cn/file/stm32-course/Lecture1.pptx

实验

实验要求:点亮开发板上的LED灯。LED灯连接在PC13引脚上,低电平点亮。

Lecture 2: GPIO 输入与外部中断

主讲人:王景祎
时间地点:2021年10月21日周四 19:00 BS4114

1. 本次课程会介绍GPIO外设如何读取输入引脚的高低电平状态。其中的一个难点就是理解GPIO输入时的上拉下拉配置。
2. 本次课程会介绍STM32的中断,使用EXTI外部中断来检测输入引脚的上升沿/下降沿。并帮助同学区分开轮询和中断的区别。课程还会介绍用到的库函数,并区分开主动调用函数还是实现中断回调函数的区别。

课程视频

幻灯片

下载地址:https://site.mr-digital.cn/file/stm32-course/Lecture2.pptx

实验2.1 按键控制LED灯

实验要求:
将杜邦线插入输入引脚,另一端连接至高电平时,点亮LED;拔掉或连接至GND时,熄灭LED。
使用轮询读取GPIO输入的方式来实现。

实验2.2 按键控制LED灯

实验要求:
将杜邦线插入输入引脚,另一端连接至高电平时,点亮LED;拔掉或连接至GND时,熄灭LED。
使用外部中断检测GPIO输入引脚的上升沿/下降沿的方式来实现。

作业

将杜邦线插入任意引脚,另一端连接至低电平时,点亮LED灯;拔掉线或连接至高电平时,熄灭LED灯。
注意体会上拉下拉的区别。

Lecture 3: 定时器:不仅仅能定时

主讲人:王景祎
时间地点:2021年10月30日周六 19:00 BS4114

0. 本次课程会先讲解之前工程中总是跳过的时钟树部分,理解时钟信号的来源,倍频,分频等知识点,最后使用外部晶振初始化系统时钟。
1. 介绍定时器外设的基本原理,使用流水线打包工人的场景来举例。
2. 介绍PWM脉宽调制信号,并讲解使用定时器生成任意的PWM。

课程视频

幻灯片

下载地址:https://site.mr-digital.cn/file/stm32-course/Lecture3.pptx

实验3.0 配置时钟树,使用阻塞延时

1 使用8MHz外部晶振,配置系统主频为72MHz
2 使用 HAL_Delay 阻塞延时函数实现LED每秒闪烁一次。

实验3.1 生成定时器中断

使用定时器生成周期1秒的中断,并在中断中翻转LED灯的状态。

实验3.2 生成PWM信号

生成一个PWM信号,使LED的亮度为原来的一半。

实验3.1和3.2示例代码:https://site.mr-digital.cn/file/stm32-course/Lab3_Demo_Code.rar

作业

实现呼吸灯效果,即灯由灭逐渐增加亮度,到达最亮后逐渐变暗至熄灭。

Lecture 4: 复习课:定时器,呼吸灯与舵机

主讲人:林文浩
时间地点:2021年11月3日周三 19:00 BS4114

0. 本次课程会将会讲解呼吸灯的实现方法,通过使用定时器中断的方式,周期性的改变灯的占空比
1.主要培养新生的工程师思维,把学过的外设功能结合起来。

课程视频

幻灯片

实验4.1 实现简单呼吸灯

通过在main函数的while(1), 使用HAL_Delay的方式完成周期性更改占空比

体会这种方式的弊端

实验4.2 使用定时器中断的方式实现呼吸灯

使用定时器生成周期100Hz的定时器中断,在中断回调函数中更改占空比。根据周期4S的需求,通过计算,选择合适的软件分频,把100Hz的频率缩小。

作业

通过查询舵机资料,尝试驱动舵机,完成周期性运动。

Lecture 5: 串口通信与直接存储器访问DMA

Lecture 6: 姿态传感器 – 陀螺仪与加速度计

Lecture 7: 负反馈控制与PID控制器

课程视频

PID参考代码

https://github.com/RoboMaster/Development-Board-C-Examples/tree/master/20.standard_robot/components/controller