【STM8L 电池电压采样 批量 ADC 批量精度控制在10mV以内】

本文详细描述了在STM8L产品中使用1S1P锂电池进行电压测量时遇到的技术难点,包括参考电压稳定性、电阻分压精度、ADC输入阻抗以及PCB布局对测量的影响。通过测试数据展示了误差控制策略,并讨论了如何在低功耗设计下实现高精度测量。

目录

1.背景

2.技术难点

3.测试数据

4.总结


1.背景

      在一款STM8L低功耗产品中使用的是1S1P(一串一并,即单节)锂电池同时容量1200mAh,需要测量电池电压(3.7V~4.2V),测量范围只有500mV的识别区间,不定时需要驱动3V 100mA的重载(相对锂电池容量来说),保证产品在批量中的电池电压一致性。

2.技术难点

      控制最终误差的来源:

     A.稳定采样参考电压3.3V: 

      采用REF3033,其低温漂55ppm/℃,低Iq为42uA,0.2%初始精度,即最大6mV初始误差。

     解释这个误差为什么重要,拿我们平常最常用的LDO(AMS1117-3.3V),其中通过截取TWGMC(台湾迪嘉) 规格书参数来举例子:

     下面展示ADC读取函数的代码:

float ADC_Data_Read()
{
  u16 temp_adc_value;
  float adc_value;
  ADC_SoftwareStartConv(ADC1);      //启动ADC

  while(ADC_GetFlagStatus(ADC1 , ADC_FLAG_EOC) == 0);  //等待转换结束
  ADC_ClearFlag(ADC1 , ADC_FLAG_EOC);                 //清除中断标志
//  *AD_Value = ADC_GetConversionValue(ADC1);           //读取ADC1,通道1的转换结果
  temp_adc_value = ADC_GetConversionValue(ADC1);
  adc_value=((float)temp_adc_value * 3.3)/4096.0;     

  return adc_value;
}

      假设我们读取2.000V电压,其中一块主板的LDO恰巧碰到最低输出只有3.234V参考电压,而程序中参考电压保持3.3V,那么该主板12bit ADC读到的参数为:

(2.000*4096)/3.234=2533LSB

       因此程序上按3.3V转换为电压参数为:

(2533*3.3)/4096=2.0407V

      这里凭空就多出来40mV的ADC读取误差,假设这2V是电池电压经按一半比例分压得到的,实际的电池的读取差误将达到80mV。同理采用REF3033最大理论读取误差7.2mV。

B.电阻分压精度:

     锂电池采用2个300K 1%分压得到直接连接单片机的ADC管脚,同时预留使用运放做同相跟随。

上述方案的影响有如下几种:

        1).电阻的大小与精度:电阻选小了,锂电池待机功耗就高了,电阻选大了,远大于ADC管脚的输入阻抗了,分压就偏小导致测量就不准了,理论上就需要接运放做阻抗匹配了;另外精度越高越好!

        假设使用300K 1%的电阻,运气不好均选中了最大偏差即一个303K上拉电阻与一个297K下拉电阻进行分压,同时假设是4.000V的锂电池进行分压,则实际分压被单片机读为:

4.000V*(297/(297+303))*2=3.960V

