神农鼎 发表于 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
神农鼎 发表于 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);
如果这是电池电压为2961mVUSB测得电压7163mV
如果把电池电压变为4102mVUSB测得电压为5416mV Oscar 发表于 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电压。 乘风飞扬 发表于 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_CHASADC选择通道位设置0111ADC7为ADC采集信号口0x87
ADCTIM = 0x3f; //设置ADC内部时序
ADCCFG = 0x2F; // ADC频率设置:系统时钟/2/16,数据右对齐
}
我是开了两个通道之后的ADC7的是计算不是很清楚是不是我这样的呢
Oscar 发表于 2024-8-28 16:53
我已经计算处电池电压了;但是怎么反推------不是很理解它这段话
他的意思就是同时通过测量外部电压的ADC数值 和内部1.19V的ADC数值。就可以计算出外部电压了。
通过公式:
外部电压 / 测量外部ADC= 1.19V / 内部1.19VADC数值
这个公式四个变量 有三个已经知道外部电压也就可以计算出来 了 可以这么理解,内部1.19V的电压是经过出厂校准,并把实际值写入芯片的,采集外部信号和采集1.19V都是用的同样的参考(比如TL431或者VCC电源),假设采集外部信号和采集内部1.19V过程中这个基准是稳定的,那可以通过计算抵消掉外部基准的因素,两次采集值的比 等于 两个信号的电压比,通过比例换算即可得到外部信号的准确电压值。 晓飛飛 发表于 2024-8-30 14:59
可以这么理解,内部1.19V的电压是经过出厂校准,并把实际值写入芯片的,采集外部信号和采集1.19V都是用的同 ...
1.19/(*BGA)*ADC(1-15)就是ADC通道读到的数据对吧。
页:
1
[2]