本帖最后由 qin123541 于 2022-10-4 21:13 编辑

       泰凌B91系列芯片支持通过GPIO模拟信号输入采集供电电压,也支持电池电压(Vbat)直接采集。
       电压采集方式选择:
       1 GPIO方式:可以直接接gpio采集, 如果电压超过 ADC 采样范围时,必须使⽤外部分压电路采集,再输⼊到采样点,
       2 Vbat方式: 电压范围1.8~3.5V时,
       本文基于TLSR951x  SDK V2.0.0里面ADC_demo修改而来。代码修改如下:
        1  app_config.h里将 ADC_SAMPLE_MODE修改为ADC_VBAT_SAMPLE        
        注意app.c里面sys_init(LDO_1P4_LDO_1P8, VBAT_MAX_VALUE_LESS_THAN_3V6);后面必须设置为VBAT_MAX_VALUE_LESS_THAN_3V6。
        2 app.c里面添加#include "printf.h",一般串口输出采集的电池电压值进行对比。
        3 定义u16 vol_temp; //电压采集中间变量
          u16 vol; //电压平均值
          u8 num=10;//采集电压10次求平均值
        4 将delay_ms(1000);延时改为delay_ms(100);
        采集10次电压,然后求平均值,把此值跟供电电压对比,主函数源码如下。
void main_loop (void)
{
#if (ADC_MODE == ADC_DMA_MODE)
#if (ADC_SAMPLE_MODE != ADC_TEMP_SENSOR_SAMPLE)
        adc_vol_mv_val = adc_get_voltage_dma();
#else
        adc_temp_val = adc_get_temperature_dma();
#endif
#elif(ADC_MODE == ADC_NDMA_MODE)
#if (ADC_SAMPLE_MODE != ADC_TEMP_SENSOR_SAMPLE)
        adc_vol_mv_val = adc_get_voltage();
#else
        adc_temp_val = adc_get_temperature();
#endif
#endif
        delay_ms(100);
        gpio_toggle(LED1);
        vol_temp+=adc_vol_mv_val;
        if(++num==10)
        {
        num=0;
        vol=vol_temp/10;
    printf("%d\n",vol);             
        }       
}
测试对比结果:待续!