×

PID电池充电器控制器开源硬件

消耗积分:0 | 格式:zip | 大小:0.92 MB | 2023-02-01

听风说梦

分享资料个

描述

介绍

可再生能源是满足我们电力需求的实用且负担得起的解决方案。通过增加可再生能源,我们可以减少空气污染,减少全球变暖排放,创造新的就业机会和产业,使我们的电力供应多样化,减少对煤炭和其他化石燃料的依赖,并使世界走向更清洁、更健康的能源未来。我们打算创建一个照明控制系统,使我们能够节省能源。照明控制系统广泛应用于商业、工业和住宅空间的室内和室外照明。照明控制系统用于在需要的时间和地点提供适量的光。

 
lighting_control_CcQV3oYurI.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
照明控制系统示例
 

作为主要目标,我想到了三件事:

  • 从正弦函数生成控制 PWM 信号。
  • 从 PID 控制器生成控制 PWM 信号。
  • 添加夜灯控制。

应用:我们家中、公司甚至公共道路上的“夜灯控制”或“路灯控制”。也可用于给3V、5V、12V电池充电。

STM32F407G-DISC1配置

 
cover_uxCi0f5Tyb.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
STM32F407VG板
 
  • STM32F407VGT6 微控制器采用 LQFP100 封装,具有 32 位 ARM® Cortex®-M4 和 FPU 内核、1 MB 闪存、192 KB RAM
  • STM32F4DISCOVERY 上的板载 ST-LINK/V2 或 STM32F407G-DISC1 上的 ST-LINK/V2-A
  • 具有重新枚举功能和三个不同接口的 USB ST-LINK:调试端口、虚拟 Com 端口和大容量存储。
  • 电路板供电:通过USB总线或来自外部5 V电源电压
  • 外部应用电源:3 V和5 V
  • LIS302DL 或 LIS3DSH ST MEMS 三轴加速度计
  • MP45DT02 ST-MEMS音频传感器全向数字麦克风
  • 具有集成 D 类扬声器驱动器的 CS43L22 音频 DAC
  • 八个 LED
  • 两个按钮(用户和重置)
 
schematic_diagram_clMyDF8dG4.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
完整示意图
 

正如我们在示意图中看到的,这个系统主要执行两个功能:首先它专门为电池充电,一旦充满电,然后通过 LDR 光传感器打开或关闭灯,如果它是晚上打开灯,如果是白天,则将其关闭。为了更好地描述这个项目,我把它分为以下几个部分:

1.- 软件安装

2.- 电源

3.- 充电控制

4.- 负载控制

5.- 夜灯控制

6.- 从正弦函数生成控制 PWM 信号

7.- 从 PID 控制器生成控制 PWM 信号

8.- 电路板设计

9.- 组装

10.- 测试

11.结论

 
electric_diagram_final_SCZKzy1WPI.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

 

 

1.- 软件安装

 

(Timing: 6 hrs)

我使用的是32位的Windows 10操作系统,软件安装如下:

a)我已经安装了“GNAT Programming Studio”,我们可以从以下链接下载它:https ://www.adacore.com/download/more

在此链接中,我下载并安装了以下两个程序:

 
gps_2_dJrf1VOYqz.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
全球定位系统标志
 

b)我们要安装STM32F407VG板的USB驱动,链接如下:https://www.st.com/en/development-tools/stsw-link009.html#getsoftware-scroll。我们在此站点上下载以下文件:“en.stsw-link009.zip”。连接设备后,我们会在“设备管理器”中验证它是否已连接。

 
usb_driver1_vUnQpUYOf0.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
验证 USB 驱动程序的安装
 

c)为了开发这个项目,我们使用“Ada Drivers Library”,我们可以从以下链接下载它:https ://github.com/AdaCore/Ada_Drivers_Library

为了设计我的项目,我使用了以下示例:“demo_timer_pwm”、“demo_adc_polling”和“demo_gpio_direct_leds”。您可以在此处找到的文件夹: https ://github.com/AdaCore/Ada_Drivers_Library/tree/master/arch/ARM/STM32/driver_demos

d) CircuitMaker是针对业余爱好者、黑客和创客社区的印刷电路板设计电子设计自动化软件。您可以在以下位置下载安装软件:https ://circuitmaker.com/

 
circuit_maker_b_IufNzD6n3B.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
设计原理图和PCB板
 

