第一章:项目全景与硬件选型
各位同学好,我是老李。做嵌入式这行十几年了,从最早的8051一路做到现在的Cortex-M系列。今天咱们聊的窗帘电机项目,说实话是个很典型的低成本嵌入式方案。你别看它结构简单,里面门道可不少。
我刚开始接这个项目时,客户就一句话:「成本压到最低,功能一个不能少。」嗯,这种要求我听得太多了。但窗帘电机这东西,涉及到电机控制、无线通信、电池管理,还真不是随便找个单片机就能糊弄过去的。
1.1 项目需求分析
先说说这个项目到底要干什么。说白了,就是做一个能远程控制、能定时开关的窗帘电机。用户可以用手机APP或者语音助手来控制窗帘的开合。
具体需求我列一下:
- 电机控制:正反转、速度调节、堵转保护
- 无线通信:支持Wi-Fi或蓝牙,能接入智能家居平台
- 低功耗:电池供电时待机电流要低于50μA
- 位置检测:知道窗帘开到哪了,支持百分比控制
- 安全保护:过流保护、过热保护、遇阻停止
- 成本目标:BOM成本控制在15元以内
你想想看,15块钱要搞定这么多功能,是不是有点挑战?我当年做第一个版本时,光电机驱动芯片就花了8块钱,后来硬是换方案才把成本压下来。
核心矛盾:功能越多,成本越高。但用户不会为用不上的功能买单。所以选型时一定要「够用就好」,别堆料。
1.2 系统架构概览
整个系统的架构其实不复杂。我习惯把它分成三层:
- 控制层:主控MCU,负责逻辑处理、通信协议、电机控制算法
- 驱动层:电机驱动芯片,把MCU的控制信号转换成电机需要的电流
- 电源层:电池管理、电压转换、充电电路
这三层之间怎么配合?举个例子:手机发来一条「打开50%」的指令,Wi-Fi模块收到后传给MCU,MCU根据当前位置计算出需要转多少圈,然后给驱动芯片发PWM信号,电机开始转。同时MCU还在监测电流,一旦发现堵转就立刻停止。
我记得第一次画这个架构图时,把通信模块和MCU之间的接口画错了,结果打样回来发现SPI引脚不够用。嗯,这种低级错误犯过一次就够了。
1.3 低成本MCU选型
MCU是整个系统的核心。选型时我主要看这几个指标:
| 参数 | STM32F030 | AT32F403 | GD32F103 |
|---|---|---|---|
| 内核 | Cortex-M0 | Cortex-M4 | Cortex-M3 |
| 主频 | 48MHz | 240MHz | 108MHz |
| Flash | 32KB | 64KB | 64KB |
| SRAM | 4KB | 16KB | 20KB |
| 单价(1K) | ¥2.5 | ¥3.8 | ¥3.2 |
我个人习惯用STM32F030。为什么?便宜、够用、资料多。你可能会问,AT32F403性能那么好,为什么不用?我告诉你,窗帘电机不需要240MHz的主频,48MHz绰绰有余。多出来的性能用不上,还多花钱,何必呢?
我的经验:选MCU时,先算算你的代码量。窗帘电机这种项目,32KB Flash完全够用。我做过一个版本,代码优化后只用了18KB。别一上来就选大容量,那是浪费。
不过要注意一点:STM32F030的SRAM只有4KB。如果你要用RTOS,或者要处理复杂的通信协议,4KB可能不够。我建议裸机跑,或者用状态机,4KB完全够用。
1.4 电机驱动芯片选型
电机驱动芯片这块,我踩过不少坑。先说两个常见的方案:
- DRV8833:TI的,双H桥,最大驱动电流1.5A,带过流保护
- L9110S:国产的,单H桥,最大驱动电流800mA,没有保护
DRV8833贵一些,大概3块钱,但功能全。L9110S便宜,不到1块钱,但功能简陋。
我建议用DRV8833。为什么?因为窗帘电机经常遇到堵转的情况——比如窗帘卡住了。DRV8833有内置的过流保护,电流超过阈值会自动关断。L9110S没有这个功能,你得自己在MCU里做电流检测,麻烦不说,响应速度还慢。
避坑指南:我曾经在一个项目里用了L9110S,结果客户反馈电机烧了好几个。查了半天,发现是堵转时电流太大,把驱动芯片烧了。后来换成DRV8833,再也没出过问题。省那两块钱,不值得。
驱动电路的设计也不复杂。MCU输出两路PWM信号,一路控制正转,一路控制反转。再加上一个使能引脚,用来控制电机的启停。嗯,这里要注意:PWM频率别太高,我一般用1kHz到10kHz之间。太高了电机噪音大,太低了电机抖动。
// 电机控制代码示例
void motor_control(uint8_t direction, uint8_t speed) {
if(direction == FORWARD) {
TIM1->CCR1 = speed; // 正转PWM
TIM1->CCR2 = 0; // 反转关闭
} else if(direction == REVERSE) {
TIM1->CCR1 = 0; // 正转关闭
TIM1->CCR2 = speed; // 反转PWM
} else {
TIM1->CCR1 = 0; // 停止
TIM1->CCR2 = 0;
}
}
1.5 电源方案对比
电源方案是窗帘电机项目里最让人头疼的部分。三种方案各有优劣:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 锂电池 | 电压稳定、可充电、容量大 | 成本高、需要充电管理、有安全隐患 | 高端产品、无插座场景 |
| 干电池 | 成本低、更换方便 | 电压下降快、容量有限、不环保 | 低成本方案、使用频率低 |
| DC适配器 | 供电稳定、无需考虑功耗 | 需要插座、布线麻烦 | 有插座场景、商用项目 |
我个人最推荐锂电池方案。虽然成本高一些,但用户体验好。你想,用户装个窗帘电机,还得隔三差五换电池,多烦人?
锂电池方案里,我习惯用18650电芯,单节3.7V,容量2600mAh左右。配上TP4056充电芯片,成本也就多两块钱。电机工作电流大概500mA,满电能用5个小时左右。每天开关两次,一次30秒,充一次电能用好几个月。
小技巧:如果用干电池方案,记得加一个升压电路。4节干电池串联才6V,电机一转电压就掉到4.5V以下了。我建议用MT3608升压到12V,这样电机工作稳定,不会出现转不动的尴尬情况。
嗯,电源这块还有一个容易被忽略的点:待机功耗。窗帘电机大部分时间都在待机,等着接收指令。如果待机电流太大,电池很快就耗光了。我一般要求待机电流低于50μA。怎么做到?MCU进入休眠模式,Wi-Fi模块也进入低功耗模式,只有蓝牙模块保持监听状态。
好了,第一章的内容就这些。说白了,窗帘电机项目就是个典型的低成本嵌入式方案,选型时记住三个字:够、用、好。MCU够用就行,驱动芯片选带保护的,电源方案看场景。下一章咱们聊聊具体的电路设计,到时候我会把原理图拿出来,一行一行地讲。