第1章:嵌入式硬件平台选型
大家好,我是老张。在消防电子这行摸爬滚打了十几年,今天咱们聊聊硬件选型。说实话,这是整个系统的基础,选错了后面全是坑。
1.1 MCU选型要点
MCU是系统的大脑。选型时我习惯先看三点:性能、可靠性、成本。但消防系统不一样,可靠性永远是第一位的。
核心原则:消防报警系统属于安全关键系统,MCU必须通过工业级或汽车级认证。消费级芯片?我劝你别碰。
1.1.1 处理性能
别盲目追求高主频。消防报警系统不是跑AI的,实时性才是关键。我个人习惯这样估算:
- 主频:32位MCU,40-80MHz足够。我见过有人用200MHz的,纯粹浪费钱。
- RAM:至少16KB,建议32KB以上。要留够堆栈空间,特别是多任务处理时。
- Flash:128KB起步。别问我为什么,我吃过亏——代码写到一半发现空间不够了。
我的经验:选型时留30%的余量。项目后期加功能是常态,别把自己逼到墙角。
1.1.2 外设资源
消防系统需要的外设其实很固定。我列个清单:
| 外设 | 用途 | 最低要求 |
|---|---|---|
| ADC | 传感器信号采集 | 12位精度,4通道以上 |
| 定时器 | PWM输出、周期检测 | 2个16位定时器 |
| UART | 通信调试 | 2路 |
| SPI/I2C | 外设扩展 | 各1路 |
| GPIO | 按键、指示灯 | 16个以上 |
嗯,这里要注意:ADC的采样率不用太高,但精度一定要够。烟雾传感器的信号很微弱,12位是底线。
1.1.3 可靠性要求
我曾经在一个项目中,MCU在高温环境下频繁复位。查了三个月,最后发现是芯片的工作温度范围不够。从那以后,我选型必看这几点:
- 工作温度:-40°C ~ +85°C,这是底线。消防设备可能在楼顶暴晒,也可能在北方地下室挨冻。
- ESD防护:至少4kV HBM。现场接线时静电是常事,别指望施工人员都戴手环。
- BOR(欠压复位):必须有。电源波动时,系统不能死机或误动作。
- WDT(看门狗):独立硬件看门狗,不是软件模拟的那种。
避坑指南:我曾经遇到过某国产芯片,看门狗复位后IO状态保持不住。结果呢?消防联动设备直接误动作了。所以,复位后的IO状态一定要确认清楚。
1.2 传感器接口
传感器是系统的眼睛和鼻子。接口设计直接决定了信号质量。
1.2.1 烟雾传感器接口
目前主流的是离子式和光电式。光电式更常见,我重点说说它。
光电烟雾传感器的输出信号很弱,一般是nA级的电流。所以前端放大器很关键:
// 典型的光电烟雾传感器读取流程
void SmokeSensor_Read(void)
{
uint16_t adc_value;
float smoke_level;
// 1. 开启LED驱动(注意:需要预热)
LED_DRV_ON();
delay_ms(10); // 稳定时间
// 2. 读取ADC值
adc_value = ADC_GetValue(SMOKE_CH);
// 3. 关闭LED
LED_DRV_OFF();
// 4. 转换为浓度值
smoke_level = (float)adc_value * VREF / 4096;
smoke_level = (smoke_level - V0) / SENSITIVITY;
// 5. 滤波处理
smoke_level = LowPassFilter(smoke_level);
}
我的习惯:传感器接口一定要加TVS管和RC滤波。现场干扰多,一个浪涌就能打坏ADC输入。另外,PCB走线时模拟地和数字地要分开,最后单点接地。
1.2.2 温度传感器接口
温度传感器相对简单。我常用两种方案:
- NTC热敏电阻:便宜,但需要查表或公式计算。精度一般,适合做温度补偿。
- 数字温度传感器:如DS18B20,直接I2C或单总线读取。精度高,但成本稍高。
我个人建议:主控板上用数字传感器,探测端用NTC。为什么?探测端环境恶劣,数字芯片容易出问题,NTC皮实耐用。
1.2.3 气体传感器接口
CO、燃气等传感器,输出一般是0-5V的模拟信号。这里有个坑:
避坑指南:我曾经遇到过气体传感器输出阻抗很高,直接接ADC会导致采样不准。后来加了电压跟随器才解决。所以,高阻抗信号一定要先缓冲再采样。
1.3 通信模块
消防系统里,通信就是生命线。数据传不出去,再好的算法也没用。
1.3.1 有线通信
目前主流的是RS-485和CAN总线。我对比一下:
| 特性 | RS-485 | CAN总线 |
|---|---|---|
| 传输距离 | 1200m | 1000m |
| 节点数 | 32-256 | 110 |
| 实时性 | 一般(主从轮询) | 好(多主竞争) |
| 成本 | 低 | 中 |
| 抗干扰 | 好 | 很好 |
我个人更倾向CAN总线。为什么?消防系统需要实时响应,CAN的优先级仲裁机制太适合了。报警信号优先级高,配置信息优先级低,天然满足需求。
1.3.2 无线通信
现在无线消防越来越多了。我常用的方案:
- LoRa:距离远,穿墙能力强。适合大面积覆盖,但速率低。
- NB-IoT:运营商网络,不用自己建基站。适合分散点位。
- ZigBee:组网灵活,但距离短。适合室内小范围。
我的经验:无线通信一定要考虑电池寿命。消防设备要求待机3年以上,所以MCU的休眠功耗和无线模块的唤醒策略很关键。我一般用RTC定时唤醒,而不是一直监听。
1.4 电源管理
电源是系统的命脉。消防系统要求24小时不间断工作,所以电源设计马虎不得。
1.4.1 主电源设计
市电输入,经过AC-DC转换成24V或12V。然后通过DC-DC降压到5V和3.3V。这里要注意:
- 效率:DC-DC效率要85%以上。发热是元凶,效率低了散热成本高。
- 纹波:输出纹波控制在50mV以内。传感器对电源噪声敏感。
- 保护:过压、过流、反接保护一个不能少。现场接线经常出错。
1.4.2 备用电源
消防系统必须有备用电源。一般是铅酸电池或锂电池。我建议:
- 电池容量:至少支持系统工作24小时。这是国标要求。
- 充电管理:三段式充电(恒流-恒压-浮充)。别用简单的电阻限流,电池寿命会缩短。
- 电池检测:实时监测电池电压和温度。我曾经遇到过电池过放导致鼓包的,很危险。
避坑指南:我曾经设计过一款产品,主电源和备用电源切换时,系统会瞬间掉电复位。后来加了超级电容做保持,才解决这个问题。切换时间要控制在10ms以内。
1.4.3 低功耗设计
对于无线探测器和手报,电池供电是常态。低功耗设计是必修课:
// 低功耗模式切换示例
void EnterSleepMode(void)
{
// 1. 关闭所有外设时钟
RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN);
RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN | RCC_APB2ENR_TIM1EN);
// 2. 设置GPIO为模拟输入(省电)
GPIOA->MODER = 0xFFFFFFFF;
GPIOB->MODER = 0xFFFFFFFF;
// 3. 进入停止模式
PWR->CR |= PWR_CR_LPDS;
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__WFI();
}
嗯,这里要注意:唤醒后要重新初始化外设。我见过有人忘了重新配置时钟,结果通信速率全乱了。
小结
硬件选型是个系统工程。MCU、传感器、通信、电源,每个环节都要考虑周全。我的建议是:
- 选型时多留余量,别卡着极限设计
- 可靠性优先,成本其次
- 多参考成熟方案,别自己从头造轮子
下一章咱们聊聊软件架构设计。到时候我会分享一些实时操作系统的选型经验,敬请期待。