e) Lowell Cady 的 PID示例是 PID(比例、积分、微分)控制的工作示例,您可以在此处下载:https ://www.codeproject.com/Articles/36459/PID-process-control-a -巡航控制示例

 
pid_example_zytEY6WnGW.png?auto=compress%2Cformat&w=740&h=555&fit=max
测试和绘制 PID 系统的程序
 

 

 

 

2.- 电源

 

 

(Timing: 2 hrs)

 
01f_U56JGtQSKC.png?auto=compress%2Cformat&w=740&h=555&fit=max
电源电路图
 

它是如何工作的?

a)开关电源提供 12 伏特直流、5 安培的稳定电压和 330 瓦的最大功率。使用此设备,我们会发现系统具有良好的稳定性,我们必须调整我们想要为电池充电的电压负载并使用电位器 (R10)。我们可以在这里查阅国际标准:https ://standards.ieee.org/standard/765-2012.html

b)集成电路 LM317 用于通过电位器 R10 产生 3 至 12 伏的电压调节。这个集成的技术规格说它不能产生低于 3 伏的电压。在这个例子中,我调整了 5.6 伏。计算是:

在 LM317 的技术表中,我们找到以下公式:

Vout =Vref [1+(R2/R1)] +(iADJ)(R2)

例如,LM317 可以工作的最大电压是 37 伏,如果在我们的图表中我们将 R9 取为 240 欧姆,那么我们对 R10 进行计算。

Vout =Vref [1+(R10/R9)] +(iADJ)(R10)

我们考虑一个非常小的 iADJ 值,如果我们计算 R10,我们将有:

R10 = (R9/Vref) (Vout -Vref)

R10 = (R9/1, 2) (Vout - 1, 2)

R10 =(240/1, 2)(37-1, 2) = 7, 160 欧姆

对于实际用途,我们使用 10k 电位器。

c)齐纳二极管 DZ 用作电压调节器,在它的输出端我获得了 10.8 伏的最大值,这是我用电压表测量的。

d)使用的保护装置如下:保险丝 F1、电容器 C1 和二极管 D1。这些元件对于保护系统免受短路、放电、消除反向直流电流和过滤不需要的信号非常重要。

 
img_20140130_122336_TVZk2oBCX9.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
小心 LM317T 稳压器和齐纳二极管的连接
 

 

3.- 充电控制

 

(Timing: 3hrs)

 
02b_LgGAboBTlK.png?auto=compress%2Cformat&w=740&h=555&fit=max
充电控制电路图
 

它是如何工作的?

a)在该电路中以 Vcc 为单位测量的电压,电压表指示为 5、45 伏。在这个例子中,我使用了一个由四个 1、5 伏可充电电池组成的模块。最大负载电压为 5.6 伏。我用的是镍氢电池,我们可以在这里找到国际标准:https ://www.mpoweruk.com/standards.htm

b) STM32F407VG 板生成的 PWM 信号将用于调节充电电池的负载。为了生成此 PWM 信号,我们采用“Ada 驱动程序库”中的示例“demo_timer_pwm”并对其进行修改以获得所需的 PWM 信号。例如,如果电池完全放电,则 PWM 信号具有较大的占空比。

c)晶体管 T1 用于物理分离 STM32F407VG 板和 M1 Mosfet。如果它们直接连接,那么这个设备就会损坏,因为 Mosfet 工作在非常高的负载下。电阻 R1 (1k) 必须取一个较低的值,以提高 PWM 信号的开关速度。

d)但是,在晶体管 T1 的输出端,我们有一个 180 度的异相信号,为了调整这种情况,我们使用晶体管 T2,现在 PWM 信号是同相的。

e)为了将截止区和饱和区驱动到我们的 T1 和 T2 晶体管,我们做出以下考虑:

 
transistor-bjtb_NtK7URPvHm.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
共发射极
 

为了确定饱和电流,我们认为输出栅极的发射极集电极电压等于零。因此:

VCC=IC*RC+VCE | VCC=IC*RC+0

我C=VCC/RC

为了确定截止点,我们认为基极电流等于零,因此集电极电流等于零:

VCC=IC*RC+VCE | VCC=0*RC+VCE

VCE=VCC

 
current-voltageb_5852rJgFZp.png?auto=compress%2Cformat&w=740&h=555&fit=max
共发射极放大器的截止区和饱和区图
 

