最近在折腾工业温度变送器,发现国产芯片方案真的香。搞了个PT100+K型热电偶双支持的设备,4-20mA、0-10V输出随便切,顺手记录下开发过程
pt100温度变送器,支持k型热电偶 4-20mA输出全套方案资料 2线、3线、隔离型。 (样板是2线电流/0-10V输出) 0-5V 0-10V输出 国产24位ADC精度0.01度,国产12位DAC千分之一线性价格便宜成熟方案。 485通信到串口示波器看温度电流曲线 2.4寸tft液晶屏,有串口屏接口。 外壳采用abs+透明上盖触摸按键组成。 2点仪表标定校准方式。
硬件选型先拍板:
- ADC用了航顺的HSADC1224,24位分辨率实测能到0.03℃稳定度
- DAC直接上芯海CS1237,12位够用还自带冷端补偿
- 主控GD32F303CCT6,带硬件除法器处理温度计算
代码部分咱们拆开看,先说ADC采集:
// PT100三线制采样
void PT100_3Wire_Read(void) {
GPIO_SetBits(PT100_PWR_PORT, PT100_PWR_PIN); // 恒流源上电
delay_ms(2); // 等稳定
adc_val = HSADC_ReadChannel(PT100_CH);
temp_raw = (adc_val * 3.3 / 16777215) - 0.2; // 消除线阻影响
Rpt100 = (temp_raw * 1000) / 0.385; // 换算电阻值
}
这段骚操作用三线制测电阻,硬核消除引线误差。注意那个0.2的修正值,是拿万用表实测的线损电压。

输出部分整活DAC:
// 4-20mA输出函数
void Output_4_20mA(float temp) {
static uint16_t last_dac = 0;
uint16_t target = (temp - TEMP_MIN) * (4095 / (TEMP_MAX - TEMP_MIN)) + 819; // 4mA对应819(12bit)
// 渐变防冲击
while(last_dac != target) {
last_dac += (target > last_dac) ? 1 : -1;
CS1237_WriteDAC(last_dac);
delay_us(50);
}
}
渐变输出这个骚操作是现场调试时学的——某次DAC突变把PLC干重启了,现在加了个软缓冲。
校准模式才是真有意思,长按按键进标定:
# 上位机校准脚本片段
def auto_cal():
send_modbus(0x06, 0x2000, 0x5555) # 进入校准模式
input("连接标准表后按回车...")
raw_low = read_adc_avg(10)
input("施加低温标定点后按回车...")
raw_high = read_adc_avg(10)
write_flash(raw_low, raw_high) # 写入两点校准参数
这种免电位器校准真香,省了开盖调试的麻烦。实测用冰水混合物和沸水标定,误差能压在0.5℃内。

pt100温度变送器,支持k型热电偶 4-20mA输出全套方案资料 2线、3线、隔离型。 (样板是2线电流/0-10V输出) 0-5V 0-10V输出 国产24位ADC精度0.01度,国产12位DAC千分之一线性价格便宜成熟方案。 485通信到串口示波器看温度电流曲线 2.4寸tft液晶屏,有串口屏接口。 外壳采用abs+透明上盖触摸按键组成。 2点仪表标定校准方式。
显示部分用的2.4寸串口屏,搞了个骚气界面:
-- 串口屏LUA脚本片段
function on_touch(x,y)
if y>200 then // 底部菜单区
page_jump(1)
end
end
add_chart("temp_curve", 10, 50, 300, 150) // 温度曲线区域
uart_send("add,text,20,220,当前温度:℃") // 动态文本
触摸逻辑简单粗暴,实测发现ABS外壳得把触摸灵敏度调高20%才好使。

隔离方案有个坑:电源隔离和信号隔离必须分开走线。有次偷懒共用DC-DC模块,结果485通信时ADC读数乱跳,后来老老实实上了金升阳的隔离电源模块才算稳。
这套方案BOM成本压到60以内,比进口方案香多了。最近正在打样第三版,准备上架某宝接单。有同好需要源码的可以私,记得备注来意。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)