3、主控芯片选型与电路设计:STM32F103C8T6最小系统、电源电路、时钟与复位电路
好,咱们进入正题。这一章聊的是整个控制器的“大脑”——主控芯片。我见过不少新手,一上来就盯着芯片的引脚数、主频这些参数看,结果板子画出来跑不起来。其实选型这事儿,说白了就是“够用、稳定、好买”。
我个人习惯,在温室控制器这种对成本敏感、对可靠性要求又高的场景里,首选就是 STM32F103C8T6。为什么?你想想看,它主频 72MHz,Flash 64KB,RAM 20KB,对于采集几个传感器、控制几路继电器、跑个简单的 PID 算法来说,绰绰有余。而且这颗料市场保有量极大,供货稳定,价格也亲民。
3.1 最小系统电路设计
所谓最小系统,就是让芯片能“活过来”的最低配置。我把它拆成三块来讲:电源、时钟、复位。这三块缺一不可,任何一个出问题,芯片都跑不起来。
核心要点:STM32F103C8T6 的最小系统必须包含:VDD/VSS 供电、VDDA/VSSA 模拟供电、VREF+ 参考电压、OSC_IN/OSC_OUT 外部晶振、NRST 复位电路、BOOT0/BOOT1 启动模式配置。
先看供电。芯片有多个电源引脚,VDD 和 VSS 是数字核心供电,VDDA 和 VSSA 是模拟部分供电。我遇到过有人把 VDDA 直接悬空,结果 ADC 读数永远不准。记住,VDDA 必须接,而且最好通过一个磁珠或 10Ω 电阻从 VDD 隔离过来,再并上 0.1μF 和 10μF 的电容。
VREF+ 是 ADC 的参考电压,如果你要用到高精度采样,建议单独用基准源供电。如果只是普通应用,直接连到 VDDA 也行。
// 供电引脚连接示意
VDD → 3.3V (所有 VDD 引脚都要接)
VSS → GND
VDDA → 3.3V (通过磁珠隔离)
VSSA → GND
VREF+ → VDDA (或外部基准)
VREF- → GND
3.2 电源电路设计
温室控制器通常用 12V 或 24V 供电,但 STM32 需要 3.3V。所以电源电路的核心就是降压稳压。
我推荐用 AMS1117-3.3 这颗 LDO。它便宜、好用、输出纹波小。输入电压范围 4.75V 到 12V,输出 3.3V,最大电流 800mA。对于温室控制器来说,主控加几个传感器,总电流一般不超过 200mA,完全够用。
我的经验:LDO 的输入输出端各加一个 10μF 的电解电容和 0.1μF 的瓷片电容。电解电容负责滤低频纹波,瓷片电容负责滤高频噪声。这个组合我用了很多年,从来没出过问题。
另外,如果系统里还有 5V 的传感器或继电器,可以再加一级 7805 或降压模块。但要注意,LDO 的压差会发热,输入电压越高,发热越严重。我曾经在 24V 输入下用 7805 给 5V 供电,结果散热片烫得能煎鸡蛋。后来改用了 DC-DC 模块,问题才解决。
// 电源电路关键参数
输入电压:12V DC
输出电压:3.3V (主控) / 5V (传感器)
最大电流:3.3V 输出 500mA / 5V 输出 1A
纹波要求:< 50mV (峰峰值)
3.3 时钟电路设计
时钟是芯片的“心跳”。STM32F103C8T6 有两个时钟源:内部 RC 振荡器(HSI)和外部晶振(HSE)。内部 RC 精度不高,频率会随温度漂移。温室环境温度变化大,我建议一定要用外部晶振。
常用的外部晶振是 8MHz,通过芯片内部的 PLL 倍频到 72MHz。晶振两端各接一个 20pF 的负载电容,电容另一端接地。注意,这两个电容的容值要根据晶振的规格书来选,不是随便用的。我见过有人用 30pF 的电容,结果晶振起振困难,系统偶尔死机。
警告:晶振的走线要尽量短,远离高频信号线(比如 PWM 输出、SPI 时钟)。我曾在一次项目中,把晶振放在了一个继电器驱动电路旁边,结果每次继电器动作,系统就复位。查了两天才发现是晶振被干扰了。
另外,RTC 时钟如果需要独立运行,可以再加一个 32.768kHz 的晶振,用于低功耗模式下的计时。这个晶振的负载电容一般是 12.5pF,别搞混了。
// 时钟配置示例 (使用 HSE + PLL)
HSE 频率:8MHz
PLL 倍频:x9
系统时钟:72MHz
APB1 总线:36MHz (最大)
APB2 总线:72MHz (最大)
3.4 复位电路设计
复位电路的作用是让芯片在上电时从一个确定的状态开始运行。STM32 的复位引脚是 NRST,低电平有效。
最简单的复位电路就是一个 10kΩ 的上拉电阻接到 3.3V,再加一个 0.1μF 的电容到 GND。这样上电时电容充电,NRST 引脚会保持一段时间的低电平,等电容充满后变为高电平,芯片开始运行。
如果你需要手动复位,可以再加一个按键,按键一端接 NRST,另一端接 GND。按下按键,NRST 被拉低,芯片复位。
我的习惯:我会在 NRST 引脚上再串联一个 100Ω 的电阻,防止外部干扰脉冲直接冲击芯片内部。这个电阻虽然小,但在电磁环境复杂的温室里,能省去很多麻烦。
另外,STM32 内部有一个上电复位(POR)和掉电复位(PDR)电路,电压低于 2.0V 时会自动复位。所以外部复位电路其实不是必须的,但我还是建议加上,尤其是当系统有多个电源域时,手动复位能方便调试。
// 复位电路参数
上拉电阻:10kΩ (1% 精度)
下拉电容:0.1μF (瓷片电容)
串联电阻:100Ω (可选)
按键:轻触开关,常开型
3.5 启动模式配置
STM32F103C8T6 有两个启动引脚:BOOT0 和 BOOT1。它们决定了芯片复位后从哪个存储器开始执行代码。
| BOOT0 | BOOT1 | 启动模式 |
|---|---|---|
| 0 | X | 主闪存 (Flash) |
| 1 | 0 | 系统存储器 (ISP 下载) |
| 1 | 1 | 内置 SRAM |
正常运行时,BOOT0 必须拉低(接 GND),BOOT1 可以悬空或拉低。如果你需要通过串口下载程序,就把 BOOT0 拉高,BOOT1 拉低,然后复位芯片,再用 ISP 工具下载。
我建议在 BOOT0 引脚上加一个 10kΩ 的下拉电阻,防止悬空时电平不稳定。另外,如果你需要频繁升级固件,可以加一个跳线帽,方便切换启动模式。
总结一下:STM32F103C8T6 的最小系统设计,核心就是“供电稳、时钟准、复位可靠、启动明确”。这四个点做好了,芯片就能稳定工作。剩下的就是根据你的外设需求,把对应的 GPIO、ADC、USART、SPI 等接口引出来就行了。
嗯,这一章的内容就这些。下一章咱们聊传感器接口电路设计,包括温湿度、光照、CO2 这些常用传感器的硬件连接和注意事项。到时候我会分享一些我在实际项目中踩过的坑,保证让你少走弯路。