f)使用的保护装置如下:电容器 C1 和二极管 D2。二极管用于消除电池充满电时的反向直流电流。如果这个二极管不存在,那么电池就会在晶体管 T1 和 T2 中感应出电压。

 
img_20140130_122345_vd9sCBb4gc.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
我们通过 P 沟道 MOSFET 和两个晶体管控制充电电池的充电
 

 

 

4.- 负载控制

 

(Timing: 3 hrs)

 
03_LdqY6f8BYT.png?auto=compress%2Cformat&w=740&h=555&fit=max
负载控制电路图
 

它是如何工作的?

a) 10K 的电阻 R4 和 8K 的 R5 用作分压器,用于使用我们的 STM32F407VG 板测量可充电电池的电量。8K 电阻是通过两个串联电阻实现的:4k7 + 3k3。VR5的值我们通过分压器的计算得到它,这就是:VR5=(R5/(R4+R5))*VBattery)

b)当STM32F407VG板的PD12引脚up时,三极管T3驱动,异相180度。晶体管 T4 校正晶体管 T3 并使原始信号与 PD12 引脚同相。

c)为了将截止区和饱和区驱动到我们的 T3 和 T4 晶体管,我们做出以下考虑:

为了确定饱和电流,我们认为输出栅极的发射极集电极电压等于零。因此:IC=VCC/RC

为确定截止点,我们认为基极电流为零,因此集电极电流为零:VCE=VCC

d)当脉冲到达 IPT60R028G7 Mosfet 的“Gate”引脚时,“Source”和“Drain”之间的电路闭合,5 瓦灯点亮。当漏极和源极之间的电压 (VDS) 超过称为饱和电压 (Vds sat) 的固定值时,该 MOSFET 晶体管进入饱和区。也就是说; 在以下情况下,MOSFET 将位于该区域:

VGS > VtVDS > (VGS – Vt)

在 IPT60R028GT 的技术表中我们看到:

栅极阈值电压

V(GS)th 最小值 = 3

V(GS)th 典型 = 3.5

V(GS)th 最大值 = 4 V

因此,我们需要 3 到 4 伏的“栅极”电压才能将 Mosfet IPT60R028GT 置于饱和区。

e)使用的保护装置如下:电容器 C2 和保险丝 F2。

 
img_20140130_122405_Z1eEEaOVk2.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
我们通过一个 N 沟道 MOSFET 和两个晶体管来控制灯的负载
 

 

 

5.- 夜灯控制

 

(Timing: 3 hrs)

 
04f_M9A7JtQTs1.png?auto=compress%2Cformat&w=740&h=555&fit=max
小夜灯控制电路图
 

它是如何工作的?

a)这个“夜灯控制”为我们服务,知道是白天还是晚上并激活灯。该电路由 STM32F407VG 板的 5 伏供电​​。

b)为了控制照明,我们使用光敏电阻或 LDR 传感器。光敏电阻由高电阻半导体制成。在黑暗中,光敏电阻的阻值可高达数兆欧 (MΩ),而在光照下,它的阻值可低至数百欧姆。https://en.wikipedia.org/wiki/光敏电阻

c)当完全黑暗时,LDR 传感器具有最大电阻(兆欧),T5 晶体管被极化并且在它的输出端我们有最小电压,在逆变器电路 (IC40106) 的输出端我们有 5 伏。IC40106是触发器施密特反相器电路在下图中我们可以了解到一个非反相电路是如何工作的,这有助于我们理解反相电路40106是如何工作的。当您想用非数字信号控制数字电路时,这些电路很有用。

 
1_HjD6JY5TYc.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
光敏电阻和非逆变器电路的信号
 

40106 的 VT 和 VT- 值(所有值均以伏特为单位)

 
trigger_scmitt_15RmaSNLWc.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
触发器施密特的典型值
 

d)我们通过电路中所示的肖特基二极管将这个 5 伏特转换为 3 伏特,并将该电压施加到我们的 STM32F407VG 板的 PA0 引脚。

e)当光照最大时,则相反。LDR 传感器具有最小电阻,T5 晶体管没有极化,在它的输出端我们有 5 伏的 Vcc,它通过 IC40106 逆变器电路的引脚 9 进入。最后我们有 0 伏,它被施加到 STM32F407VG 板的 PA0 引脚

f)为了将截止区和饱和区驱动到我们的 T5 晶体管,我们做出以下考虑:

为了确定饱和电流,我们认为输出栅极的发射极集电极电压等于零。因此:IC=VCC/RC