因此就以上假设情况下,则会出现40mV的误差。同理使用300K 0.1%的电阻,则理论最大产生4mV的误差。

        2).ADC的采样频率:由于这个项目需要ADC的频率不需要太高,就直接选取1MHz的主频,这样ADC引脚的输入阻抗可以允许的高一点,通常情况采样频率越低,允许的输入阻抗就越高。

        3).ADC的输入阻抗:参考规格书最大为50K,但是这个参数为设计保证参数,但没有在生产过程中测试,因此就这一点可以挑战测试提高它的输入阻抗看是否测得准一点。

        4).运放:目前预留选用的LMV321,输入失调电压典型值有1.7mV,最大值7mV。这款芯片选得不好,应该选择输入失调电压更小达到uV级别。目前断开R15后测试的失调电压有17mV,我怀疑是不是反馈回路没有接匹配电阻造成的。(有兴趣的小朋友可以选择一个小的输入失调电压试试精度的影响)

    C.PCB电路的布局布线

      影响比较大就是电路的布局布线了,电池电压的采样电路就相当于是典型的低频模拟电路了,在设计模数混合电路时,特别注意参考地的设计了,在PCB设计中地平面作为参考平面,所有信号的返回电流通过地平面传递了,但是铜也是有电阻率的(如长1200mil宽50mil的铜皮直流电阻约为10mΩ),锂电池模拟信号返回路径上如果有其它信号的返回电流共用(共阻抗干扰),假设这个返回电流有0.1A,则在路径上叠加1mV测量误差。因此需要去规划好一些大电流回流路径,若无法避免也应尽量与模拟信号的回流路径呈十字交叉型,这样模拟信号被干扰降到较低水平。(模数混合电路的布线布局需要大篇章讲解),如果布线布局不合理就合理容易受干扰,想象一下信号路径与其回流路径上在垂直和水平方向上的投影能形成比较大环路,就容易干扰和被干扰。

    D.测量设备

     不要用3位半数字万用表去测量,那样误差很大,建议使用六位半以上的测量仪器去测试,这样测试出来精度更高,可以直接采样端电池电压。另外不要试图用测试仪器去测试电阻分压后的电压值,这个值会偏低。这是因为表笔也是存在输入阻抗通常在10MΩ,会并联在采样电阻上,导致一种现象表笔测量值偏低,但单片机ADC读取数值接近真实值。

     验证一致性的方法为,使用同一块锂电池,分别接上2块主板上,让2块主板大电流驱动设备停止工作开机,观察2块主板ADC读数是否接近。

 

3.测试数据

    

环温18℃
测试设备型号ME010标准版(六位半高精度数字直流电流电压表)
硬件设置R11、R15使用300K 1%电阻,并未连接运放跟随直接
连接至ADC管脚(备注如果使用300K 0.1%精度电阻效果更佳)
主板编号单片机读取数值ADC参考电压
(REF3033)
锂电池测试电压实际偏差备注
主板13.897803V3.29786V3.89580V2mV锂电池1测试
主板23.897803V3.30124V2mV
主板13.772119V3.29800V3.77077V1.4mV锂电池2测试
主板23.773730V3.30136V3mV
主板14.057324V3.29797V4.05589V1.5mV锂电池3测试
主板24.058936V3.30130V3.1mV

4.总结

       1)可以看出不同主板之间,测试同一块锂电池测得的电压差异在1.6mV以内,整体误差在4mV以内(目前只测了2块主板的对比,对比数据量太少了)。

       2)按理论上使用300K 0.1%电阻将会误差可能进一步降低,目前手上没有这个精度电阻未测,后续如果有将继续测试一下,观察一下趋势。

       3)理论上ADC管脚的输入阻抗只用50KΩ,但是将采样频率降低至1MHz之后,依然能得到较为准确直流电压数值,因此规格书中的参数可以根据自己的理解做合理化设计一样也可以得到比较实用电压数据。前提是自己预留好设计进行验证,像ST公司最新的出STM32G系列单片由于设置的主频比较到,使用大电阻分压,误差会呈现的比较大。

      4)锂电池输入电压变化也会影响ADC参考电压,但基准电压芯片线性调整率在可控范围内。目前没有测试环境温度变化的影响。

      5)12bit ADC 在3.3V参考电压情况下,1LSB=0.8mV。更高精度分辨率就需要16bit、24bitADC进行采样了。

       如果挑战批量测量误差控制在100uV以内,又满足低功耗设计则应该怎么做。最好一块主板的精度较为容易,要获取批量稳定性这难度就不止一点。欢迎大佬批评指正,第一篇技术博客写得比较啰嗦,期望能帮助到有此设计需求的工程师。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值