[DemoCode下载] ML51测量供电点电压,这个例子很科学

[复制链接]
1005|6
 楼主| gejigeji521 发表于 2020-6-28 20:11 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 series use bandgap result to calculate VDD demo code
  12. //***********************************************************************************************************

  13. #include "ML51.h"


  14. double  VDD_Voltage,Bandgap_Voltage;             /*please always use "double" mode for this */
  15. unsigned char xdata ADCdataH[5], ADCdataL[5];
  16. unsigned int ADCsumH=0, ADCsumL=0;
  17.    
  18. /******************************************************************************
  19. The main C function.  Program execution starts
  20. here after stack initialization.
  21. ******************************************************************************/
  22. void main (void)
  23. {

  24.     unsigned int  ADC_BG_Result;
  25.   
  26.     MFP_P31_UART0_TXD;                                /* UART0 define @P0.5 & P0.6 multi function setting */
  27.     P31_QUASI_MODE;
  28.     UART_Open(24000000,UART0_Timer3,115200);            /* set UART0 output, baudrate 115200 generate by timer1 */
  29.     ENABLE_UART0_PRINTF;;
  30.   
  31. /* ADC bandgap initial
  32.   * include adc.c in Library for initial setting
  33. */
  34.     ADC_Open(ADC_SINGLE,VBG);  
  35. /* For the best result wait 10us delay for each sampling, ADCDIV=3, ADCAQT=7 is better */
  36.     ADC_ConvertTime(3,7);                             
  37. //    ADC_Calibration();

  38.     while (1)
  39.     {
  40.         clr_ADCCON0_ADCF;
  41.         set_ADCCON0_ADCS;
  42.         while(!(ADCCON0&SET_BIT7));
  43.         ADC_BG_Result = (ADCRH<<4) + ADCRL;
  44.         printf ("\n ADC_BG_Result = 0x%02X",ADC_BG_Result);
  45.         
  46. /***************************************************************************************/
  47. /*                  VDD  Now                         READ_BANDGAP() VALUE
  48. /*    ------------------------------------- = ----------------------------------
  49. /*    3072mV(Storage value test condition)      NOW ADC Bandgap convert reuslt
  50. /***************************************************************************************/
  51.         VDD_Voltage = ((float)READ_BANDGAP()/(float)ADC_BG_Result)*3.072;
  52.         printf ("\n VDD_Voltage = %e",VDD_Voltage);

  53.                         /***************************************************************************************/
  54. /*            Bandgap real voltage                    READ_BANDGAP() VALUE
  55. /*    ------------------------------------- = ----------------------------------
  56. /*    3072mV(Storage value test condition)              4096(12bit ADC)
  57. /***************************************************************************************/
  58.         Bandgap_Voltage = ((float)READ_BANDGAP()*3/4/1000);
  59.         printf ("\n Bandgap_Voltage = %e", Bandgap_Voltage);

  60.         ADCsumH = 0;
  61.         ADCsumL = 0;
  62.         printf ("\n " );
  63.         printf ("\n " );
  64.     }

  65. }




 楼主| gejigeji521 发表于 2020-6-28 20:12 | 显示全部楼层
看了论坛坛友发的一个贴,看了这个例子,发现很科学。
稳稳の幸福 发表于 2020-6-28 23:13 | 显示全部楼层
这个注释的很详细
小灵通2018 发表于 2020-6-28 23:48 | 显示全部楼层
不推敲你不知道四分之三怎么来的。
dongnanxibei 发表于 2020-6-29 11:54 | 显示全部楼层
3072÷3=1024
1024×4=4096
所以3072/4096=3/4
SteveDing 发表于 2020-7-9 11:42 | 显示全部楼层
这种帖子,遇到就是赚到,学习了
稳稳の幸福 发表于 2020-7-9 17:26 | 显示全部楼层
测量电池,或者供电电压就可以这么做。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2465

帖子

8

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