0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈IoT Power的Lua脚本开发应用

合宙LuatOS 来源:合宙LuatOS 作者:让万物互联更简单 2022-09-05 14:43 次阅读

Lua脚本开发简单快速,在Cat.1和MCU开发应用中已历经验证并广受好评。所以LuatOS社群经常有人问:合宙推出的口袋神器——IoT Power,可以脚本开发吗?

答案肯定是可以。今天我们就来看看,当IoT Power遇上Lua脚本开发,会擦出怎样的火花~

浅谈IoT Power的Lua脚本开发应用

合宙IoT Power专为工程师朋友量身打造,外观近似ZIPPO打火机大小——既是一款高性能高精度的迷你型可调电源,也是兼备记录分析功能的低功耗电流分析仪。

● 测量二极管伏安特性曲线

二极管伏安特性,初中物理课就学过的一个基本物理法则,相信大家都再熟悉不过了。可是通常测量这个曲线很麻烦,要不停的调整电压并记录电流然后绘图。

调整电压看电流,这不正是IoT Power的强项嘛!那我们只需要写脚本慢慢升高电压,然后读取电流自动绘图就行了。

说干就干,写个脚本:

Lua


--该脚本可以测量二极管伏安特性曲线 --测试前请先关闭输出,然后将二极管正负极分别连接至IoT Power

--最终将生成一张图片

Lua

--该脚本可以测量二极管伏安特性曲线
--测试前请先关闭输出,然后将二极管正负极分别连接至IoT Power
--最终将生成一张图片

apiMessageBox("提示", "请先选择需要保存图表的文件位置")

local path = apiGetSavePath("png")

if not apiSetDevice(0, 0, false) then
apiMessageBox("警告", "获取不到信息,请确保你已连接设备!")
print("脚本已退出")
return

end



--开个任务来测

