[技术问答] 请问:M451band-gap的电压是多少

[复制链接]
1328|16
 楼主| lqluocn@dl 发表于 2020-6-14 09:13 | 显示全部楼层 |阅读模式
使用了M453。由于在项目中使用了AVCC做参考电源,所以想band-gap的电压来反推算AVCC的准确电压。
598330983 发表于 2020-6-14 21:38 | 显示全部楼层
看数据手册和技术手册啊。
643757107 发表于 2020-6-15 13:19 | 显示全部楼层
官方有个其他型号的类似例子,可以参考。
gejigeji521 发表于 2020-6-15 15:37 | 显示全部楼层
有没有方法,怎么反推啊。
jasontu 发表于 2020-6-15 16:52 | 显示全部楼层
BANDGAP 1.25V
xinxianshi 发表于 2020-6-15 19:49 | 显示全部楼层
ADC好像可以接到内部Bandgap,然后另外一路接到AVCC,这样根据两个测量比值不就知道了。
598330983 发表于 2020-6-18 22:38 | 显示全部楼层
实现了吗
huangcunxiake 发表于 2020-6-20 09:03 | 显示全部楼层
默认是1.25,一般在1.22到1.27
玛尼玛尼哄 发表于 2020-6-20 21:37 | 显示全部楼层
参考N76E003的方法
玛尼玛尼哄 发表于 2020-6-20 21:37 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E885 ADC demo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "SFR_Macro.h"
  17. #include "Function_define.h"
  18. #include "Common.h"
  19. #include "Delay.h"

  20. //*****************  The Following is in define in Fucntion_define.h  ***************************
  21. //****** Always include Function_define.h call the define you want, detail see main(void) *******
  22. //***********************************************************************************************
  23. #if 0
  24. //#define Enable_ADC_BandGap        ADCCON0|=SET_BIT3;ADCCON0&=0xF8;                                                                                                                                                                                                                                                        //Band-gap 1.22V
  25. #endif

  26. double  Bandgap_Voltage,VDD_Voltage;                        //please always use "double" mode for this
  27. unsigned  char xdata ADCdataH[5], ADCdataL[5];
  28. int ADCsumH=0, ADCsumL=0;
  29. unsigned char ADCavgH,ADCavgL;

  30. void READ_BANDGAP()
  31. {
  32.                 UINT8 BandgapHigh,BandgapLow,BandgapMark;
  33.                 double Bandgap_Value,Bandgap_Voltage_Temp;
  34.        
  35.                 set_IAPEN;
  36.                 IAPCN = READ_UID;
  37.                 IAPAL = 0x0d;
  38.     IAPAH = 0x00;
  39.     set_IAPGO;
  40.                 BandgapLow = IAPFD;
  41.                 BandgapMark = BandgapLow&0xF0;
  42.                        
  43.                 if (BandgapMark==0x80)
  44.                 {
  45.                                 BandgapLow = BandgapLow&0x0F;
  46.                                 IAPAL = 0x0C;
  47.                                 IAPAH = 0x00;
  48.                                 set_IAPGO;
  49.                                 BandgapHigh = IAPFD;
  50.                                 Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
  51.                                 Bandgap_Voltage_Temp = Bandgap_Value*3/4;
  52.                                 Bandgap_Voltage = Bandgap_Voltage_Temp - 33;                        //the actually banggap voltage value is similar this value.
  53.                 }
  54.                 if (BandgapMark==0x00)
  55.                 {
  56.                                 BandgapLow = BandgapLow&0x0F;
  57.                                 IAPAL = 0x0C;
  58.                                 IAPAH = 0x00;
  59.                                 set_IAPGO;
  60.                                 BandgapHigh = IAPFD;
  61.                                 Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
  62.                                 Bandgap_Voltage= Bandgap_Value*3/4;
  63.                 }
  64.                 if (BandgapMark==0x90)
  65.                 {
  66.                                 IAPAL = 0x0E;
  67.                                 IAPAH = 0x00;
  68.                                 set_IAPGO;
  69.                                 BandgapHigh = IAPFD;
  70.                                 IAPAL = 0x0F;
  71.                                 IAPAH = 0x00;
  72.                                 set_IAPGO;
  73.                                 BandgapLow = IAPFD;
  74.                                 BandgapLow = BandgapLow&0x0F;
  75.                                 Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
  76.                                 Bandgap_Voltage= Bandgap_Value*3/4;
  77.                 }
  78.                 clr_IAPEN;
  79. //                        printf ("\n BG High = %bX",BandgapHigh);
  80. //                        printf ("\n BG Low = %bX",BandgapLow);
  81. //                        printf ("\n BG ROMMAP = %e",Bandgap_Voltage);
  82. }
  83.                
  84.                
  85. /******************************************************************************
  86. The main C function.  Program execution starts
  87. here after stack initialization.
  88. ******************************************************************************/
  89. void main (void)
  90. {
  91.                 double bgvalue;
  92.                 unsigned int i;
  93.        
  94.                 InitialUART0_Timer1(115200);
  95.                 READ_BANDGAP();
  96.                 printf ("\n BG ROMMAP = %e",Bandgap_Voltage);
  97.        
  98.                 while (1)
  99.                 {
  100.                                 Enable_ADC_BandGap;                                                                                               
  101.                                 CKDIV = 0x02;                                                                                                                        // IMPORTANT!! Modify system clock to 4MHz ,then add the ADC sampling clock base to add the sampling timing.
  102.                                 for(i=0;i<5;i++)                                                                                                        // All following ADC detect timing is 200uS run under 4MHz.
  103.                                 {
  104.                                                 clr_ADCF;
  105.                                                 set_ADCS;                                                                                                                               
  106.                                                 while(ADCF == 0);
  107.                                                 ADCdataH[i] = ADCRH;
  108.                                                 ADCdataL[i] = ADCRL;
  109.                                 }               
  110.                                 CKDIV = 0x00;                                                                                                                        // After ADC sampling, modify system clock back to 16MHz to run next code.
  111.                                 Disable_ADC;
  112.                                 for(i=2;i<5;i++)                                                                                                        // use the last 3 times data to make average
  113.                                 {
  114.                                         ADCsumH = ADCsumH + ADCdataH[i];
  115.                                         ADCsumL = ADCsumL + ADCdataL[i];
  116.                                 }                               
  117.                                 ADCavgH = ADCsumH/3;
  118.                                 ADCavgL = ADCsumL/3;
  119.                                 bgvalue = (ADCavgH<<4) + ADCavgL;
  120.                                 VDD_Voltage = (0x1000/bgvalue)*Bandgap_Voltage;
  121.                                 printf ("\n VDD voltage = %e", VDD_Voltage);
  122.                                 Timer0_Delay1ms(500);
  123.                                 ADCsumH = 0;
  124.                                 ADCsumL = 0;
  125.                 }
  126. }


mintspring 发表于 2020-6-20 22:15 | 显示全部楼层
这个系列官方没有提供参考例子,可以参考吗051的例子,很多函数是通用的。
drer 发表于 2020-7-6 17:07 | 显示全部楼层
怎么个反推法啊
gwsan 发表于 2020-7-6 17:08 | 显示全部楼层
还可以这样?
kxsi 发表于 2020-7-6 17:08 | 显示全部楼层
这样做准确吗
nawu 发表于 2020-7-6 17:08 | 显示全部楼层
呵呵呵 长见识了
qcliu 发表于 2020-7-6 17:09 | 显示全部楼层
有其他型号的例程可以参考?
huangcunxiake 发表于 2020-7-6 17:57 | 显示全部楼层
读取内部校正值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部