最近又有人问我为什么参考电压变化对你的模拟采样没有影响呢,我记得以前写过一个详细的说明文档,今天就把那个文档重新捞出来直接发出来,顺便温习一下。
一
●
ADC的类型
说这个问题之前,首先介绍一下当前常见的两种ADC类型,目前应用比较广泛的ADC有逐次逼近型(SAR)和Sigma Delta型(Σ-Δ)型两种。
其中SAR类型使用数字电路控制DAC输出一个变化的电压,并用此电压和输入电压比较,经过多次比较逐渐使DAC输出接近输入电压,从而得出数字输出。目前我们单片机内部用到的ADC基本上都是这种类型的。这种类型的ADC在12位精度以内的时候价格比较便宜,超过12位就很贵了。
工作原理举例:假设ADC参考电压为5V,输入电压为3.2V。
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等等。
三
●
外部传感器的供电
对于一般的ECU来说,外部会接很多其他的附件,包括一些NTC电阻或者需要5V供电的电阻型传感器,对于NTC电阻型的输入,其上拉电源比较好解决,一般再通过一个磁珠直接连到VAREF上去。而对于需要5V供电的传感器,则需要ECU提供5V参考电源,而这个参考电源肯定是需要满足ECU整体的短路测试要求的,那就不能直接将VAREF连接到ECU外部给到其他传感器来使用。
因此在进行电源设计的时候,需要设计一个Tracking电源,用于给到外部的传感器,Tracking可以理解为一个电压跟随器,因此tracking输出的电压能够很好的跟随VAREF,方便理解就是Tracking输出的电压跟VAREF一直保持一致。
而当输出给到外部的Tracking电压出现短路或者负载过大造成电压变化,也不会影响到VRAEF。
假如软件开发中选择的参考电压是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变化的时候,传感器的输出电压也是呈比例的变化,最终计算得到的开度或者行程也与实际情况一致。
●
总结
往期推荐
我所接触的国产汽车芯片厂家
电流检测方案的演变及BJB的兴起
CAN总线指定帧唤醒的硬件实现方式
域控时代的新兴器件-E-Fuse
觉得有用点击右下角在看↓