点击蓝字 关注我们
目前软件经常有一个比较大的疑问就是,对于NTC电阻或者电阻型传感器的采样,当外部的5V参考电压发生变化的时候,我的ADC采样得到的电压是否可信,为了更好的解释这个问题,分为几个方面介绍一下ADC采样。
一
●
ADC的类型
第一节ADC类型内容引用自知乎文章,原文链接:https://zhuanlan.zhihu.com/p/258434654
目前应用比较广泛的ADC有逐次逼近型(SAR)和Sigma Delta型(Σ-Δ)型两种。
其中SAR类型使用数字电路控制DAC输出一个变化的电压,并用此电压和输入电压比较,经过多次比较逐渐使DAC输出接近输入电压,从而得出数字输出。目前我们单片机内部用到的ADC基本上都是这种类型的。这种类型的ADC在12位精度以内的时候价格比较便宜,超过12位就很贵了。
工作原理举例:假设ADC参考电压为5V,输入电压为3.2V。
压控寄存器最高位置为1,其余位为0,DAC输出参考电压一半2.5V,输入3.2 > 2.5,比较器输出1,压控寄存器最高位1保留。然后次高位置1,DAC输出3.75V,此时3.2V < 3.75V,比较器输出0,压控寄存器次高位置0。之后与3.125V比较得到1,与3.4375V比较得到0。这样如果是8位ADC,最后就得到数字输出10100011。
Sigma Delta型的工作原理稍微复杂一点,工作过程如下:输入电压减去DAC输出后的差值经过积分器后和0V电压比较,如果大于等于0V输出1,否则输出0。以一定的频率控制比较器输出形成比特流,控制DAC输出电压,1控制DAC输出+Vref参考电压,0控制DAC输出-Vref参考电压。当DAC在比较器输出的比特流控制下高速切换时,类似于PWM在输出端产生一个平均电压。容易看出,全1的比特流对应的平均电压为+Vref,全0的比特流对应的电压为-Vref,如果1和0各占一半,那么对应的电压是0V。
当平均电压Vadc小于输入Vin时,趋向于输出更多的1来增大Vadc。当平均电压Vadc大于Vin时,趋向于输出0来减小Vadc。这样一个合适的1,0比率的比特流会使Vadc最接近Vin,达到平衡状态。后级的数字滤波和裁决器从1,0的比率就可以推断出输入电压Vin的大小。
二
●
单片机ADC模块的供电
以英飞凌的TC3XX系列为例,ADC模块的参考电压为VAREF1,另外MCU还有很多其他电源输入管脚,有给ADC模块供电的管脚,有给内部flash供电的1.25V管脚(一般通过内部LDO转换得到,管脚仅用于连接滤波电容) ,还有给到震荡电路的5V等等。
以上面贴图的单片机为例,单片机是单5V供电,给到VAREF的电压也是通过电源芯片的5V给过来的,只是在中间加了一个磁珠用于滤波。因此给到MCU的ADC参考电压其实就是一个普通的5V而已,电源的输入范围在4.9V~5.1V之间。并且MCU的其他电源口也能接受这个电源输入的波动,对其工作没有影响。
三
●
外部传感器的供电拓扑
对于一般的ECU来说,外部会接很多其他的附件,包括一些NTC电阻或者需要5V供电的电阻型传感器,对于NTC电阻型的输入,其上拉电源比较好解决,一般再通过一个磁珠直接连到VAREF上去。而对于需要5V供电的传感器,则需要ECU提供5V参考电源,而这个参考电源肯定是需要满足ECU整体的短路测试要求的,那就不能直接将VAREF连接到ECU外部给到其他传感器来使用。
因此在进行电源设计的时候,需要设计一个Tracking电源,用于给到外部的传感器,Tracking可以理解为一个电压跟随器,因此Track输出的电压能够很好的跟随VAREF,方便理解就是Tracking输出的电压跟VAREF一直保持一致。
而当输出给到外部的Tracking电压出现短路或者负载过大造成电压变化,也不会影响到VRAEF。
因此对于需要外部供电的传感器的电路拓扑,就可以简化成下面SENSOR这个样子。用于计算电阻分压的上拉电压为5V-VAREF。而对于NTC类型的外部附件,其内部上拉电压就是VAREF。
假如软件开发中选择的参考电压是5V,AD是12位的,AD的每一位对应的电压就是5V/4096=1.22mV。那么当你的输入电压是大于或者等于5V的时候你的单片机的寄存器显示应该是4095,如果输入是0V的输入那单片机寄存器的值就是0 。
但是在这种应用的情况下,参考电压的精度就变的不是非常重要了,假设电源输出的电压因为硬件差异变成了5.1V,那AD对应的每一位的电压就是5.1V/4096=1.245mV。如果Sensor或者NTC刚好分压之后是参考电压的一半,也就是2.55V,这样在单片机内部解析出来的ADC值就是2550/1.245=2048。
但是在软件的计算中,它还是认为每一位ADC对应的电压是1.22mV,那么上报上来的电压就是2.5V。也就是实际输入2.55V,检测到的却是2.5V,那这对我们的NTC采样有没有影响呢?实际上也是没有影响的。
以10K上拉为例,假设这时候NTC也是10K。那么参考电压是5.1V,ADC端口的实际采集电压是2.55V,但是软件上报的是2.5V。
再看一下NTC电路的计算公式,在软件内部,根据欧姆定律有:5V*(NTC/(10K+NTC))=VADC,解方程NTC=10*VADC/(5-VADC)。VADC是已知的2.5V,计算出来NTC=10K,然后通过倒查R-T表,就能得到正确的温度了。
对于电阻型的外部传感器,原理也是一样的,这种传感器一般是以开度,或者行程与内部的电阻呈线性关系。假设该传感器是一个全范围阻值为10K的滑动变阻器,30%开度对应的就是该电阻传感器输出电压是30%*VAREF,那么就与NTC电阻一样的计算公式。VAREF变化的时候,传感器的输出电压也是呈比例的变化,最终计算得到的开度或者行程也与实际情况一致。
●
总结
往期推荐
BMS系列(1)——BMS的控制对象
CAN总线终端电阻的作用?为什么是120Ω?为什么是0.25W?
UDS的那些服务-$10诊断会话
BMS系列(2)——SHUNT、HALL、磁通门
觉得有用点击右下角在看↓