找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

N76E003 带隙电压 band-gap输入应用问题

[复制链接]
匿名  发表于 2019-8-16 09:49:10 |阅读模式
参考中文文档  19.1.4 带隙电压(Band-gap)输入应用

我参考文中代码 但是实际的打印效果并不理想 是我对问题理解有问题还是说怎么回事

  1. void READ_BANDGAP()
  2. {
  3.        
  4.         UINT8 a = 32;
  5.         UINT8 BandgapHigh,BandgapLow;
  6.         UINT16 Bandgap_Value;
  7.         set_IAPEN; // Enable IAPEN
  8.         IAPAL = 0x0C;
  9.         IAPAH = 0x00;
  10.         IAPCN = 0x04;
  11.         set_IAPGO; // Trig set IAPGO
  12.         BandgapHigh = IAPFD;
  13.         IAPAL = 0x0d;
  14.         IAPAH = 0x00;
  15.         IAPCN = 0x04;
  16.         set_IAPGO; // Trig set IAPGO
  17.         BandgapLow = IAPFD;
  18.         BandgapLow = BandgapLow&0x0F;
  19.         clr_IAPEN; // Disable IAPEN
  20.        
  21.         Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
  22.         Bandgap_Voltage = 3072/(0x1000/Bandgap_Value);
  23. }
复制代码

  1. InitialUART0_Timer3(115200);
  2.        
  3.         Timer1_Delay10ms(100);
  4.         Timer1_Delay10ms(100);
  5.         Timer1_Delay10ms(100);
  6.         Timer1_Delay10ms(100);
  7.         Timer1_Delay10ms(100);
  8.         Timer1_Delay10ms(100);
  9.         Timer1_Delay10ms(100);
  10.         Timer1_Delay10ms(100);
  11.        
  12. //                ÒÔϲ¿·Ö¹Ù·½Ô´Âë       
  13.        
  14.         READ_BANDGAP();
  15.         Enable_ADC_BandGap;
  16.         ADC_Bypass();
  17.         ADC_Bypass();
  18.         ADC_Bypass();
  19.         ADC_Bypass();
  20.         ADC_Bypass();
  21.         ADC_Bypass();
  22.         clr_ADCF;
  23.         set_ADCS;
  24.         while(ADCF == 0);
  25.         bgvalue = (ADCRH<<4) | ADCRL;
  26.         VDD_Voltage = (0xFFF/bgvalue)*Bandgap_Voltage;
  27.         printf ("\n Bandgap voltage = %e", Bandgap_Voltage);
  28.         printf ("\n VDD voltage = %e", VDD_Voltage);
  29.         while(1);
复制代码

实验结果

实验结果


加入延时 和 多次调用ADC_Bypass()是为了让芯片稳定 读出的数据更稳定
问题:
1.READ_BANDGAP 函数中3072 什么含义
2.程序 printf的打印值 为什么跟我理解差距太大 尤其是 Bandgap_voltage;



回复

使用道具

匿名  发表于 2019-8-16 14:50:47
1. 3072应该是出厂时校准用的参考电压3.072V吧
2.实际上写入的是电压值是乘上1000后整数值,用N76E003_BSP_Keil_C51_V1.0.6\Sample_Code\ADC_Bandgap_VDD_noDelay这个例程
读出的值应该会更精准点
回复 支持 1 反对 0

使用道具

匿名  发表于 2019-8-29 15:07:01
游客 112.64.146.x 发表于 2019-8-16 14:50
1. 3072应该是出厂时校准用的参考电压3.072V吧
2.实际上写入的是电压值是乘上1000后整数值,用N76E003_BSP_ ...

今天又被老板批评了 校准之后的输出 示例程序 打印值跟实际值相差0.0x他都觉得误差大 我是真的没有办法 因为项目要求 我试过了如果用万用表量取电源电压去计算ADC不用3.3 程序运行比较完美。所以bandgap这里的准确度影响很大
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU