打印
[技术问答]

N76E003 bandgap

[复制链接]
1354|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1028844836|  楼主 | 2019-8-13 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1028844836 于 2019-8-13 18:00 编辑

18.1.4 带隙电压(Band-gap) 输入应用
N76E003的ADC可以选择内部Band-gap电压作为输入脚,能用来反推ADC的参考电压,得到更精准的
ADC结果。
常温下,所有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位。
读取和计算步骤
用读取UID的方式,以IAP 读取Band-gap的值为例
2. 合并高8位和低4位
3. 使用下列公式换算成实际的电压值:
计算公式:
计算范例:
读取UID地址后的2个字节,第一个字节值为0x64,第二个字节值为0x0E,合并为0x64E = 1614,换算电压值结果为:
例程如下:
#define set_IAPEN BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON|=SET_BIT0 ;EA=BIT_TMP #define set_IAPGO BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPTRG|=SET_BIT0 ;EA=BIT_TMP #define clr_IAPEN BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON&=~SET_BIT0;EA=BIT_TMP void READ_BANDGAP() { UINT8 BandgapHigh,BandgapLow; Set_IAPEN; // Enable IAPEN IAPAL = 0x0C; IAPAH = 0x00; IAPCN = 0x04; set_IAPGO; // Trig set IAPGO BandgapHigh = IAPFD; IAPAL = 0x0d; IAPAH = 0x00; IAPCN = 0x04; set_IAPGO; // Trig set IAPGO BandgapLow = IAPFD; BandgapLow = BandgapLow&0x0F; Clr_IAPEN; // Disable IAPEN Bandgap_Value = (BandgapHigh<<4)+BandgapLow; Bandgap_Voltage = 3072/(0x1000/Bandgap_Value);
}
用读取到的Band-gap值通过ADC计算VDD值:
根据ADC转换出的带隙电压值,与满量程ADC的比例关系,乘以读取到的实际带隙电压值,可以算出VDD。
对于N76E003,为了得到更准确的内部带隙电压(band-gap)输入ADC转换值,建议在读取时,放弃模块使能后的头三笔资料。而后,只要不关闭ADC模块,ADC转换结果都是如规格所列。提醒:程序中如果关闭了ADC模块,请记得下次打开时,需要再次丢弃3笔。
double Bandgap_Voltage,VDD_Voltage; void ADC_Bypass (void) // The first three times convert should be bypass { unsigned char ozc; for (ozc=0;ozc<0x03;ozc++) { clr_ADCF; set_ADCS; while(ADCF == 0); } } void main (void) { double bgvalue; READ_BANDGAP(); Enable_ADC_BandGap; ADC_Bypass(); clr_ADCF; set_ADCS; while(ADCF == 0); bgvalue = (ADCRH<<4) + ADCRL; VDD_Voltage = (0xFFF/bgvalue)*Bandgap_Voltage; printf ("\n Bandgap voltage = %e", Bandgap_Voltage); printf ("\n VDD voltage = %e", VDD_Voltage); while(1); }


以上内容为中文版 规格书191页内容
为什么这个打印的VDD 和实际相差巨大 。 而且这份文档中的代码到底能不能直接用。





使用特权

评论回复
沙发
Q80351951| | 2019-8-13 18:05 | 只看该作者
感觉不能用,不准。

使用特权

评论回复
板凳
zhuomuniao110| | 2019-8-14 12:32 | 只看该作者
前3笔应该还没有稳定导致的,确实应该丢弃,ADC转化也是,如果采集的话刚启动时候的初始化部分就该先丢弃几笔。然后才进行用。

使用特权

评论回复
评论
1028844836 2019-8-15 09:35 回复TA
首先 谢谢你能回到我 这个官方源码中 ADCBypass 这个函数丢弃了前三笔 但是没啥用 
地板
玛尼玛尼哄| | 2019-8-14 20:38 | 只看该作者
这个代码排版可以用高级编辑里的代码框啊。

使用特权

评论回复
5
玛尼玛尼哄| | 2019-8-14 20:38 | 只看该作者
丢弃前几笔是正常的,好多芯片是这样。

使用特权

评论回复
6
wanduzi| | 2019-8-14 23:12 | 只看该作者
这个还是很好用的,性价比很好,目前MS系列的性价比更高,更便宜。

使用特权

评论回复
7
xuanhuanzi| | 2019-8-14 23:27 | 只看该作者
应该开始时候还没有电压稳定,可以试试先等待片刻再读取。

使用特权

评论回复
评论
1028844836 2019-8-15 09:37 回复TA
首先 谢谢您的回复 不知道您有没有 使用过这个功能我最后的打印4.1V左右 这个差太多了 ,而且程序最开始初始化串口之后我延时了几秒还是没有用 
8
1028844836|  楼主 | 2019-8-15 09:35 | 只看该作者
玛尼玛尼哄 发表于 2019-8-14 20:38
这个代码排版可以用高级编辑里的代码框啊。

哈哈 第一次发帖子 不会用 谢谢 我下次注意

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