亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

带 OLED 显示屏的可编程袖珍电源

组件和用品

Arduino UNO
× 1
Arduino Nano R3
× 1
XL 6009 DC DC Boost
× 1
SparkFun 按钮开关 12mm
× 1
16 MHz 晶振
× 1
接线端子连接器
× 1
输出可调的线性稳压器
× 1
线性调节器 (7805)
× 1
1N4007 – 高电压、高额定电流二极管
× 1
USB-A 转 B 线
× 1
多圈精密电位器 - 10k ohms(25圈)
× 1
OP07 仪表运算放大器
× 1
通用插座盒
× 1
FR4 原型板
× 1
跳线(通用)
× 1
男性标题 40 位置 1 行 (0.1")
× 1
电阻 10k ohm
× 1
电阻 22.1k ohm
× 1
电阻 1k ohm
× 1
Arduino 锁存继电器 5v 2A
× 1
SparkFun MCP 4131 数字电位器 10k
× 1
Arduino 铜带
× 1
Arduino LM358 运算放大器
× 1
Arduino 1306 OLED
× 1

必要的工具和机器

烙铁(通用)
热胶枪(通用)
迷你钻机

应用和在线服务

Arduino IDE

关于这个项目

想法

作为业余爱好者,我们经常需要为原型供电,检查项目的电压、电流和功率限制,测试新购买的组件。在这一系列工作中始终需要可变电源。但不幸的是,并非所有人都有工作台/实验室电源。如果买的话也很贵,如果需要携带则笨重。我一直在寻找一种成本较低、具有便携性和生产力的可编程电源,以便为我的原型和测试组件供电。所以,我决定做一个。

它具有以下特点:

  • 可编程
  • 可充电
  • 便携
  • 步骤变量
  • 电压/电流/功率计
  • 受保护的中继
  • 可定制,小巧可爱
  • 炫酷的 OLED 用户界面
  • 按钮用户控制和基于菜单的导航
  • 可升级固件以获得更多功能!

以及适用于低功率电子项目的最通用的电源。

实景拍摄!

观看演示设备操作的视频:

设备规格

该设备具有以下规格:

  • 最大输出直流负载电流:400 mA
  • 电压范围:2.0 伏 - 12.0 伏
  • 电压步长:大约 0.1 伏
  • 最佳效率:75 %
  • 电流测量精度:+/- 1 mA
  • 电压测量精度:+/- 0.02 伏

请注意,该设备是一个快速原型。通过使用高容量电池、附加电子设备和升级设计,可以实现 0-30 甚至负电源和更大的输出电流。

工作原理

设计本身是硬件密集型的。这里发生了很多事情。系统的粗略框图是这样的:

电源是 3.7 V 锂电池,可通过 USB 充电。首先使用 XL6009 DC-DC 升压模块,我们从 Li-Po 获得 15.6 伏电压。为了运行 MCU,我们还使用 7805 稳压器制作了一个 5 伏电压。

Arduino UNO 克隆 Atmega328P 连接了 2 个基于中断的用户输入开关,一个优雅的 OLED 输出显示器。 Rx/Tx/DTR 固件(草图)通过 USB/串口从 PC 上传端口。 (模块一)

该项目的核心是 MCP4131 数字电位器 (Digipot) + LM 358 运算放大器 基于阶跃电压发生器。该电压是 LM317 可调稳压器的控制电压。 (模块二)

Digipot 由 Arduino 通过类似 Pseudo-SPI 的命令控制。 LM317 的设计使得输出引脚电压 始终比调整引脚电压高 1.25 伏 前提是 INPUT 引脚的电压足够高(此处为 15.6 伏)。 (模块 3)

步进电压被馈送到调整引脚,以根据用户的需要从 Arduino 创建可变输出。

ADC 测量所有与监控和保护相关的电压;电池电压、升压电压、充电检测电压和输出电压通过分压器网络进行调节,用于馈送 ADC 范围,此处为 0-1.1 伏。我使用了 Arduino 的内部参考,它创建了 1.1 伏的参考电压。

对于电流检测,来自输出负载的返回(负载接地)与 1 欧姆电流检测电阻串联连接到系统接地。当电流流过外部负载时,该检测电阻中也会出现电压降。该电压通过 OP07 精密运算放大器放大并馈送到 ADC 引脚之一。

最后,对于电池充电,来自 USB 的 5 伏电压与 4007 二极管和 5 欧姆限流电阻串联连接到锂聚合物电池。这是一种粗略的充电方式,不是锂电池充电的最佳选择。

操作总结: MCP4131 数字电位器产生 0-5 伏范围内的步进电压,步进电压约为 40mV(7 位 10K 数字电位器有 129 个步进 5V/128 =0.40 mV),然后由 LM358 放大 2.5 倍,得到 0-12.5伏特控制电压范围,步长为 0.1 伏。这个放大的阶跃电压信号被馈送到 LM317 的调整引脚。 LM317 产生 V_Step+1.25 伏的输出电压,提供给外部负载。外部负载的返回/接地通过 1 欧姆电流检测电阻连接到内部接地。假设:x mA 电流流向外部负载,它会产生 x 1 欧姆电流检测电阻器上的 mV 压降(欧姆定律 V=I*R)。这个小电压信号被馈送到配置有 2.5X 增益的低偏移 (10uV) 运算放大器 OP07,它将产生 2.5x 毫伏输出。 Arduino ADC 配置有 1.1 伏内部参考电压,因此可以以大约 1mV (1100/1023) 的步长感测 0 -1100 mV 的电压。 OP07 的输出连接到 Arduino ADC 以进行电流检测。这就是电流限制为 400mA 的原因。可以通过改变 OP07 的增益来增加/减少它。类似地,可以通过改变 LM358 的升压电压和增益来改变输出电压范围。其他电压通过电阻分压器网络衰减电压以适应 ADC 范围进行测量。锁存继电器有 2 个线圈。通过向任何线圈施加瞬时电源,可以切换继电器触点。一旦切换它就留在那里,所以线圈立即断电。

构建项目

首先我们从单个开关插座盒开始,将电池、USB充电口、电源开关等进行必要的切割和对齐。

接下来,用铜带和硬币制作DC-DC升压模块的散热器。

升压模块放置在插座盒内:

使用以上部分,制作了以下3个模块:

  • Arduino + I/O + 控制模块
  • 阶跃电压和可调稳压模块
  • 电流感应模块

最后将所有板子之间的蜘蛛网连接连接并焊接起来。

用热胶做填充物后,终于有了:

开发固件和操作程序

固件(Arduino Sketch)现在是 1.0.2 Beta。目前并非所有功能都可用。但最重要的功能如控制电压、连接/断开继电器、查看信息都已启用。在 void setup() 很少有初始化函数来预热与不同外部硬件相关联的 Arduino 引脚。

输入 :有 2 个基于中断的输入按钮,用于增加/减少输出电压,访问菜单(此版本不可用)。 Arduino 引脚 2 和 3 上的 INT0 和 INT1 编码为下降沿中断。您将看到 2 个电容器与机械开关并联,用于去抖动。编写代码以在用户按下这些开关以通过继电器打开/关闭输出或增加/降低电压(Beta)时触发中断。

输出 :1306 OLED 显示从 ADC 获取数据的输出信息、内部定时器(用于设备正常运行时间)和标志变量,以通知用户有关输出启用/禁用状态。基于 U8G 库,OLED 将信息打印为文本和数字。我有使用图形(模拟类型)表示的计划。

SSD1306(来自 Waveshare 的 OLED)的 5 个数字引脚 clk、din、cs、d/c、res 连接到 Arduino 10、9、11、13、12 引脚并进行相应编程。在主循环 update_display() 每次都会调用该函数来更新 OLED 上的信息。

Atmega328P的内部定时器1配置为每1秒周期性触发以跟踪时间。

控制: MCP 4131 数字电位器是带有 increment_digipot() 的控制器 & decrement_digipot() 使用引脚 6、7、8 作为 CS、Clk、数据引脚以适当的时钟和延迟移出数据的功能。这就像慢软SPI。由于我已经用完了其他地方的硬件 SPI 引脚,这是当时唯一的解决方案。

两个数字引脚 4 和 5 用于控制闭锁继电器。一个短的高脉冲被馈送到继电器驱动晶体管,以激励 2 个线圈以翻转继电器。它会自动发生(在过载/短路期间)或由用户手动发生。

ADC: calc_VI() 主循环中的函数执行analogRead 获取 20 次平均电压和电流信息并更新变量以获得新信息,然后将其打印在显示器上

草图用多个选项卡编写,以组织与不同操作相关联的不同功能的代码。有ADC、Digipot、Display_Fn 、中断、继电器和定时器选项卡排列所有用户定义的功能。我也会尝试添加更多注释来解释所有功能,但您应该不会觉得难以理解,因为这些功能基于执行某些任务的多个 Arduino 功能。

限制

此设备有一些严重的局限性:

  • 电压不能低于 2.0 V
  • 电压输出步进不连续
  • 电流测量会导致大电流接地
  • ADC 测量分辨率低
  • 低电压高电流负载下的效率是同类产品中最差的
  • 非标准、稍微不安全的锂电池充电

参考资料

您可以在这些教程中详细了解每个组件:

  • 旋转电位器
  • 按钮教程

结论 &

这种可编程电源将帮助我更有效地制作项目/原型。不用万用表测量电压电流功率。


代码

  • Arduino 可编程便携式电源
  • 代码版本 1.0.1 测试版
  • 代码版本 1.0.2 测试版
  • 代码版本 1.0.3
Arduino 可编程便携式电源Arduino
Ver 1.0.1 注释中的引脚信息
// 引脚重置,D0 和 D1 用于上传草图// 引脚 D9、D10、D11、D12、D13 用于控制 OLED 显示器// ADC A0 引脚用于感应 V_boost // ADC A2 引脚用于感应 V_batt (LiPo)// ADC A3 引脚用于感应 I_Output(负载)// ADC A4 引脚用于感应 V_USB(充电)// ADC A5 引脚用于感应 V_Output(负载)// 锁存继电器的 2 个线圈驱动引脚D4 &D5#define RC1 4#define RC2 5// 用户输入开关连接到管脚 D2 和 D3#define SW1 2#define SW2 3// 管脚 D6,D7,D8 用于数字电位器控制管脚#define CS_PIN 6#define CLK_PIN 7 #define DATA_PIN 8volatile uint8_t Switch1 =1;volatile uint8_t Switch2 =1;float V_Out =0.0;float I_Out =0.0;float V_Bat =0.0;float V_Bst =0.0;float V_Chg =0.0;uint32_t 时间 =80g; h"// OLED 显示控制引脚//SSD1306 oled waveshare(clk,din,cs,d/c,res);// WAVESHAREU8GLIB_SSD1306_128X64 u8g(10, 9,11, 13,12); void setup(void) { // 翻转屏幕,如果需要,analogReference(INTERNAL); u8g.setRot180();按钮初始化();中继初始化(); init_timer1(); digipot_init(); }void loop(void) { update_display(); calc_VI(); if (Switch1==0) { rc1_latch();开关1=1;增量数字电位器(); } if (Switch2==0) { rc2_latch();开关2=1; decrement_digipot(); } 延迟(100); }
代码版本 1.0.1 BetaC/C++
无预览(仅限下载)。
代码版本 1.0.2 BetaC/C++
文本/框对齐的错误修复
超载行程的错误修复

下一个版本将修复更多错误
无预览(仅限下载)。
代码版本 1.0.3C/C++
错误修复输出继电器在通电期间禁用
错误修复上电后自动设置输出电压 5.00 v
无预览(仅限下载)。

示意图

画在白板上! https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply

制造工艺

  1. Arduino Pong Game - OLED 显示器
  2. 使用 Arduino 控制硬币接收器
  3. Arduino 控制中心
  4. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  5. Arduino 带蓝牙控制 LED!
  6. Arduino Power
  7. 玩 Nextion Display
  8. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  9. Arduino 培训平台
  10. 使用 Nextion Display 构建 Fridgeye 应用程序
  11. 使用 Arduino 测量太阳辐射
  12. SSD1106 OLED 显示器上的 30 FPS 视频