分享

自制MPPT太阳能手机电池充电器

 共同成长888 2022-11-06 发布于广东

这是我第一次尝试专业的电路板DIY 项目。所以在你决定开始这个项目之前,需提前说明这个项目中可能会有一些错误,或者它可能有更可靠、更紧凑的设计可取代,或许我的这个设计也不是制作 DIY MPPT 设计的最有效和最便宜的方法。但还是想分享该项目给大家,思路过程供大家参考,防止你们在设计过程中踩坑。

补给品

  • 焊台
  • 3D打印机
  • 1x Arduino UNO
  • 1x INA219
  • 1x PCF8574
  • 1x IR2104
  • 1x MT3608
  • 1 个 TPS61175
  • 2x 18650 锂离子 1800mAh 电池
  • 1x 16x2 液晶显示器
  • 2x BC547
  • 2x IRF510
  • 1x IRF9540NPBF
  • 4x MBRS340T3G
  • 1x ES3D
  • 1x 5mm 红色 LED
  • 1x 220uH 电感
  • 1x 4.7uH 电感
  • 1x 22uH 电感
  • 2x 10k NTC
  • 2x 1k 罐
  • 1x 开关

您可以订购原理图上的组件。

第 1 步:MPPT 简介

- MPPT是什么意思?

MPPT 的含义是“最大功率点跟踪器”。我们在太阳能充电控制器中使用它。这既不是组件也不是电路。这只是我们在控制设备中使用的一种方法。

- 我们为什么需要它们?

使用这种方法,我们可以获得太阳能电池板在那个时刻可以为我们提供的关于太阳辐射的最大功率。

- 什么是“最大功率点”?

在我们首先讨论之前,我们必须了解太阳能电池板的特性曲线。

这种类型的图称为 IV 曲线。“Isc”是短路电流,“Voc”是开路电压。通常,您可以在标准测试条件下在面板背面看到它们。开路电压是最大电压,短路电流是太阳能电池板可以达到的最大电流。这取决于热量和太阳辐射,但现在,我们稍后再讨论。如果我们将功率曲线添加到该图中,它将看起来像下图。

如您所见,电源线从零开始,在峰值之前它像线性线一样继续。原因是电压改变了,但电流不能超过 Isc。那个峰值功率是我们的最大功率点。这意味着我们不能产生比峰值点更多的功率。

- 如果我们直接使用太阳能电池板会发生什么?

我们可以通过一个例子轻松地解释它。假设我们有一块太阳能电池板,Voc 为 22V,Isc 为 0.62A。此外,MPP 为 10W。我们要给 3.7V 电池充电。如果我们直接连接它们,电压将是3.7V,太阳能电池板只能产生0.62A。也就是说,我们的输出功率是2.3W!我们失去了 7.7W 的功率。如果我们一直在使用 MPPT 设备,它会检查输入电压,找到最大功率并将其提供给我们。在这种情况下,我们可以用 2.7A 给电池充电。

- MPPTs 是如何工作的?

 它检查输入电压和电流。它从太阳能电池板请求更多的电力,如果太阳能电池板可以提供它,那么它会要求更多的电力,直到太阳能电池板无法负担所要求的电力。这意味着,我们的跟踪器找到了 MPP。之后,如果力量没有改变,它会尝试保持这一点。然而,在现实生活中,MPPT 不能仅仅停留在一个点上,它会在那个点上摆动。因为它总是在搜索 MPP。

2. 不同的 MPPT 方法

MPPT算法有很多种。MPPT方法可以根据不同的目的而变化。MPP 的收敛速度、用于跟踪的传感器数量、成本等。这些参数与我们选择的方法直接相关。在本文中,我不会描述所有这些方法,但如果您有兴趣了解更多信息,您可以轻松地在 Google 上搜索这些关键字;

  • 增量电导 (IC) 方法
  • 恒压法
  • 温度法
  • 开电压法
  • 反馈电压(电流)法
  • 模糊逻辑控制

