找回密码
 立即注册
楼主: Oscar

关于8H3K64S2-45I-TSSOP20已经通过通道15读取电池电压后

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-04-30 07:44:00

6

主题

25

回帖

784

积分

高级会员

积分
784
发表于 2024-8-29 08:37:08 | 显示全部楼层
本帖最后由 Oscar 于 2024-8-29 08:38 编辑
神*** 发表于 2024-8-29 08:17
利用ADC15在内部固定接的1.19V的辅助固定信号源,反推其他通道的输入电压 - ADC/比较器,DMA支持的12位AD ...

adc_value = Fliter_average();
batt_v = (int)(4096L**BGV/ adc_value);            // 计算电池电压,单位:mV
    ADC_USBconfig();
    adc_usbvalue = Fliter_average();
    usb_voltage = (int)((batt_v/adc_value)*adc_usbvalue*11);
测的电池电压2.967V没错  但是我加入USB  电压是7162mV   
如果电池电压变为4.192v后  USB测得电池电压5.471
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-04-30 07:44:00

6

主题

25

回帖

784

积分

高级会员

积分
784
发表于 2024-8-29 08:41:16 | 显示全部楼层
神*** 发表于 2024-8-29 08:17
利用ADC15在内部固定接的1.19V的辅助固定信号源,反推其他通道的输入电压 - ADC/比较器,DMA支持的12位AD ...

    ADC_BATconfig();
    adc_value = Fliter_average();
    batt_v = (int)(4096L**BGV/ adc_value);            // 计算电池电压,单位:mV
    ADC_USBconfig();
    adc_usbvalue = Fliter_average();
    usb_voltage = (int)((batt_v/adc_value)*adc_usbvalue*11);
   如果这是电池电压为2961mV  USB测得电压7163mV
  如果把电池电压变为4102mV  USB测得电压为5416mV
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-8-29 11:06:40 | 显示全部楼层
Osc*** 发表于 2024-8-29 08:41
ADC_BATconfig();
    adc_value = Fliter_average();
    batt_v = (int)(4096L**BGV/ adc_value); ...

利用15通道反推外部电压/电池电压,这种方式不需要使用ADC脚位测外部电压。
也就是没必要接你的ADC_VUSB到ADC脚位。

VUSB如果是给MCU供电的话,同时接到MCU的VCC与Vref脚。
Vref电压/4096 = 1.19V/ADC15
只要采样ADC15通道的ADC值,就能使用以上公式计算出Vref电压,也就是VUSB电压。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-04-30 07:44:00

6

主题

25

回帖

784

积分

高级会员

积分
784
发表于 2024-8-29 16:00:46 | 显示全部楼层
乘风*** 发表于 2024-8-29 11:06
利用15通道反推外部电压/电池电压,这种方式不需要使用ADC脚位测外部电压。
也就是没必要接你的ADC_VUSB ...

void ADC_BATconfig(void)
{
   ADCTIM = 0x3f;    //设置ADC内部时序
         ADCCFG = 0x2F;           // ADC频率设置:系统时钟/2/16,数据右对齐
   ADC_CONTR = 0x8f;  //使能 ADC 模块,并选择第15 通道
   BGV=(int idata *)0xef;
}



void ADC_USBconfig(void)
{
   P1M0 &= ~0x80; P1M1 |= 0x80;
         P_SW2 |= 0x80;
   ADC_CONTR = 0x87; // 清除低3位并设置新的通道号 //使能ADC模块,确认ADC_CHAS[3:0]ADC选择通道位设置0111  ADC7为ADC采集信号口0x87
   ADCTIM = 0x3f;    //设置ADC内部时序
         ADCCFG = 0x2F;           // ADC频率设置:系统时钟/2/16,数据右对齐
  
}
我是开了两个通道  之后的ADC7的是计算不是很清楚  是不是我这样的呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:385
  • 最近打卡:2025-05-01 08:05:45

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2024-8-30 14:48:38 | 显示全部楼层
Osc*** 发表于 2024-8-28 16:53
我已经计算处电池电压了;但是怎么反推  ------不是很理解它这段话

他的意思就是同时通过测量外部电压的ADC数值 和内部1.19V的ADC数值。就可以计算出外部电压了。
通过公式:
外部电压 / 测量外部ADC  = 1.19V / 内部1.19VADC数值
这个公式四个变量 有三个已经知道  外部电压也就可以计算出来 了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-8-30 14:59:46 | 显示全部楼层
可以这么理解,内部1.19V的电压是经过出厂校准,并把实际值写入芯片的,采集外部信号和采集1.19V都是用的同样的参考(比如TL431或者VCC电源),假设采集外部信号和采集内部1.19V过程中这个基准是稳定的,那可以通过计算抵消掉外部基准的因素,两次采集值的比 等于 两个信号的电压比,通过比例换算即可得到外部信号的准确电压值。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-04-30 07:44:00

6

主题

25

回帖

784

积分

高级会员

积分
784
发表于 2024-8-31 16:09:58 | 显示全部楼层
晓*** 发表于 2024-8-30 14:59
可以这么理解,内部1.19V的电压是经过出厂校准,并把实际值写入芯片的,采集外部信号和采集1.19V都是用的同 ...

1.19/(*BGA)*ADC(1-15)  就是ADC通道读到的数据对吧。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:35 , Processed in 0.138656 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表