一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: suiyuan1967
收起左侧

三锂电串联均衡智能化充电器,终于完成!

[复制链接]
发表于 2021-6-23 09:00 | 显示全部楼层
大功率充电器怎么卖的
发表于 2021-6-23 22:49 | 显示全部楼层
学习了
 楼主| 发表于 2021-6-24 13:39 | 显示全部楼层
本帖最后由 suiyuan1967 于 2021-6-24 14:00 编辑

对于电池电压的检测,由于ATMEGA16A的adc精度只有10位,对于5.12V量程来说,精度只能做到5mv,所以我第一次想到尝试使用过采样技术希望把分辨率做到1.25mv。
在网上找了许多过采样相关的文档,看的还是一知半解,虽然基本明白了过采样的基本原理,但实际应用时障碍重重,经过反复尝试和计算,我写了一段代码,请明白人更正指导:

#define adc_count 6                                             
#define adc_count_N (1<<adc_count)


uint filter_adc(void)                     //
{
  uchar adc_na;
  uchar count;
  unsigned long sum=0;                           
  
  ADCSRA =0X84;                                       //
  
  for(adc_na=0;adc_na<16;adc_na++)           //连续取256个adc转换值
   {
      for(count=0;count<16;count++)         
       {
          ADCSRA |=BIT(ADSC);                 //启动AD转换
          while(!(ADCSRA &(BIT(ADIF))));      //判断AD转换是否结束
          sum +=ADC;                          //累加
       }
   }  
  return sum>>adc_count;                  //右移6位,等效除以64, 等效12位精度
}
void adc_conversion(void)                //读各通道转换值(通道0-4)
{
  uchar m;

  for(m=0;m<4;m++)
  {
    ADMUX=0x40+m;                                   //(0x40)参考电压AVCC,结果右对齐
    switch(m)
    {
      case 0:
             adc0=filter_adc();              //保存pwm值
                adc0=5100*adc0;
                adc0=adc0/4096;        
                adc_a=adc0;
      break;
      case 1:
             adc1=filter_adc();              //电池1电压
                adc1=5110*adc1;                 //
        adc1=adc1/4096;
                adc_v1=adc1/10;
      break;
      case 2:
             adc2=filter_adc();             //电池2电压
        adc2=5109*adc2;              //
                adc2=adc2/4096;
                adc_v2=adc2/10;
          break;
          case 3:
             adc3=filter_adc();             //电池3电压
        adc3=5105*adc3;              //
                adc3=adc3/4096;
                adc_v3=adc3/10;
          break;
    }
  }
}

我对于过采样的理解是这样的,适当增加ADC值的采样量,不取平均值(ADC和值/采样次数=平均值,这是10位的ADC值),而是通过右移把ADC和值的位数减到12位,在通过转换变成对应的电压值,变相等于把10位的分辨率扩展到了12位。
我的理解对吗?上面的代码表达正确吗?
发表于 2021-6-27 23:03 来自手机 | 显示全部楼层
我以前也做过6串充电器,程序没有编完就没时间整了,电路打板验证了,支持20a电流充电,主要电路是同步整流,可以升降压输出充电,就是均衡电路当时排序没有想到好算法毕竟是业余编程水平。

点评

均衡充电算法非常重要  详情 回复 发表于 2021-6-28 09:20
 楼主| 发表于 2021-6-28 09:20 | 显示全部楼层
yifabin023 发表于 2021-6-27 23:03
我以前也做过6串充电器,程序没有编完就没时间整了,电路打板验证了,支持20a电流充电,主要电路是同步整流 ...

均衡充电算法非常重要
 楼主| 发表于 2021-6-28 09:27 | 显示全部楼层
本帖最后由 suiyuan1967 于 2021-6-28 09:29 编辑

经过反复调试和验算,最终确定的过采样程序如下:
uint filter_adc(void)                     //
{
  uchar adc_x;                             //滤波计数
  uchar adc_count;                        //采样计数
  
  uint adc_oversampling_sum=0;            //12位过采样值
  unsigned long adc_bt_sum=0;             //10位采样值           
  
  ADCSRA =0X84;                                       //
  
  for(adc_x=0;adc_x<10;adc_x++)            //
   {
      for(adc_count=0;adc_count<16;adc_count++)   //16次10位采样,
       {
          ADCSRA |=BIT(ADSC);                    //启动AD转换
          while(!(ADCSRA &(BIT(ADIF))));         //判断AD转换是否结束
          adc_bt_sum +=ADC;                      //累加
       }
         adc_oversampling_sum +=adc_bt_sum>>2;      //右移2位,等效12位精度,并赋值  
         adc_bt_sum=0;                              //清零累加值
   }  
  return adc_oversampling_sum/10;               //12位采样值数字平滑滤波
}

实际使用效果还是不错的,分辨率提高到1.25mv,加入滤波算法后,4位显示电压值除第四位稍有跳动外,相当稳定!初次使用过采样圆满成功。
发表于 2021-7-2 16:52 | 显示全部楼层
LCD表头很漂亮!
发表于 2021-7-2 19:15 | 显示全部楼层
漂亮,标记个。准备做一套。就是屏幕不好找。

点评

前面提供了PCB设计图,你可以根据自有的显示屏重画显示部分的。  详情 回复 发表于 2021-7-3 13:24
 楼主| 发表于 2021-7-3 13:24 来自手机 | 显示全部楼层
talentfish 发表于 2021-7-2 19:15
漂亮,标记个。准备做一套。就是屏幕不好找。

前面提供了PCB设计图,你可以根据自有的显示屏重画显示部分的。
 楼主| 发表于 2021-7-5 14:22 | 显示全部楼层
新的PCB又打样回来了,做了一些修改,可以用接插件连接两块板子了,最关键的是PCB打样免费的!免费的!免费的!太激动了,嘉立创牛掰!
又开工了!
603079161.jpg
276767720.jpg

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-25 09:21 , Processed in 0.047477 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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