如您所见,有几种不同的方法。说其中一个是完美的很难,因为它们各有利弊,所以这取决于应用程序。在本文中,我们将使用“扰动与观察法”。因此我没有将它添加到上面的列表中。

第 2 步:扰动和观察方法

1. 算法

     对于这个项目,我选择了一种常用且有效的方法,称为“扰动和观察”

- 这个方法是如何工作的?

     为了清楚和更好地理解,我们必须在此方法中分别查看每个部分。

 

首先,算法读取太阳能电压和电流值。我们的第一个读数显示为(1)第二个是(2),它继续这样。我们假设它如(图 4)所示。

接下来,算法计算显示为 P(1) 的功率。电压、电流和功率的初始值假定为 0。它控制两个功率点之间的差异。如果两者之间没有变化,它只是返回开始位置。实际上,我们也需要讨论这种情况,但要理解大意,我们可以忽略这一点。如果它们之间有任何变化,算法可以跳到下一个条件。

该算法必须比较 P(1) 是否大于 P(0),因为该算法必须知道确切的点。

如您所见,功率之间的差异可以在 LHS 或 RHS 中并向上或向下移动。如果差值大于 0,则算法知道它向上,否则,它向下。但是还是找不到边,只好寻找电压的动向。在我们的例子中,P(1) 大于 P(0)。

该算法比较电压差并决定运动的方向是 LHS 还是 RHS。在我们的例子中,V(1) 大于 V(0)。

在算法确定运动方向后,它会增加或减少参考电压。参考电压实际上是太阳能电压值。如果我们决定增加参考电压,这意味着我们必须增加太阳能电压。增加太阳能电压后,算法开始再次检查运动的位置,直到找到 MPP。为了更好地理解,我们需要讨论什么是占空比以及什么是“降压转换器”,我们将在第 3 步中讨论它们。

- ΔPower = 0 条件

该图显示了相对于不同太阳辐射的功率电压曲线。红点是 MPP。如您所见,太阳辐射可以改变最大功率点和开路电压。这意味着尽管 MPP 发生了变化,但功率可以保持不变。

蓝点显示功率曲线的相等值。如您所见,太阳辐射可以改变,但功率可以保持不变。

- 总表

2. 问题

- 漂移问题

这个问题基本上可以这样解释,假设可用的太阳辐射为 400 W/m2。P&O 算法始终搜索 MPP,它在 A 点波动 ΔV。但是,如果功率曲线增加到 600 W/m2,则算法认为功率和电压增加。因此,参考电压将向右移动并远离 MPP。

- 优缺点都有什么?

优点:

  • 结构简单
  • 不需要预定义的太阳能电池板功能(例如 Vmpp、Isc)

缺点:

  • 在不稳定的天气条件下,参考电压会消失。
  • 取决于参考电压阶跃,MPPT 上的波动会增加。

第 3 步:了解设计规则

1. 降压转换器拓扑

第一个和第二个注释用于拓扑。

2. 同步和异步降压转换器

第三个注意事项是为此。

3. 占空比

第四个就是为了这个。占空比可以用开启时间除以周期来计算。通过这种方式,我们可以通过改变占空比来调整电压电平,如上所述。

第 4 步:电路框图

1. 简化框图

第一个是最简单的电路框图。这样,当我设计电路时,我可以清楚地看到我需要什么。

- 太阳能板

我使用了一个太阳能电池板,它具有上面显示的许多功能。面板没有额外的优势或专长,我选择的原因是因为我已经拥有它。

- 负载

作为选择了可充电锂离子电池。通过这种方式,我可以为我的手机或任何可以用 5V 供电的东西充电。

- MPPT

 这部分是MCU部分。电路板将由该控制器控制。MCU 将驱动 DC-DC 降压转换器和 LCD。此外,它还将读取 MOSFET 的输入电压、电流和热量。

- 液晶显示器

 我想在 LCD 上显示一些数据。这样我就不必每次都将MCU连接到计算机了。另外,我想在户外使用更容易使用的最终产品。