sys.taskInit(
function()
sys.wait(1000)
--结果存这里
local c = {}
local v = {}
print("开始测试")
for i = 1, 19 do --mA档位时
apiSetDevice(i / 10, 1, true)
sys.wait(500)
local tc, tv = apiGetCV()
if tc and tv then
if not (#v > 0 and tv < v[#v]) then
table.insert(c, tc)
table.insert(v, tv)
print("got", tc, tv)
end
end
end
for i = 4, 50 do --A档位时
apiSetDevice(i, 1, true)
sys.wait(500)
local tc, tv = apiGetCV()
if tc and tv and tv > v[#v] then
table.insert(c, tc)
table.insert(v, tv)
print("got", tc, tv)
end
end

if path then
print(apiPlot(v, c, "二极管伏安曲线", "电压(V)", "电流(mA)", 500, 500, path))

print("测试结束!文件已保存在", path)
end
apiSetDevice(0, 0, false)
end)


运行一下看看效果:

719f61ec-2cd0-11ed-ba43-dac502259ad0.png

模拟电池放电曲线

在真实世界里电池的电压下降不是线性的,所以经常会遇到电池前面一段很耐用,但是到了一定电压以后,电压开始快速下降。

这种过程原来很难模拟,但是有了脚本就不一样了。我们可以通过脚本模拟电池放电曲线,达到和真实电池一样的电压变化。

Lua

--模拟电池放电脚本

--请根据实际需求修改这里的变量值

--请先连接设备,再运行脚本

--最大电流限制,单位mA

local maxCurrent = 1000

--电池电量(单位mWh),这里假定0.37Wh(3.7V 100mAh)

local power = 0.37 * 1000

--例子数据:

--瓦时和毫安时换算

--Wh=V×mAh÷1000

--mAh=Wh÷V×1000



--电量从100%到0%,每10%的电压(除了最后四个为15%、10%、5%、0%)

local vt = {

4.2,

4.08,

4,

3.93,

3.87,

3.82,

3.79,

3.77,

3.73,

3.7,

3.68,

3.5,

2.5

}

--获取使用过多少电量后的电池电压

--传入值0-100,传入整型数字

function getVoltagePercent(used)

if used >= 100 then

return vt[#vt]

end

if used < 80 then --剩余电量大于20%

local now = math.floor(used / 10)

local offset = (used % 10) / 10

return vt[now + 1] - (vt[now + 1] - vt[now + 2]) * offset

else--剩余电量小于20%

local now = math.floor((used - 80) / 5)

local offset = (used % 5) / 5

return vt[now + 9] - (vt[now + 9] - vt[now + 10]) * offset

end

end



sys.taskInit(

function()

print("开始测试!")

local totalPower = 0

local lastPower = apiGetPower()

local lastv = 0

while true do

local pNow = apiGetPower()

local p = pNow - lastPower

--防止比上次小

if p > 0 then

totalPower = totalPower + p

end

lastPower = pNow

--算一下现在用了多少电

local used = math.floor(totalPower / power * 100)

--获取当前电压

local v = getVoltagePercent(used)

--和上次电压不同的时候,就设置一下电压

if v ~= lastv then

localr = apiSetDevice(maxCurrent, v, true)

if not r then

print("电压设置失败,请检查数据和设备连接")

end

end

lastv = v

print("已使用电量" .. totalPower .. "mWh," .. used .. "%,输出电压" .. v .. "V")

sys.wait(2000)

end

end

)

● 模拟电池内阻

电池放电过程中不仅仅是电压的下降,实际上内阻也会发生变化。特别是一些低功耗设备的锂亚电池,电压下降以后内阻很大导致输出电流很小,当设备进行无线发射时会遇到电流不够导致重启。这种现象在研发阶段很难模拟,就会导致设备实际工作时长和理论值偏差较大。

通过IoT Power脚本,我们可以设置在不同电压下的最大电流模拟电池内阻,达到和真实世界一样的情况,方便在研发期及时发现问题。

IoT Power使用及技术交流

最新版本的IoT Power上位机的脚本控制页面,即可看到模拟电池放电和测量二极管伏安曲线的两个示例脚本。

71ce5f56-2cd0-11ed-ba43-dac502259ad0.png



可根据实际需求,新建自己的脚本自由发挥;相关Lua接口在帮助文档页面查找。




审核编辑:刘清

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

    关注

    144

    文章

    9013

    浏览量

    161363
  • 可调电源
    +关注

    关注

    12

    文章

    80

    浏览量

    23140
  • lua脚本
    +关注

    关注

    0

    文章

    21

    浏览量

    7529
  • IOT
    IOT
    +关注

    关注

    186

    文章

    3986

    浏览量

    193207
收藏 人收藏

    评论

    相关推荐

    RISC-V Linux开发环境脚本

    比较多的RISC-V SOC Linux开发环境使用CMake/Makefile,虽然也知道些怎么用,但有没完整系统的这方面学习资料?如语法、脚本链接结构等,可以分享下深入学习
    发表于 03-31 12:48

    脚本调试工具有哪些?脚本调试工具怎么用?

    脚本调试是软件开发过程中非常重要的一环,它能帮助开发者快速定位并解决代码中的错误。大多数编程语言都提供了各种各样的脚本调试工具,本文将介绍一些常见的
    的头像 发表于 12-01 14:40 292次阅读

    三次输入密码错误怎么办?

    锁定的是IP,不是输入的账户名或者密码,也就是说任一一个输错3次就会被锁定 Redis的Lua脚本中实现了key过期策略,当key消失时锁定自然也就消失了 技术栈同SpringBoot+Redis+Lua
    的头像 发表于 11-28 10:00 401次阅读
    三次输入密码错误怎么办?

    脚本错误scripterror怎么解决

    分析和排查。以下是一些常见的解决脚本错误的方法: 检查语法错误: 仔细检查脚本中的代码,看是否有拼写错误、缺少分号、括号不匹配等语法错误。 在一些集成开发环境(IDE)或代码编辑器中,可以借助自动完成、语法高亮等功能来辅助检查语
    的头像 发表于 11-26 14:46 3044次阅读

    编写一个点名器脚本

    目的:编写一个脚本,可以将准别好的名字合集的.txt传入脚本,然后每次随机显示一个人的姓名
    的头像 发表于 11-06 12:41 343次阅读
    编写一个点名器<b class='flag-5'>脚本</b>

    Openwrt开发指南 第7章 添加Web界面

    LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从Whiterussian到Kamikaze实现快速配置接口。Lua是一个小巧的脚本语言,很容易嵌入其它语言。轻量级
    的头像 发表于 06-29 09:04 2936次阅读
    Openwrt<b class='flag-5'>开发</b>指南 第7章 添加Web界面

    请问如何透过PinView与Lua脚本查看并改变寄存器状态?

    如何透过 PinView 与 Lua 脚本查看并改变寄存器状态?
    发表于 06-20 07:02

    如果我想设置SSID和WEP密钥参数而不更改它在我的LUA脚本中的硬编码,将如何完成?

    密钥参数而不更改它在我的 LUA 脚本中的硬编码,将如何完成? 示例:我以某种方式将 ESP 移动到具有另一个路由器设置(SSID 名称和 WEP 密钥)的另一个位置。是否有任何 LUA
    发表于 06-12 07:53

    esp8266如何删除lua

    好吧,我们在 esp8266 上有一个 lua。我们不想再使用 lua,而是使用本机 AT 命令。 1.当我们发送 AT 命令时,我们得到 lua 错误,当有 lua 固件时,你不能发
    发表于 06-12 06:24

    如何在init.lua文件中存储更改的变量?

    如何在 init.lua 文件中存储更改的变量? 例如:- 假设我使用了 GPIO 05 和 GPIO 04 ,其中第一次在 init.lua 中都是低电平。 但随后 GPIO 05 为高电平且
    发表于 06-09 07:31

    如何NodeMCU + TFT LCD制作简单游戏?

    我的 WiFiBoy 项目上周末获得了一个新的定制 NodeMCU+UCG-lib 固件。它对我们用 Lua 脚本制作游戏非常有用。 这是我们第一款使用 NodeMCU 1.5.1-wb 固件的 Lua 游戏的分享视频。 (这是
    发表于 05-24 09:03

    ESP8266 LUA如何通过Wi-Fi自动更新?

    这个 LUA 脚本定期检查网络服务器上的更新,如果发现更新,它会自动下载到 ESP 模块。 该脚本专门设计用于使用电池运行并使用深度睡眠功能的 ESP8266 模块。
    发表于 05-23 08:03

    Bash脚本中特殊变量$0是什么?

    在 Bash 脚本中,`$0` 是一个特殊变量,它代表当前脚本的路径和名称。这个变量用于表示脚本自身,它是 Bash 环境中的一个重要组成部分。`$0` 变量是一个只读变量,无法更改。
    的头像 发表于 05-12 14:41 1516次阅读

    lua简单脚本部分没有响应是为什么?

    我发现了一个名为 30 分钟 esp8266 网页服务器中继控制的小项目。 用NODEmcu刷机,用Esplorer上传lua。它可以工作,但一两天后它就会停止为该网页提供服务。十分钟后又回来了。郁闷上面找问题。
    发表于 05-09 06:23

    如何使用NodeMCU+所有自定义脚本烧写esp8266?

    我正在考虑使用 ESP8266 通过 WiFi 控制所讨论的机器人的想法。我已经使用 lua 脚本在 NodeMCU 开发板 (ESP-12E) 上成功地做到了这一点,对此我感到非常满意。但我还有一
    发表于 05-04 08:17