从零开始制作扫地机器人,涉及PCB设计、Solidworks建模与打印、单片机外设开发、电机驱动App开发蓝牙/语音模块、FreeRTOS代码优化等。本文主要涉及扫地机器人的硬件原理图解析,后续还会推出代码解析。
目录
PIN_5(PD0-OSC_IN):外部高速时钟输入(HSE Oscillator IN)
PIN_6(PD1-OSC_OUT):外部高速时钟输出(HSE Oscillator OUT)
PIN_8(VSSA):Voltage Source (Supply) for Analog Ground(模拟地)
PIN_9(VDDA):Voltage (Drain)Digital-Analog for Analog(模拟电源)
PIN_12(PA2):连接到语音部分,作为USART2_TX进行串口通信,配置为以下模式:
PIN_13(PA3):连接到语音部分,作为USART2_RX进行串口接收,配置为以下模式:
PIN_16(PA6):TIM3_CH1连接到电机部分作为PWM输出
PIN_17(PA7):TIM3_CH2连接到电机部分作为PWM输出
PIN_34(PA13):Serial Wire Data Input/Output,串行线数据输入 / 输出 ):
PIN_37(PA14):(Serial Wire Clock,串行线时钟 ):
PIN_39(PB3),PIN_40(PB4):配合PA6的PWM输出来控制左轮
PIN_41(PB5),PIN_42(PB6):配合PA7的PWM输出来控制右轮
整体的原理图如下:
其实只有这一页,说明这个工程没有我们想象的那么难,接下来为大家一步一步解析这个原理图,让大家可以从原理图想象到实物的控制是怎么样的。
主控部分:
我们这次使用的控制芯片是STM32F103C8T6,一个简单的常用的控制芯片,首先我们先看U1,除去没有连接的部分引脚,我们用到的引脚有以下pin:
PIN_1(VBAT):
备用电源引脚 ,作用是为实时时钟(RTC)和后备寄存器供电 。当主电源断电后 ,VBAT 连接的备用电源能维持 RTC 计时及后备寄存器数据不丢失 ,保证相关功能持续运行 。
PIN_5(PD0-OSC_IN):外部高速时钟输入(HSE Oscillator IN)
- 连接外部 8MHz晶振(X1) 的输入引脚,用于接收晶振产生的时钟信号
- 为芯片提供高精度主时钟源(HSE,High Speed External)
- 需外接匹配电容(图中 C1=22pF)以稳定晶振振荡
- 通过 X1晶振 与 PIN_6(PD1-OSC_OUT) 形成闭环振荡回路
- 匹配电容 C1 和 C2(均为22pF)用于调节晶振负载电容,确保起振稳定
- 典型应用:芯片主时钟源(经PLL倍频后产生72MHz系统时钟)
PIN_6(PD1-OSC_OUT):外部高速时钟输出(HSE Oscillator OUT)
- 输出晶振振荡信号至外部电路
- 与PD0-OSC_IN配合形成完整的晶振驱动回路
- 若未使用外部晶振,此引脚可配置为普通GPIO或其他复用功能
- 与PD0共同连接外部晶振 X1(8MHz) 和电容 C2(22pF)
- 在原理图中,晶振电路通过 R11(1MΩ) 并联电阻增强抗干扰能力
PIN_7(NRST):外接RST
1.低电平有效的异步复位信号输入引脚
2.当引脚电平 < 0.8V(VIL) 时,触发芯片复位(程序重启,寄存器恢复默认值)
3.内置弱上拉电阻(约40kΩ),外接 10kΩ上拉电阻 增强抗干扰能力
PIN_8(VSSA):Voltage Source (Supply) for Analog Ground(模拟地)
- 为芯片内部 模拟电路(ADC、DAC、温度传感器等)提供独立的接地回路
- 与数字地(VSS)隔离,避免数字噪声干扰模拟信号
- 在原理图中直接连接到 统一地平面(GND)
- 实际PCB布局时,建议通过 单点接地 连接模拟地与数字地(如通过0Ω电阻或磁珠隔离)
- 为防止干扰,避免模拟信号走线与高速数字信号(如时钟线、PWM)平行布线
PIN_9(VDDA):Voltage (Drain)Digital-Analog for Analog(模拟电源)
- 为内部模拟电路提供 3.3V独立供电(与数字电源VDD隔离)
- 直接影响ADC/DAC的精度和稳定性
- VDDA走线应远离数字电源(VDD)和高速信号线
- 优先采用星型拓扑连接电源,减少压降干扰
PIN_12(PA2):连接到语音部分,作为USART2_TX进行串口通信,配置为以下模式:
-
复用推挽输出(AF_PP)
- 将PA2映射为 USART2_TX 功能,通过硬件串口控制器直接驱动信号
- 推挽输出可提供 强驱动能力(高电平=3.3V,低电平=0V),适合长距离传输(如RS-232/485电平转换器前级)
-
高速模式(GPIO_SPEED_FREQ_HIGH)
- 支持USART2 最高波特率(如4.5Mbps,需APB1时钟=36MHz)
- 降低信号边沿抖动,确保时序精度
PIN_13(PA3):连接到语音部分,作为USART2_RX进行串口接收,配置为以下模式:
浮空输入(GPIO_NOPULL)(GPIO_MODE_INPUT)
- 适用于 外部设备已提供确定电平 的场景(如外部收发器输出固定驱动)
- 若信号源驱动能力弱(如长线缆),建议启用内部上拉(GPIO_PULLUP)
PIN_16(PA6):TIM3_CH1连接到电机部分作为PWM输出
配置信息
- 信号:TIM3通道1(TIM3_CH1)
- GPIO模式:复用推挽输出(Alternate Function Push-Pull)
- 最大输出速度:低速(Low,最高2MHz)
功能与硬件设计
- PWM信号生成:
- 作为TIM3的 通道1,PA6输出PWM信号,控制2个左轮电机的 转速或方向。
- 占空比范围:0%~100%(通过TIM3的CCR1寄存器调节)。
- 时钟源:TIM3的时钟来自APB1总线,默认频率为 72MHz(STM32F103C8主频配置)。
- 分频与周期:
- 预分频值(Prescaler)= 720-1 → 分频后频率 = 72MHz / 720 = 100kHz
- 自动重载值(Period)= 100-1 → PWM周期 = (100-1 + 1) / 100kHz = 1ms → PWM频率= 1kHz
- 占空比控制:
- 通过通道1的 捕获/比较寄存器(CCR1) 设置占空比,公式:
- 例如:CCR1=50 → 占空比=50/100=50%
- 硬件连接:
- 直接连接至 电机驱动芯片TB6612FNG的PWM输入引脚。
- 若驱动高压电机(>5V),需通过 光耦隔离(如TLP521) 或 电平转换电路。
- 信号优化:
- 串联 22Ω电阻(抑制信号反射)
- 并联 100pF电容到地(滤除高频噪声)
PIN_17(PA7):TIM3_CH2连接到电机部分作为PWM输出
配置信息
- 信号:TIM3通道2(TIM3_CH2)
- GPIO模式:复用推挽输出
- 最大输出速度:低速
功能与硬件设计
- PWM信号生成:
- 作为TIM3的 通道12,PA6输出PWM信号,控制2个右轮电机的 转速或方向。
- 占空比范围:0%~100%(通过TIM3的CCR2寄存器调节)。
- 时钟源:TIM3的时钟来自APB1总线,默认频率为 72MHz(STM32F103C8主频配置)。
- 分频与周期:
- 预分频值(Prescaler)= 720-1 → 分频后频率 = 72MHz / 720 = 100kHz
- 自动重载值(Period)= 100-1 → PWM周期 = (100-1 + 1) / 100kHz = 1ms → PWM频率= 1kHz
- 占空比控制:
- 通过通道2的 捕获/比较寄存器(CCR2) 设置占空比,公式:
- 例如:CCR1=50 → 占空比=50/100=50%
- 硬件连接:
- 直接连接至 电机驱动芯片TB6612FNG的PWM输入引脚。
- 若驱动高压电机(>5V),需通过 光耦隔离(如TLP521) 或 电平转换电路。
- 信号优化:
- 串联 22Ω电阻(抑制信号反射)
- 并联 100pF电容到地(滤除高频噪声)
PIN_18(PB0):预留的PWM输出引脚
PIN_44(BOOT0),PIN_20(BOOT1):
电阻接地构成下拉电阻电路 。芯片复位或上电时,下拉电阻将引脚电平拉低,保证引脚初始电平状态确定,为启动模式选择提供稳定初始条件 。
PIN_21(PB10),PIN_22(PB11):
PB10、PB11 作为 USART3 的 TX 和 RX 引脚,用于和串口屏进行数据交互,实现显示控制、数据传输等功能。
PIN_23(VSS_1):
VSS_1 是芯片的 电源地(Ground)引脚,属于STM32的多个接地引脚之一。
PIN_24(VDD_1):
VDD_1 是芯片的 电源正极引脚,为STM32提供3.3V工作电压。
PIN_25(PB12),PIN_26(PB13):
预留的配合PB0的电机控制引脚
PIN_30(PA9),PIN_31(PA10):
PA9作为USART1的发送引脚(TX),PA10作为USART1的接收引脚(RX),连接到蓝牙部分
PIN_34(PA13):Serial Wire Data Input/Output,串行线数据输入 / 输出 ):
- 功能:用于在调试或编程过程中,向 STM32F103C8T6 微控制器发送数据或接收来自芯片的数据 。当使用调试工具(如 J - Link、ST - Link 等)连接到芯片进行程序调试、下载时,通过该引脚传输调试命令、程序代码、变量数据等信息 。
PIN_37(PA14):(Serial Wire Clock,串行线时钟 ):
- 功能:为 SWDIO 引脚的数据传输提供时钟信号 ,控制数据在 SWDIO 上进行发送和接收的时序。在同步通信中,时钟信号用于确定数据的采样时刻和传输节奏 。
PIN_39(PB3),PIN_40(PB4):配合PA6的PWM输出来控制左轮
PIN_41(PB5),PIN_42(PB6):配合PA7的PWM输出来控制右轮
- 工作模式:推挽输出(GPIO_MODE_OUTPUT_PP)
- 初始状态:低电平(GPIO_PIN_RESET)
- 输出速度:高速(GPIO_SPEED_FREQ_HIGH)
通过不同的电平组合来控制电机的正反转,具体如何控制请看下面电机部分。
PIN_43(PB7):
为发送超声波模块的触发信号,具体如何发送请看代码部分。
PIN_45(PB8):
- 配置为TIM4_CH3输入通道
- 用于接收超声波模块的回波信号(Echo)
- 通过TIM4的输入捕获功能测量回波时间
串口屏+超声波+蓝牙:
接下来我们看串口屏+超声波+蓝牙部分,这一部主要是用于显示系统信息,测距,以及与手机通信的功能。
串口屏部分:
2脚为TX脚,连接PB11(USART3_RX),3脚为RX脚,连接PB10(USART3_TX),用于和串口屏进行数据交互,实现显示控制、数据传输等功能,具体实现请看代码。
超声波部分:
2脚连接到PB7,用于接收STM32的触发信号;3脚连接到PB8,用来给STM32发送PWM信号,从而在STM32中计算距离,具体实现请看代码。
蓝牙部分:
1脚为RX连接到PA9(USART1_TX),2脚为TX连接到PA10(USART1_RX),与STM32进行串口通信,并且蓝牙模块与手机连接,进行蓝牙通信,具体实现请看代码。
电源部分:
这里主要是供电和开关,电路连接固定,对我们的工程只起到供电作用,所以这里只做简要讲解:
AMS1117 - 3.3:
- 功能:这是一款低压差线性稳压器(LDO) 。能将输入电压转换为稳定的 3.3V 输出电压,具有低压差特性,在输入输出电压差较小时也能稳定工作,为对电源稳定性要求较高的电路,如 STM32 芯片等提供稳定的 3.3V 供电。
- 电路连接原因:STM32 芯片工作电压一般为 3.3V 左右 ,当系统有 5V 电源输入时,需通过 AMS1117 - 3.3 将 5V 降压到 3.3V 为其供电。输入输出端连接的电容(C29、C16、C30、C15 ),C29 和 C30 为大容量电解电容,用于滤除低频噪声;C16 和 C15 为小容量陶瓷电容,用于滤除高频噪声,保证输出电压稳定、纯净 。
TPS5430DDAR:
- 功能:属于开关模式电源芯片 ,能将较高输入电压转换为所需的输出电压。通过 PWM(脉冲宽度调制)方式控制开关管的导通与关断,实现电压转换,具有转换效率高、能处理较大电流等优点,可将 12V 输入转换为合适电压输出。
- 电路连接原因:若系统中部分模块需要 5V 供电 ,而输入电源为 12V 时,TPS5430DDAR 可将 12V 降压至 5V 。D2 是续流二极管,在芯片内部开关管关断时,为电感 L3 提供续流回路,保证电路正常工作;L3 为储能电感,在开关管导通时储存能量,关断时释放能量维持输出电压稳定;R6、R7 组成反馈电阻网络,用于反馈输出电压信号,让芯片根据反馈信号调整输出,保持输出电压稳定在 5V ;C17、C21、C22 用于滤波,去除输出电压中的纹波,提高电源质量 。
电机部分:
扫地机器人有4个轮子,一边4个,这里主要是通过电机驱动芯片来控制电机的转动,实际目前只用了U4,U5作为备用预留的控制芯片。
TB6612FNG(O,C,8,EL):
1. 功能定位
- AO1(Output 1 for Motor A):电机 A 的输出引脚 1,连接到电机的一端(如正极)。
- AO2(Output 2 for Motor A):电机 A 的输出引脚 2,连接到电机的另一端(如负极)。
两者需配合使用,通过改变它们之间的电压方向来控制电机转向。
2. 控制电机转向的原理
TB6612FNG 通过内部的 H 桥电路控制 AO1 和 AO2 的输出状态,实现电机正反转:
- 正转(CW):
AO1 输出高电平(VM),AO2 输出低电平(GND),电流从 AO1 流入电机,从 AO2 流出,电机顺时针旋转。 - 反转(CCW):
AO1 输出低电平(GND),AO2 输出高电平(VM),电流方向反转,电机逆时针旋转。 - 短路制动(Short Brake):
AO1 和 AO2 同时输出低电平(GND),电机绕组短路,产生制动效果,快速停止转动。 - 停止(Stop):
AO1 和 AO2 均为高阻态(浮空),电机无电流流过,自由停止。
3. 与控制信号的关系
AO1 和 AO2 的状态由输入信号 AIN1、AIN2 和 PWMA 共同决定:
- PWM 调速:通过调节 PWMA 的占空比,控制 AO1 或 AO2 的平均电压,实现电机转速调节。
4. 应用场景差异
- AO1 和 AO2 必须成对使用,不可单独连接电机。
- 若电机正反转方向不符合预期,可通过交换 AO1 和 AO2 与电机的连接来调整。
- 在短路制动模式下,AO1 和 AO2 同时接地,可快速消耗电机的动能,但会产生较大电流,需注意芯片功耗。
语言部分:
语言部分用于机器人的播报,具体实现请看代码。
14脚B5为TX脚连接到PA3(USART2_RX),13脚B6为RX脚连接到PA2(USART2_TX),通过与STM32进行串口通信,得到要说的信息,进行播报。
硬件电路部分就到此为止,希望本文可以为基础差的同学加深对整个扫地机器人电路的理解,为往后代码部分的学习奠定底层基础。
注:不要拿我这篇文章来写你们自己工程项目实践报告,你用了我用啥嘞?