- DC-DC 降压转换器

这实际上是 MPPT 的主要转换器。这将是一个同步降压转换器。原因是同步版本比异步版本效率更高。太阳能输入功率并不多,所以我需要使这种转换尽可能高效。

2. 详细框图

在我制作了电路的基本框图之后,我喜欢添加更多细节以查看我需要的内容。第三个是显示详细版本。

在我打印电路板之前,降压转换器的输出也有一个电流传感器。但是由于我的运气不好,我订购的第一批电流传感器出现了故障。所以我决定把它换成另一个IC。由于预算问题,我不能买两个。所以我决定只将电流传感器用于输入。

回流电流控制单元有两个优点。第一个是将太阳能接地和负载接地分开。如果此应用是高输入电压应用,那么使用它会很有好处。第二个是它阻止来自降压转换器的回流电流。这很重要,因为太阳能输入电压可能低于输出电池电压,并且电流可以从电池流向面板。

热传感器是可选的。在我们的例子中,加热 MOSFET 的电流并不大。不过为了安全,看看就好。这样,我们就可以打开和关闭负载 MOSFET。

我之前买了一个 MOSFET 驱动器,所以我不得不在系统中添加一个 10V 升压转换器,因为它工作在 10-20V 之间。另外,我使用了 Arduino UNO 板,所以我也为它提供 10V 电压。这不是一种有效的方法,但正如我之前所说,我尝试使用我已经拥有的组件。

第 5 步:原理图

1. 太阳能电池板

- 输入电压传感器

输入电压传感器是一个分压器电路。C2 和 C3 电容用作 ADC 的去耦。我也会分享我的设计偏好。我订购了一些电阻器,在设计过程中,我尝试用我的电阻器值达到电阻器的确切值。这就是为什么他们这么多。此外,我还为输入电压添加了一个 LED 指示灯。

- 输入电流传感器

我对输入电流传感器使用了 3 种不同的方式。我的第一选择是ACS712。这是一个非常精确的 IC,但对于我的电路来说,读取电流步长如此之宽。我的太阳能电池板的短路电流约为 700 毫安,而那个 IC 可以在两侧读取 30 安培。所以我尝试用 OPAMP 制作我目前的传感器。不幸的是,它不能精确并且具有非常大的读数容差。稍后我可以将我的高端电流读数与差分放大器笔记分享。接下来,我决定使用 MAX471 IC。使用差分放大器进行高端电流检测也是如此,但所有电路都在一个封装中,甚至包括分流电阻和增益电阻。它可能是完美的,但正如我所说,它们对我来说是错误的,所以我无法使用它们。最后,我找到了INA219。它是一个非常精确的 IC,具有可调增益,还与 I2C 协议通信。

2. DC-DC 电源转换块

- MOSFET驱动

IR2104 易于使用,您可以同时驱动两个 MOSFET。

重要提示:C7 自举电容应大于 100nF。请记住将其替换为 100nF 或更高的值。除此之外,我不小心在 D1 二极管和 HO 引脚之间画了 C7 电容,这非常重要。它应该在 D1 和 VS 之间。即使我从原理图中更改了它,它仍然保留在 PCB 图纸上。

- MOSFET加热

 热传感器是一个分压器,我用 3.3V 给它们供电,因为我在 Arduino 板上已经有了 3.3V。这样会消耗更少的能量。

- 场效应管

对于 MOSFET 电路,我将分享一个 Excel 文件,您可以使用该计算器设计您的电路。我将总电容分成三部分,因此输出电压纹波减小。L1 电感值高是因为 Arduino 开关频率低。我在 Arduino 的 D11 引脚上使用了 31kHz 频率。我使用 D4 二极管作为 BCCU,因为不需要单独的输入和输出接地。输入没有那么高。但是电流仍然可以从电池流向太阳能电池板。D4 将消除这一点。

3. 加载块

- 电池和电压传感器

