2、核心硬件选型与介绍
好,咱们进入第二章。这一章我打算聊聊硬件的选型。说实话,很多刚入行的朋友容易在这上面栽跟头。选型选得好,项目成功一半;选得不好,后面调试能让你怀疑人生。我当年第一个电力采集项目,就因为互感器选型没注意相位误差,折腾了整整两周。嗯,咱们今天就把这些坑提前填上。
2.1 STM32单片机选型:别盲目追求高配
STM32家族很庞大,从F0到H7,几十个系列。做电力数据采集,我个人习惯首选STM32F103系列。为什么?
- 性价比高:72MHz主频,足够处理三相电压电流的同步采样。
- 外设丰富:3个12位ADC,最多16通道,支持双ADC同步采样。这个在电力采集里太重要了。
- 生态成熟:库函数、例程、论坛资源,一抓一大把。你遇到的大多数问题,网上都有人踩过。
如果你需要更高的采样精度,可以考虑STM32G4系列。它内置了硬件数学运算单元(CORDIC),算FFT(快速傅里叶变换)会快很多。我在一个谐波分析项目里用过G431,效果确实不错。
选型建议:
- 入门/通用项目:STM32F103C8T6(48脚,64KB Flash)
- 需要多通道采样:STM32F103VET6(100脚,512KB Flash)
- 需要高精度/谐波分析:STM32G431
注意:STM32的ADC输入阻抗有限,直接接互感器输出会拉低信号。我建议在ADC前加一级电压跟随器(用LM358或MCP6002都行)。
2.2 电压电流互感器(CT/PT)原理:别被“隔离”骗了
电力采集的第一关,就是把高压大电流变成单片机可以处理的小信号。这活儿靠互感器。
电流互感器(CT)
说白了就是个变压器。一次侧穿心,二次侧感应出小电流。常见的变比有1000:1、2000:1。比如你测10A电流,用1000:1的CT,二次侧就是10mA。
二次侧需要接一个采样电阻,把电流转成电压。电阻选多大?我一般选10Ω到50Ω。太小了信号弱,太大了会饱和。
我的经验:采样电阻用低温漂的(25ppm/℃以下),否则温度一变化,读数飘得你心慌。我曾经在户外项目里吃过这个亏,后来全换成了金属膜电阻。
电压互感器(PT)
原理类似,但输入是电压。常见的是2mA/2mA的精密电压互感器。一次侧串一个限流电阻(比如220V时串110kΩ),二次侧并一个采样电阻(比如100Ω),得到0.2V的电压信号。
安全提醒:互感器虽然提供了电气隔离,但别因此放松警惕。我曾经见过有人直接用手摸PT二次侧,结果被感应电压电了一下。记住:隔离不等于绝对安全。
2.3 ADS1115/INA226模数转换器:精度与成本的博弈
STM32内置的ADC是12位的,理论上够用。但如果你需要更高的分辨率,或者想简化电路设计,外挂ADC是更好的选择。
ADS1115:16位精度,I2C接口
这颗芯片我特别喜欢。它内部有可编程增益放大器(PGA),可以测量±256mV到±6.144V的电压范围。分辨率最高到16位,采样率最高860SPS(每秒采样次数)。
用在电力采集里,我一般这样接:
- CT输出经采样电阻后,直接接ADS1115的AIN0
- PT输出经分压后,接AIN1
- I2C地址通过ADDR引脚配置,可以挂4个芯片,同时采集8路信号
// ADS1115初始化代码片段(使用HAL库)
void ADS1115_Init(void) {
uint8_t config[3];
// 配置:AIN0对GND,±4.096V,128SPS,连续转换模式
config[0] = 0x01; // 指向配置寄存器
config[1] = 0xC2; // 高字节:0b11000010
config[2] = 0x83; // 低字节:0b10000011
HAL_I2C_Master_Transmit(&hi2c1, 0x48 << 1, config, 3, 100);
}
INA226:电流/电压/功率一体监测
如果你不想自己搭信号调理电路,INA226是更好的选择。它内置了分流电阻检测和总线电压检测,直接通过I2C读出电流、电压、功率值。分辨率高达0.1mA和1.25mV。
我有个项目需要监测48V电池组的充放电状态,用了INA226,代码量少了一半。不过要注意,它的共模电压最高到36V,高压场合用不了。
| 芯片 | 分辨率 | 接口 | 适用场景 |
|---|---|---|---|
| ADS1115 | 16位 | I2C | 多通道、低采样率、需要灵活配置 |
| INA226 | 16位 | I2C | 单通道、需要功率计算、不想搭外围电路 |
我的建议:如果只是测电压电流,用ADS1115更灵活。如果需要同时测功率,或者想省事,选INA226。两个芯片我都用过,稳定性都不错。
2.4 通信模块(RS485/WiFi):远传还是近传?
数据采回来了,怎么传出去?这得看你的应用场景。
RS485:工业现场的首选
RS485是差分信号传输,抗干扰能力强,传输距离可达1200米。在电力采集里,几乎所有的电表、综保都支持RS485接口。
硬件上,我常用MAX3485芯片。它和STM32的USART连接,只需要TX、RX、RE/DE三个引脚。注意RE和DE要连在一起,用一个GPIO控制收发方向。
// RS485发送数据示例
void RS485_Send(uint8_t *data, uint16_t len) {
HAL_GPIO_WritePin(RS485_DE_GPIO_Port, RS485_DE_Pin, GPIO_PIN_SET); // 使能发送
HAL_UART_Transmit(&huart1, data, len, 100);
while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY); // 等待发送完成
HAL_GPIO_WritePin(RS485_DE_GPIO_Port, RS485_DE_Pin, GPIO_PIN_RESET); // 切回接收
}
避坑指南:我曾经在RS485总线上挂了32个设备,结果通信老是丢包。查了半天,发现是终端电阻没加。记住:总线两端各加一个120Ω电阻,能有效抑制信号反射。
WiFi:灵活但要注意功耗
如果你需要把数据传到云端,或者不想布线,WiFi是很好的选择。我常用ESP8266或ESP32。它们通过AT指令和STM32通信,或者直接用SPI接口。
不过WiFi的功耗比较大,待机时也有几十毫安。如果是电池供电的设备,建议加一个MOS管控制WiFi模块的电源,只在需要上传数据时才打开。
注意:WiFi在强电磁干扰环境下容易断连。我在一个变电站项目里试过,WiFi信号被高压设备干扰得完全没法用,最后老老实实换回了RS485。所以,工业现场优先考虑RS485,民用或办公环境可以用WiFi。
好了,这一章的核心硬件选型就聊到这儿。下一章咱们开始讲电路设计,包括信号调理、电源保护这些实战内容。到时候我会把原理图拿出来,咱们一行一行地分析。