为确定截止点,我们认为基极电流为零,因此集电极电流为零:VCE=VCC

g)在 STM32F407VG 板的 PA0 引脚上,当电压为零时,红色 LED 亮起,灯熄灭。当我们有 5 伏特时,绿色 LED 亮起,电灯亮起。

 
img_20140130_122512_v6M4WGaHYQ.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
您必须确保光敏电阻没有障碍物才能检测到光
 

 

 

 

6.- 从正弦函数生成控制 PWM 信号

 

(Timing: 1day)

在这个板上,我们将生成 PWM 控制信号,激活负载,并监控电池电压和“夜灯控制”的状态。我们还将使用它的 4 个 LED 作为我系统状态的指示器。您可以在代码部分找到该程序。项目库:“带夜灯控制的电池充电器”

 
05b_jlEBu5B6JF.png?auto=compress%2Cformat&w=740&h=555&fit=max
主板和连接
 

它是如何工作的?

a)我们监控 PA1 模拟端口上的电池电压,其中我们的值从 0 到 4095 ADC。

b) PWM信号是在STM32F407VG板上通过Timer4的中断和30kHz正弦函数的产生而产生的。在我们的代码中,我们使用以下说明指示它:

Arg := Long_Float((Raw*5)/4095); -- 5 is an experimental value
Value := Percentage (50.0 * (1.0 +Sine (Arg))); -- duty cycle value
Power_Control.Set_Duty_Cycle (Value);-- PWM signal
 
pwm_b_7Q59bHTDHS.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
代码自动生成这三个占空比
 

我们将根据正弦函数逐渐调整占空比。

 
sineb_VSormkFvar.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
正弦函数示例
 

正弦函数使用以下代码计算:

  function Sine (Input : Long_Float) return Long_Float;
  --  In this demonstration we roll our own approximation to the sine function
  --  so that it doesn't matter which runtime library is used.
  function Sine (Input : Long_Float) return Long_Float is
     Pi : constant Long_Float := 3.14159_26535_89793_23846;
     X  : constant Long_Float := Long_Float'Remainder (Input, Pi * 2.0);
     B  : constant Long_Float := 4.0 / Pi;
     C  : constant Long_Float := (-4.0) / (Pi * Pi);
     Y  : constant Long_Float := B * X + C * X * abs (X);
     P  : constant Long_Float := 0.225;
  begin
     return P * (Y * abs (Y) - Y) + Y;
  end Sine;

https://visualgdb.com/tutorials/arm/stm32/fpu/

此代码生成我的项目所需的以下三个占空比,如下所示:

 
tabla_8DiaWQLqCY.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
该方法仅生成三个占空比,这三个占空比取决于测得的模拟电压
 

占空比是信号或系统处于活动状态的一个周期的一部分。占空比通常表示为百分比或比率。周期是信号完成一个开关周期所花费的时间。作为一个公式,占空比 (%) 可以表示为:D= (PW/T)x100%

其中 D 是占空比,PW 是脉冲宽度,T 是信号的总周期。https://en.wikipedia.org/wiki/Duty_cycle

c) VR5的值我们通过分压器的计算得到,即:VR5=(R5/(R4+R5))*VBattery)

d)如果电池电压低于大约 4 伏,则红色 LED 亮起,绿色和橙色 LED 熄灭。在本例中,我们的值小于 2457 ADC。

e)如果电池电压超过约 5.4 伏,则橙色 LED 亮起,红色 LED 熄灭。在此示例中,我们的值大于 3276 ADC。

f)如果 STM32F407VG 从 PA0 端口接收到脉冲,则绿色 LED 点亮表示现在是晚上,灯通过 PD12 引脚点亮。

g)如果电池电压大约在 4 到 5.4 伏之间,橙色和红色 LED 会亮起。在这个例子中,我们有从 2475 到 3275 ADC 的值。

         if Raw < 2457 then -- if the battery < 4 volts aprox
           Red_LED.Set; -- Red LED os ON
           Green_LED.Clear; -- Green LED is OFF
           Orange_LED.Clear; -- Orange LED is OFF
           delay until Clock + Milliseconds (2000); -- slow it down to ease reading
        elsif Raw >= 3276 then -- If the battery > 5,4 volts aprox
           Red_LED.Clear; -- Red LED is OFF
           Orange_LED.Set; -- Orange LED is OFF
        elsif STM32.User_Button.Has_Been_Pressed then -- If PA0 is ON
           Green_LED.Set; -- Green LED is ON
        else -- If battery is between: 4 to 5,4 volts aprox
           Orange_LED.Set; -- Orange LED is ON
           Red_LED.Set; -- Red LED is ON
        end if;

 