C16 和 C17 是去耦电容。我并联使用了两节锂离子电池。所以我不需要分压器,电池已经在 5V 范围内。但我犯了一个错误,不幸的是,在多氯联苯来到我身边后我注意到了。如果您直接将电池连接到 Arduino 模拟引脚,则 Arduino 会通过电池自行供电,如果您不断开电池连接,它就无法完全关闭。

 重要提示:我应该在 Battery_Voltage 和地之间添加一个下拉电阻。即使电池没有连接到 P1,我仍然看到一些电压,因为 C16 和 C17 从模拟引脚加载。

- 10V 升压稳压器

我在那里放了一个开关,因为如果我关闭开关,10V 就无法为 MOSFET 驱动器和 Arduino 供电。所以我可以打开和关闭电路。我按照数据表的建议值制作了这个电路。

重要提示:我用 4.7k 电阻器更改了 R20。因为输出电压高于10V。

- 调节负载电压

我按照数据表的建议值制作了这个电路。如您所见,地面是分开的并连接到另一个地方。这不是必要的事情。我这样做只是为了一一看到它们。

- 负载开启/关闭和负载电压

我做了这个电路来保护。它将切断电路过压或欠压的情况。此外,只有可以打开 Arduino,才能打开输出。

4. MPPT块

 11脚为PWM脚,PWM频率可提高31kHZ。

重要提示:您不必为所有 I2C IC 连接上拉电阻。一辆公共汽车只需一个上拉就足够了。

5.液晶块

我使用了一个 16x2 LCD 并使用 I2C 驱动它。

重要提示:我将 LCD 对比度设置 R42 短路,因为当电压接近 GND 时对比度会增加。更改 R42 和 R41 中的位置,而不是彼此更改。

第 6 步:印刷电路板

我使用 EasyEDA 设计了 ​​PCB,并从 JLCPCB 订购了它。EasyEDA 易于使用,如果您想订购 PCB,您可以

直接从EasyEDA订购。我使用了订单参数的默认设置。

我使用了 PCB 的两面。板子相当大。我用焊台焊接的原因是我想给自己一些空间。

此外,我想用接头将 Arduino 连接到电路板,这需要一些空间。 

我用 SMD 电容器更换了看起来很糟糕的电解电容器。如果你想使用电路板的两面,你不应该在它下面放电解帽。它不能静止在桌子上。

第 7 步:代码

这是MPPT算法的流程图。该算法是这样工作的。首先,我们确保 PWM 在预定义的最大值和最小值之间。原因是 MOSFET 在低于或高于这些值时表现不稳定。PWM 介于 0-255 之间。我将 25 定义为最小值。如果 PWM 变低,这意味着占空比会更小,低端 MOSFET 会更多地导通。在这种情况下,低端 MOSFET 在某些时候就像短路一样,电流会增加到 MOSFET 无法处理的程度。这会烧毁 MOSFET。对于高端 MOSFET,如果 PWM 为 255,则意味着占空比为100 %。但实际上,它不是这样工作的。占空比增加,如 97%-98%。还增加高端 MOSFET 上的 PWM 会导致栅极电压较高。对于更可靠的电路,定义上限和下限是一个很好的解决方案。在循环开始时,我们确保 PWM 在限值之间。之后,我们可以读取电池电压、输入太阳能电压和功率。电池是锂离子电池,因此输出电压不应高于建议的最大电压 4.2V。我们需要确保输出电压低于这个电压。如果它高于最大值,我们控制 PWM。如果它已经处于最低限度,为了保护电池,我们会关闭 MOSFET。如果它不在最小值,则 PWM 减小并返回到循环的开头。如果输出电压低于 4.2V,我们检查输入太阳能电压。因为我们定义了一个最大 PWM 值,这意味着我们有一个最大占空比值。如果我们认为输出电压处于最大值并且我们还认为我们有一个占空比的上限

Vin * D = Vout

Vout/Vin = D

