本帖最后由 注销 于 2020-9-8 11:38 编辑
首先让我们来探究下,什么是带隙电压。
1、我们需要了解ADC测量的影响因素,举个简单的例子。
我们给单片机供电是2.8V,此时用ADC去测量一个1.3V,ADCRH最后得到的值,可能就是142.
如果单片供电是3.3V,这时候再去测量1.3V,ADCRH最后得到的值可能就不再是142了.
如果是5V,得到的数据可能更低。
以上这个简单的例子,相信已经能说明一个简单的问题,ADC得到的数据,会随着供电电压的改变而改变。为了解决这个问题,人们想出了使用外部基准的办法,大致的方法就是使用两个ADC通道,一个通道测量外部基准(如TI431),一个通道进行对目标的测量。知道了基准值,就可以得到一个相对准确的测量值。但这种方法需要占用两个ADC通道,并且需要外部器件,成本较高。这时候就可以使用单片机内置的带隙电压了~ 2、带隙电压的构成。
大概如下图所示。R3/R4使用正负温度系数材料,是为了避免温度对分压电阻造成的影响,这样温差造成的影响可以进行互补,避免带隙电压不稳。
3、N76E003的带隙电压。 常温下,所有N76E003的Band-gap电压值会校准在1.17V ~ 1.27 V内。如果想要知道每颗N76E003的
Band-gap实际电压值,可以通过读取UID地址后的2个bytes值来确认。 UID 后的2个bytes储存Band-gap
的实际值,总共12个有效bit。第一个byte是高8位,第二个byte的低4位为12 bit的低4位。
由上所知,我们知道了N76间隙电压大致范围,以及UID中存储着实际数据,接下来我们将在程序中看下,如何得到间隙电压。(以下程序源自新唐官方例程修改)
需要注意的是: 对于N76E003,为了得到更准确的内部带隙电压(band-gap)输入ADC转换值,建议在读取时,放弃模块使能
后的头三笔资料。而后,只要不关闭ADC模块, ADC转换结果都是如规格所列。提醒:程序中如果关闭
了ADC模块,请记得下次打开时,需要再次丢弃3笔。
计算ADC时,通常使用以下公式
实际电压X=测量值Y(VDD/4096)
根据上式,计算带隙电压与测量到的带隙电压的比值,然后12bit深度4096,就可以得到当前的VDD电压,如下式
VDD=4096(UID中的带隙电压/ADC测量得到的带隙电压)
故有
VDD/4096=(UID中的带隙电压/ADC测量得到的带隙电压)
令(UID中的带隙电压/ADC测量得到的带隙电压)=Coe
实际电压X=测量值Y * Coe
用上式的比例系数,在普通测量时,就可以用修来正测量值,当然你也可以用带隙电压来推算VDD值。 程序的大概流程,先使用 READ_BANDGAP();函数,得到UID中的带隙电压,再通过ADC测量一次带隙电压,最终得到Coe(系数),后使能相关ADC通道,在中断中,测量值*Coe得到修正的数据。
|