7.- 从 PID 控制器生成控制 PWM 信号

 

(Timing: 2days)

在此测试中,我们将使用不同的程序。您可以在代码部分找到该程序。项目库:“带夜灯控制的 PID 电池充电器”

它是如何工作的?

a)如果我们想控制一个系统,最好的解决办法是利用PID控制。PID 是一种控制回路反馈机制,广泛用于工业控制系统和各种其他需要连续调制控制的应用。PID 控制器连续计算误差值作为所需设定点 (SP) 和测量过程变量 (PV) 之间的差异,并根据比例、积分和微分项(分别表示为 P、I 和 D)应用校正,由此得名。

 
pid_en_svg_Ym2ha6InTy.png?auto=compress%2Cformat&w=740&h=555&fit=max
PID控制器
 

在我的例子中,STM32F507 板生成一个 30 kHz 的 PWM 信号,控制数据为:dt = 0.0005,Kp = 0.025 和 Ki =0.025。您可能会注意到微分项非常小或为零。我的 PID 控制器的仿真如下:

 
pid_test_ZON81zalQo.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
使用 Lowell Cady 程序来测试我的 PID 控制器。
 

https://en.wikipedia.org/wiki/PID_controller

b)决定何时应用 PWM 控制信号的工作留给了 STM32F407 板。在我的示例中,该板执行计算并生成 PWM 控制信号。使用我的 PICkit2 设备,我得到了以下 PWM 信号。

 
pwm_pid_2_6pdvGaVJv7.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
PID 控制器产生许多占空比,这些占空比取决于反馈。
 

c)分压器 VR5 向我们的端口 PA1 提供模拟值,并将其与“设定值”进行比较。“设定点”由代码编程,我们进行了一个设定点测试:VBattery = 4.95 伏/VR5 = 2、2 伏/ADC = 3003 ADC。

  declare
     Value     : Percentage;
     Raw1      : Long_Float;
     setpoint  : constant := 3003.0; -- VR5 = 2.2 volts / Vbat = 4.95 volts 
     error     : Long_Float := 0.0;
     output    : Long_Float;
     integral  : Long_Float := 0.0;
     dt        : constant := 0.0005;
     Kp        : constant := 0.025;
     Ki        : constant := 0.025;

d)例如,如果电池放电,则程序会计算误差,并生成一个具有高占空比的 PWM 信号。如果电池已充电,则程序会生成一个占空比较小的 PWM 信号。

 begin
        STM32.User_Button.Initialize; -- btn instruction
     loop
        Start_Conversion (Converter); --adc instruction
        Poll_For_Status (Converter, Regular_Channel_Conversion_Complete, Successful); --adc instruction
        Raw := UInt32 (Conversion_Value (Converter)); -- reading PA1
        Raw1 := Long_Float(Raw * 1);
        error := (setpoint - Raw1);
        integral := (integral + (error*dt));
        output := ((Kp*error) + (Ki*integral));
        Value := Percentage (output); -- duty cycle value
        if Value < 10 then -- if the duty cycle < 10%
           Power_Control.Set_Duty_Cycle (10);
           Red_LED.Set; -- Red LED os ON
           Green_LED.Clear; -- Green LED is OFF
           Orange_LED.Clear; -- Orange LED is OFF
           delay until Clock + Milliseconds (500); -- slow it down to ease reading                                    
        elsif Value >= 90 then -- If the duty cycle > 90%
           Power_Control.Set_Duty_Cycle (90);
           Red_LED.Clear; -- Red LED is OFF
           Orange_LED.Set; -- Orange LED is OFF
        elsif STM32.User_Button.Has_Been_Pressed then -- If PA0 is ON
           Green_LED.Set; -- Green LED is ON
        else -- If the duty cycle is from: 10 - 90 %
           Power_Control.Set_Duty_Cycle (Value); -- PWM signal
           Orange_LED.Set; -- Orange LED is ON
           Red_LED.Set; -- Red LED is ON
        end if;
        delay until Clock + Milliseconds (10); -- slow it down to ease reading
     end loop;

