1. 项目需求与设计思路
最近接了个工业测温的项目,需要用STM32F405RGT6做四通道温度采集系统。客户要求挺具体的:每个通道都要独立控制开关,能监测温度、电流和电压数据,还要上传到上位机。电压输出范围要可调(24V和28V两组),最关键的是要在-40℃环境下稳定工作120天!这低温要求真是考验硬件设计的功底了。
我先琢磨了一下整体架构。核心是用STM32F405RGT6做主控,这款芯片性价比很高,自带多路ADC和通信接口,正好满足四通道采集需求。温度传感器选了车规级的HTG3515CH,湿度输出是电压信号,温度测量用NTC热敏电阻。电流采样用0.1Ω/2W的采样电阻,电压采样用电阻分压加运放处理。最头疼的是MOS驱动部分,因为STM32的IO电压只有3.3V,直接驱动大电流MOS管会出问题,后来用了施密特触发器方案才解决。
2. 硬件选型关键点
2.1 主控芯片选择
STM32F405RGT6是我最终选定的主控芯片。这款芯片有3个12位ADC,最多18个通道,采样速率能达到2.4MSPS,完全满足四通道同时采样的需求。它还有4个USART接口,可以同时跟上位机通信和调试输出,特别适合这种多通道数据采集场景。
我在选型时比较过F103和F407系列,F405的性价比最合适。它的工作温度范围是-40到85℃,符合项目的低温要求。256KB的Flash和64KB的RAM也足够存储程序和数据处理。最让我满意的是它的ADC性能,在低温环境下依然能保持很好的线性度,这对温度测量的准确性至关重要。
2.2 运放选型与设计
模拟信号处理部分用了轨对轨运放LM358。为什么要用轨对轨?因为普通运放的输出范围会比电源电压小1-2V,而我们的信号范围经常接近电源电压,用普通运放会导致信号削顶。轨对轨运放的输出可以非常接近电源电压,这样才能保证ADC采样的准确性。
在实际调试中,我发现运放的供电电压也很关键。最初用的5V供电,但后来发现有些信号幅度接近5V,普通运放输出最高只能到3.5V左右,会丢失信号细节。换成轨对轨运放后,输出可以到4.9V,几乎接近电源电压,这样ADC就能采集到完整的信号波形。
2.3 传感器选型
温度传感器用了HTG3515CH,这是车规级的温湿度传感器。选择它主要是因为它的温度范围符合-40℃的要求,而且输出是模拟电压信号,处理起来比较简单。湿度输出是1.2V-3.5V对应10%-95%湿度,直接用ADC采集就可以。温度测量用内置的10K NTC热敏电阻,通过测量电阻值来换算温度。
电流采样电阻选了0.1Ω/2W的金属膜电阻。计算过功率损耗:3A电流时功耗是0.9W,留了足够的余量。电阻精度选了1%,这样电流测量误差可以控制在2%以内。在实际测试中,发现电阻的温度系数也很重要,普通电阻的温度系数太大,低温下阻值变化会导致测量误差,后来换了温度系数更小的电阻才解决。
3. 电源电路设计
3.1 电源架构设计
电源部分采用了三级转换方案:28V→5V→3.3V。输入28V先经过防反接二极管,用的是SS34肖特基二极管,压降只有0.3V,比普通二极管的0.7V损耗更小。然后经过DC-DC降压到5V,给运放和外围电路供电。最后用LDO降到3.3V给STM32供电。
为什么不用DC-DC直接降到3.3V?因为DC-DC的噪声比较大,而STM32的ADC对电源噪声很敏感。用LDO虽然效率低一些,但能提供更干净的电源,保证ADC采样精度。在实际测试中,LDO输出的纹波只有2mV,而DC-DC的输出纹波有20mV,验证了这个设计的必要性。
3.2 低温环境下的电源稳定性
低温下的电源稳定性是个大挑战。普通电解电容在-40℃下容量会急剧下降,导致电源滤波效果变差。我全部用了陶瓷电容和钽电容,这些电容的低温特性更好。DC-DC芯片也选了工业级的,支持-40℃工作温度。
在测试中发现,低温下LDO的压差会增大,原本0.2V的压差在-40℃时会增加到0.5V。所以设计时留了足够的余量,5V转3.3V的LDO输入电压至少保证在4V以上。实际测量显示,最坏情况下5V电源会降到4.8V,仍然满足LDO的要求。
4. 信号采样电路详解
4.1 电压采样设计
电压采样用了电阻分压方案。28V输入用10K和1K电阻分压,分压比是11:1,采样电压是2.54V。为什么用这么高的电阻值?是为了减小功耗,10K电阻上的电流只有2.8mA,功耗约0.08W。如果用1K电阻,功耗会达到0.8W,电阻就会发烫。
分压后接了电压跟随器,用LM358实现。电压跟随器的作用是隔离采样电路和ADC输入,避免ADC的输入阻抗影响采样精度。STM32的ADC输入阻抗约10KΩ,如果不加跟随器,会与分压电阻并联导致分压比变化,产生测量误差。
4.2 电流采样设计
电流采样是在地线上串接0.1Ω电阻,测量电阻两端的电压。3A电流时电压是0.3V,用运放放大10倍到3V,正好适合ADC采集。运放用了同相放大电路,输入阻抗高,不会影响采样电阻的工作。
最初用的放大倍数是20倍,结果发现最大输出会超过3.3V,导致信号削顶。重新计算后改为10倍放大,留了足够的余量。运放的电源用了5V,这样输出范围是0-4.9V,完全覆盖0-3V的信号范围。
4.3 温度信号处理
温度测量用了NTC热敏电阻,电阻值随温度变化。用10K电阻与NTC串联,接3.3V电源,测量NTC上的分压。在-40℃时NTC电阻是195.6K,分压约3.2V;在100℃时电阻是0.785K,分压约0.25V。这样整个温度范围内的电压变化很大,ADC能很好区分。
在软件中需要用查表法将电压值转换为温度值。我先计算了每个温度点对应的电压值,做成表格存储在Flash中。ADC采样后通过查表和线性插值得到温度值,这样比用公式计算更快更准确。
5. MOS驱动电路设计
5.1 MOS驱动挑战
最大的挑战是STM32的IO电压只有3.3V,而大多数MOS管的完全导通需要4.5V以上的Vgs电压。虽然有些低压MOS管标称3.3V可以导通,但实际测试发现,在3.3V驱动下导通电阻很大,通过3A电流时压降有0.5V,功耗1.5W,MOS管烫得根本不能摸。
试过好几款标称3.3V驱动的MOS管,实际表现都不理想。后来决定用施密特触发器方案,将驱动电压升到8V左右,这样MOS管可以完全导通,导通电阻只有8.9mΩ,3A电流时功耗不到0.1W,温升很小。
5.2 施密特触发器驱动方案
施密特触发器用了74HC14,工作电压5V。STM32的PWM信号先经过74HC14整形,然后通过三极管电平转换到8V驱动MOS管。当PWM为高时,三极管导通,MOS管栅极被拉低;PWM为低时,三极管截止,电阻分压产生8V驱动电压。
这个方案的优点是驱动电压稳定,不受电源波动影响。测试中发现,即使电源电压从24V变化到28V,驱动电压始终保持在8V左右,MOS管工作状态很稳定。而且74HC14的施密特特性可以消除信号毛刺,提高抗干扰能力。
5.3 散热设计
虽然MOS管的功耗很小,但通过3A电流时还是会有温升。PCB布局时在MOS管下面加了大的铜皮,并且打了多个过孔到底层帮助散热。实测在28V/3A工作条件下,MOS管温度比环境温度高15℃,完全在安全范围内。
每个通道的MOS管分开布置,避免热集中。四路同时工作时,板子上的热量分布比较均匀,没有出现局部过热的情况。连续工作24小时后测量,各点温度都很稳定。
6. 通信接口设计
6.1 USART配置
用了两个USART接口,USART1用于与上位机通信,USART2用于调试输出。波特率都设为115200,8位数据位,无校验,1位停止位。USART1用了硬件流控制,RTS和CTS信号都接上,保证大数据量传输时不丢数据。
在软件上做了数据校验和重传机制。每个数据包加上CRC校验,如果校验失败就请求重发。实测这种机制在长线传输时很有效,即使有干扰也能保证数据正确性。
6.2 I2C接口设计
I2C接口用于扩展IO和连接传感器。用了PCA9546ADR作为I2C开关,可以同时连接多个I2C设备。I2C总线加了2.2K上拉电阻,这个阻值是在速度和功耗之间权衡的结果。电阻太小功耗大,电阻太大上升沿太缓,会影响通信距离。
在实际调试中发现,I2C总线的走线长度不能太长,最好控制在20cm以内。如果太长需要减小上拉电阻值,或者加缓冲器。我最后把电阻改为1.5K,这样即使30cm长的走线也能可靠工作。
7. 低温环境下的稳定性措施
7.1 元器件选型
所有元器件都选了工业级,支持-40℃工作温度。特别是电容,普通电解电容在低温下会失效,全部用了陶瓷电容和钽电容。晶振也选了工业级的,低温下频率偏移很小,保证通信波特率准确。
电阻选了金属膜电阻,温度系数小。普通碳膜电阻的温度系数有500ppm/℃,而金属膜电阻只有50ppm/℃,低温下的阻值变化小,不会影响采样精度。
7.2 PCB设计注意事项
PCB用了2oz铜厚,比标准的1oz铜厚更耐大电流。电源线宽2mm,可以通过3A电流。每个通道的电源线分开布置,减少相互干扰。在MOS管和采样电阻下面加了散热焊盘,通过过孔到底层帮助散热。
板子四周加了安装孔,用于固定和散热。测试中发现,如果板子悬空,低温下容易产生振动,导致连接器接触不良。用螺丝固定后这个问题就解决了。
8. 实际调试中的问题与解决
8.1 ADC采样精度问题
最初测试发现ADC采样值跳动很大,有20-30个LSB的噪声。检查发现是电源噪声导致的,后来在ADC参考电压引脚加了10μF钽电容和0.1μF陶瓷电容并联滤波,噪声降到3-4个LSB。
还发现采样时间设置太短,导致采样不完整。STM32的ADC采样时间需要根据信号源阻抗来设置,我们的信号源阻抗约10KΩ,采样时间需要设置到239.5个周期,这样采样才充分。
8.2 低温启动问题
在-40℃测试时,发现有时无法启动。排查发现是DC-DC芯片的启动电压变高了,常温下16V就能启动,低温下需要18V以上。后来在电源输入端加了预充电电路,先用小电流给电容充电,电压达到18V后再开启DC-DC,解决了低温启动问题。
8.3 通信干扰问题
在四路同时工作时,发现USART通信有时会出错。用示波器测量发现,当MOS开关切换时,电源上会有毛刺,干扰了USART通信。后在电源输入端加了π型滤波,并且USART线路用了屏蔽线,问题得到解决。
9. 软件设计要点
9.1 多通道采样调度
用了DMA加ADC扫描模式,四路通道自动连续采样。设置好采样序列后,ADC会自动按顺序采样各个通道,采样结果通过DMA传到内存数组,不需要CPU干预。这样CPU可以处理其他任务,提高系统效率。
采样数据用了滑动平均滤波,每个通道保存最近8次采样值,求平均后作为最终结果。这样既保证了实时性,又抑制了噪声。
9.2 温度补偿算法
发现了ADC本身也有温度系数,低温下增益会变化。做了温度补偿算法,用片内温度传感器监测ADC温度,根据温度值修正采样结果。修正后
2万+



被折叠的 条评论
为什么被折叠?