如果 Vout = Vout(max)。要找到 D(max) 值,需要 Vin = Vin(min)。因此,如果我们已经有了 D(max),这意味着在这个等式中,Vmin 必须是最小值。

所以我们用那个最小值控制输入。如果输入低于最小值,我们关闭 MOSFET。另一个步骤是检查 MOSFET 是打开还是关闭。如果它关闭,我们将其打开并继续。然后我们控制电源状态。电源状态表示 ΔP。因此,我们检查可以低于零、高于零和等于零的 ΔP 状态。P = 0 有一个附加状态。如果我们更新算法部分中的上表,它将看起来像下图。

作为附加信息,占空比和 Vref 是反比。如果占空比增加,则 Vref 会降低,反之亦然。实际上,Vref 并不是真正的电压值。这是电压的猜测。在 VI 曲线中,我们将 Vref 变量用于我们在下一步中预期的电压。我们可以这样想,例如,我们有一个球,我们把那个球扔到我们想去的任何地方。然后,我们走向舞会。我们接球,然后再把球扔到我们想去的任何地方。我们可以认为球是 Vref,而行走的人是真正的输入电压。如果我们将球扔到错误的位置,我们会尝试寻找正确的接球方式。这意味着增加占空比,降低输入电压,或者降低占空比,增加输入电压。占空比与 PWM 直接相关,并且它们成正比。PWM 为 0 表示占空比 = %0,PWM 为 255 表示占空比 = %100。我们可以通过使用 PWM 来调整占空比,这样我们就可以用表格中的 PWM 来改变 Vref。数字用于指示电压和电源的状态。如果两个数字都为零,我们对 PWM 什么也不做。但是如果功率等于零并且电压发生了变化,我们需要遵循不同的算法。

正如您在图表中看到的,蓝点表示相同的功率水平。在这些点上,功率可以保持不变,但电压可能已经改变。这看起来像作弊,但要定义这种状态,我们可以为算法定义 MPP。这样算法就可以找出电压在哪里。如果读取的输入电压在预定义最大功率点的左侧或右侧,PWM 将根据此信息而改变。为了找到 MPP 点,我取了开路电压的 %70。因此对于 22V,MPP 将在 15V 左右。在选择 MPP 之前,我们必须做出决定。正如您在图中看到的,当太阳辐射增加时,MPP 向右漂移。如果我们从高水平太阳辐射的角度做出决策,对于这些点,MPP点将以更正确的方式找到。同样的事情也适用于低水平的太阳辐射。我选择了能找到中间点的电压。使两边的距离相等。我通过使用 EST_VOLTAGE_STATUS 来控制此状态。因此,如果我们再次更新表,它将如下所示:

在确定 PWM 值之后,我们将功率和电压值分配为先前的值。这样,当我们读取新值时,我们可以将它们与以前的值进行比较。然后我们将 PPWM 设置为预测 PWM。PPWM 由输出和输入电压比得出。如果输入电压为 0,则 PPWM 将为 1。如果不是,我们将比率缩放 255。0,995 值是计算 PPWM 的误差校正。此外,我们必须确保 PPWM 在最小和最大范围内。该值将是 PWM 的下限。

温馨提示:如您所见,我们没有使用 CC 模式为电池充电,我们只是控制了最大电池电压水平。我们没有用于电池的电流传感器,也无法读取通过电池的电流。也许它可以用输入功率乘以效率方程来计算,但为了简化这个过程,我没有使用它。电池仅使用 CV 模式充电。我将与您分享整个代码,您可以参考或根据您的目的进行更改。

第 8 步:外观设计

我使用Fusion 360为电路板设计了一个简单的外壳。我也将与您分享STL文件。

第 9 步:支持注释和文件

您可以点击此处找到计算器、代码、Gerber 文件和 3D 模型。

 

以上就是这个项目的全部内容了,有问题欢迎留言评论交流。

* 以上内容翻译自网络,原作者:F598,如涉及侵权可联系删除。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多