搭建机器人电控系统——MCU基石
在上一章中,我讲解了搭建一个机器人电控系统的前期准备工作,包括电源的选择和主控的开发,经过一些基础的单片机任务之后,现在你应该对单片机的一些编程习惯有了掌握。
在本章中,我将会按照一个机器人的底盘到上层机构的顺序,单独来对每一个机构的电控部分进行讲解。从中分别来详细展示运动模型、通信协议、PWM输出和算法部分,从而让你学会如何用MCU去控制每个部分机构的运动。
不过在这之前,我会以STM32F407为例,先补充一些关于MCU的基本知识原理:
STM32系统架构
STM32时钟配置
GPIO原理
中断NVIC与EXTI
GPIO是什么?
IO口是单片机除了特殊引脚之外的输出输入引脚,GPIO也是各大外设功能中的一种。之所以把GPIO单独拿出来讲解,是因为GPIO是IO口最基本的功能,在你初始化任何外设的功能的时候,除了都要使能时钟以外,你基本都要先初始化GPIO的结构体:
所以我们说,外设正常工作的激励来源是时钟信号,而外设的硬件环境是GPIO。
GPIO(General-purpose input/output),通用输入输出口,其电路原理图如下图所示:
我们在初始化它的结构体的时候,通常有以下两大要点:
GPIO的模式
5种输入模式:
GPIO的输入模式表示信息或者激励从IO引脚获得,比如按键检测、ADC采集、PWM捕获等。
①输入浮空模式Floating
IO引脚不接任何上拉或下拉电阻,即在空闲状态下IO引脚的电平状态不确定。
②输入上拉模式IPD
IO引脚接上拉电阻,即在空闲状态下IO引脚的电平状态为高。
③输入下拉模式IPU
IO引脚接下拉电阻,即在空闲状态下IO引脚的电平状态为低。
④模拟输入模式AIN
IO引脚作为模拟量采集输入,如ADC,即不经过TTL施密特触发器进行电平转换成TTL格式。
⑤复用功能输入
IO引脚复用(既有GPIO的功能也有其他外设功能)到其他外设上(比如串口功能外设),此时作为输出RX引脚读取外部数据信息。
4种输出模式:
GPIO的输出模式表示信息从IO引脚输出,比如点亮LED灯、输出PWM波等。
①开漏输出模式DD
MCU内信息从寄存器输出,经过N-MOS管到IO引脚。当输出为高电平时,N-MOS关闭,此时IO引脚电平仅由上拉或下拉电阻决定。
②开漏复用输出模式AFDD
MCU内信息从外设模块输出,经过N-MOS管到IO引脚。当输出为高电平时,N-MOS关闭,此时IO引脚电平仅由上拉或下拉电阻决定。
③推挽输出模式PP
MCU内信息从寄存器输出,经过P-MOS管道IO引脚。当输出为低电平时,P-MOS关闭,此时IO引脚电平仅由上拉或下拉电阻决定。
④推挽复用输出模式AFPP
MCU内信息从外设模块输出,经过P-MOS管道IO引脚。当输出为低电平时,P-MOS关闭,此时IO引脚电平仅由上拉或下拉电阻决定。
GPIO的输出速度
GPIO输出的速度有2MHZ、25MHZ、50MHZ、100MHZ。频率表示输出驱动电路的带宽。设置GPIO的速度时要保证频率(带宽)大于驱动对象信号频率(一般大于10倍以上)。
比如:串口波特率为115.2K,则用2M的速度即可,省点且噪声小;CAN通信配置波特率为1MHZ,则用25MHZ以上可以,如果用2MHZ可能会导致失真。
一个点灯的例程:
因为是要点灯,假设这个灯是高电平点亮,即外部接地。所以设置GPIO模式为推挽输出,这样我程序里设高就能亮。(如果设置为开漏输出,那么程序设高没用,得看IO对应引脚是被上拉还是下拉。)