基于Arduino微控制器atmega328p-pu对微控制器编程实现

描述

硬件部件:

atmega328p-pu× 1个

带按钮的旋转编码器× 1个

2.5伏参考电压,ad680jtz× 1个

8 MHz晶振× 1个

电容22 pF× 2个

电容100 nF× 5

电阻1M欧姆× 2个

电阻10k欧姆× 10

电阻4.75k欧姆× 1个

电阻1k欧姆× 7

电阻220欧姆× 1个

电阻100欧姆× 7

电容1 µF× 2个

电容器100 µF× 1个

电容1000 µF× 1个

ams1117-5.0× 1个

二极管1n400× 1个

mosfet N通道ao3400× 3

Mosfet P通道A03407× 2个

JST XH插座。3p,4p,5p× 1个

LED(通用)× 1个

散热器× 1个

风扇40x40 12v× 1个

功率PNP晶体管1SB1375× 2个

通用晶体管PNP× 2个

通用晶体管NPN× 4

1欧姆1W 1%电阻× 2个

2.2欧姆5W电阻× 2个

齐纳单二极管,5.1 V× 2个

LCD i2c显示器16x2或20x4× 1个

Maxim Integrated DS18B20可编程分辨率1-Wire数字温度计× 3

AA电池座× 2个

软件应用程序和在线服务

Arduino IDE

手动工具和制造机

烙铁(通用)

该项目致力于为NiMh AA电池充电。

声明:这是一项正在进行的工作,该软件仍处于Alpha阶段。

该充电器可用于为电池缓慢和快速充电,也可以恢复旧电池。该充电器基于Arduino微控制器atmega328p-pu,可将全部可用信息显示到16x2或20x4 LCD字符屏上。它最多可以独立为两节电池充电。您只能给一个电池充电,也可以同时给两个不同容量的电池或两个类似的电池充电。在为电池充电之前,必须为每个电池插槽设置电池容量,充电速度和循环计数,然后将电池插入插槽,然后过程开始。

充电器支持三种充电模式:

• 快速充电。电池应在5个小时内充满电。充电电流取决于电池容量,等于0.2C。

• 充电缓慢。电池应在10小时内充满电。充电电流等于0.1C。

• 恢复充电。此模式下的充电电流限制为40mA。恢复时间取决于电池容量。此模式可用于恢复电池容量并为其他充电器无法充电的旧电池充电。

充电过程包括以下几个阶段:

• 放电阶段。电池通过内部电阻放电至0.9 v。

• 预充电阶段。电池以小电流充电,大约30mA,直到电池电压变为1.0v。

• 主充电阶段。根据计算的电流对电池充电,具体取决于电池容量和充电模式(快速,缓慢还原)。如果检测到电压下降或电池过热或达到电压上限,则电池充电阶段结束。

• 充电后阶段。电池以小电流充电,直到另一个电压下降或电压上限。

• 完成阶段。电池会以短电流脉冲充电,直到将其从充电器中取出为止。

如果在给电池充电之前未设置环路,则充电过程将贯穿整个阶段。如果选择运行多个充电循环,则充电器将在主充电阶段完成后立即重新开始放电过程,直到达到循环计数为止。您可以使用多个循环充电来恢复电池容量。

充电器具有三个温度传感器:一个用于每个电池插槽,另一个用于控制安装在功率晶体管上方的内部散热器的温度。为了降低内部散热器的温度,在充电器内部安装了一个小风扇。散热器温度达到最高限制时,风扇会自动打开。当散热器变冷时,风扇将关闭。

充电器原理图如下图所示。为了简化原理图的读数,它分为三个部分:控制器部分和两个通道。两个充电通道都非常相似,唯一的区别是输出和输入信号以及组件编号。

充电器的控制器部分:

微控制器

如上图所示,为增加电池电压测量,已实现外部基准电压源AD680JTZ。其精度为0.4%,并且控制器可以检查高达0.001伏的电池电压。您可以用运行在8 MHz或更高频率的Arduino板(uno,nano,pro mini)替换atmega328p-pu IC。

这是套接字说明:

• J1可以像Arduino pro mini一样通过UART端口对微控制器进行编程。

• J2连接电池温度传感器DS18b20

• X2 12伏电源连接器

• U3连接i2c LCD显示器。平滑改变显示屏亮度所需的亮度引脚

• U4连接旋转编码器。

• U5连接安装在散热器上的12v 40x40x10mm风扇。

通道“ A”原理图:

微控制器

通道“ B”的原理图:

微控制器

在这里,您可以找到该项目的完整原理图和PCB板。

让我解释一下充电器如何在通道“ B”上工作。晶体管Q9和Q10是达林顿对,可为连接到插座J4的电池提供充电电流。Arduino控制器通过PWR_B端口将PWM信号提供给Q13晶体管。PWM占空比越大,在Q9集电极上产生的电流就越大。

Q11 mosfet用于启用或禁用电池充电电流。Q12 MOSFET用于通过R26电阻对电池放电。

要测量R31电阻上的充电电流电压,请检查。

为了向电池提供所需的电流,充电器中使用了PID算法。

定义温度传感器的正确顺序

您必须对充电器进行一些初始配置,因为在此项目的单条总线上有三个温度传感器ds18b20。在启动过程中,充电器以某种特定顺序检测所有传感器。您必须指定正确的传感器顺序,充电器才能正常工作。

将NiMh_Serial固件加载到您的控制器,并将终端连接到UART端口。选择“温度”菜单项。按下编码器按钮。您可以看到所有温度传感器的值。加热一些传感器,并记住它在列表中的位置。对每个传感器重复此过程。现在,您可以定义充电器的正确传感器顺序。将NiMH_Charger代码加载到Arduino IDE并找到“ core.init(SO_BHA);”行。在setup()函数中。要定义正确的传感器顺序,您必须为core.init()方法指定正确的SO_ *代码。温度传感器有6种可能的组合:

SO_ABH-通道“ A”,通道“ B”,内部散热器。

SO_BAH-通道“ B”,通道“ A”,内部散热器等。

此过程只能执行一次。

串行固件的其他可能性

* _serial固件是一种功能强大的工具,可用于调试充电器硬件。使用串行菜单,您可以选择电池通道“ A”或“ B”之一,定义充电电流,执行测试充电,测试放电,散热器风扇测试和温度传感器测试。

该项目仍在进行中,因为电池充电过程非常耗时,并且调试需要大量时间。
       责任编辑:pj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分