现在我们有了一个智能系统,它具有生成多个工作周期的优势,我们将更有效地利用能源。

 
tabla_2_emFTV7xIuX.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
这些是使用 PID 控制器获得的值的示例
 

 

 

 

8.- 电路板设计

 

(Timing: 2days)

原理图电路是在CircuitMaker上制作的。您可以在自定义部件和外壳部分找到存储库。项目库:“带夜灯控制的 PID 电池充电器的电路板设计”

 
schematic_lJ3ugvIbFY.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
电路图开发 CircuitMaker
 

 

 
pcb_f_oK59ZJX9RT.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
PCB 2D开发的CircuitMaker
 

 

 
pcb_3d_f_KiNL3KYICb.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
PCB 3D 开发 CircuitMaker
 

 

 
captura_3d_Hp5vVfYFF7.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
正交旋转视图由 CircuitMaker 提供支持
 

 

 

9.- 组装

 

(Timing: 2 days)

接下来,我将向您展示一些装配图。

 
ensamble_1_h6iPKhAxX6.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
焊接
 

 

 
ensamble_2_ZzSUHKvjow.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
用盒子保护电路板
 

 

 
ensamble_4_PYhBlDyWYj.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
原型完成
 

 

 

 

 

10.- 测试

 

(Timing: 1 day)

从正弦函数生成控制 PWM 信号:

这个例子不需要设置点,PWM 信号是自动生成的,正如我们在第 6 步中看到的那样,其中只生成了三个占空比。

 

 

 
img_20140130_125907_htLERTVgVT.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
测试顶视图
 

 

 
led_green_aRLdhR84vd.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
充电电池示例
 

 

 
01_frecuencia_30khz-33us_DvSiQ9SpWp.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
测量频率 = 30 kHz
 

 

 
02_duty_cycle_31_us_uMnpzgWJnS.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
电池放电,占空比 = 94%
 

 

 
03_duty_cycle_19_us_NGtdeFvLn8.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
电池放电一半,占空比 = 55%
 

 

 
04_duty_cycle_4_us_vYXeGLHI3J.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
电池充满电,占空比 = 11%
 

 

从 PID 控制器生成控制 PWM 信号

设定点:VBattery = 4.95 伏/VR5 = 2、2 伏/ADC = 3003 ADC。

我们可以理解,这里的 PID 控制器会生成许多占空比。

 
a1_2_2v_30khz_KhPJYTkv1x.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
测量频率 = 30 kHz
 

 

 
a1_2_2v_dc_3us_MUtvkeHxUt.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 2.2 伏,占空比 = 11%
 

 

 
b_1_99v_dc_4us_QWN2lLDNfB.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 1.99 伏,占空比 = 12%
 

 

 
c_1_6v_dc_7us_uY3YZPkzuc.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 1.6 伏,占空比 = 21%
 

 

 
d_1_3v_dc_8us_t8dfJrCOQC.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 1.3 伏,占空比 = 24%
 

 

 
e_1_13v_dc_16us_Uk4wAddRuS.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 1.13 伏,占空比 = 48%
 

 

 
f_0_9v_dc_30us_USjuhnJ8Ve.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
VR5 = 0.9 伏,占空比 = 91%
 

 

 

 

 

 

 

11.- 结论

 

 

  • 首先,我的意图是做一些有用的项目,可以为我们解决实际问题。我曾经问自己是否有可能构建一个智能家居电池充电器,并且我们可以通过它有效地利用能源。答案是肯定的,问题解决了,而且不用花很多钱。
  • 软件:在这个项目中,我学会了使用“GNAT Programming Studio”软件,因为我习惯于使用 Python、Processing 和 C++,并且 AdaCore 的技术支持很好地建议我了解一些要点这种语言编程。
  • 硬件:在这个项目中,我使用了不同的电子领域:a)微控制器(PWM 信号以及数字和模拟端口);b) 电力电子设备(Mosfet、电池和灯);c) 数字电子(IC Trigger Schmitt);d) 传感器(LDR);e) 控制理论(PID 控制器)。
  • 应用:虽然正弦函数生成三个非常有用的占空比,但系统使用 PID 控制器变得更加高效和实用,因为电池充电速度更快,使用寿命更长。夜灯的控制被用来激活一盏灯。这个项目可以作为我们未来开发“路灯控制”的一个例子,使用太阳能电池板或风能。

 

 


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

评论(0)
发评论

下载排行榜

全部0条评论

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