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

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

3天内不再提示

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

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

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

答案肯定是可以。今天我们就来看看,当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("开始测试")
fori = 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

vwin 电池放电曲线

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

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

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接口在帮助文档页面查找。




审核编辑:刘清

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

    关注

    147

    文章

    9303

    浏览量

    163777
  • 可调电源
    +关注

    关注

    12

    文章

    81

    浏览量

    23295
  • lua脚本
    +关注

    关注

    0

    文章

    21

    浏览量

    7553
  • IOT
    IOT
    +关注

    关注

    186

    文章

    4070

    浏览量

    194706
收藏 人收藏

    评论

    相关推荐

    【龙芯2K0300蜂鸟板试用】+3.移植lua到loongarch

    ,输入$CC就可以编译了,输入loongarch64-linux-gnu-gcc *.c -o lua-lm -O3。生成可执行文件 lua将可执行文件拖到 开发板中,并添加可执行权限,并执行
    发表于08-18 03:31

    合宙Air780EP模块Lua开发阿里云应用指南

    合宙Air780EP模块 Lua 开发阿里云超详细教学!看完包学会!
    的头像 发表于08-08 09:00 574次阅读
    合宙Air780EP模块<b class='flag-5'>Lua</b><b class='flag-5'>开发</b>阿里云应用指南

    涂鸦推出完全开源的open sdk开发框架!大大降低IoT开发门槛

    开发者来说, IoT 开发的难点是什么?首先, IoT涉及到多个领域和多种 开发技术,每一层的技术接口、协议都需要跨平台、跨领域、跨系统的合作协同
    的头像 发表于04-12 08:14 856次阅读
    涂鸦推出完全开源的open sdk<b class='flag-5'>开发</b>框架!大大降低<b class='flag-5'>IoT</b><b class='flag-5'>开发</b>门槛

    RISC-V Linux开发环境脚本

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

    iot可以使用手机开发APP来云端控制吗?

    iot可以使用手机 开发APP来云端控制吗?
    发表于03-20 08:00

    浅谈城市泵站远程监控系统的开发

    浅谈城市泵站远程监控系统的 开发张颖姣 安科瑞电气股份有限公司 上海嘉定 201801 摘要:针对我国城市泵站设备普遍偏旧,自动化、信息化管理水平不高,有待实现泵站远程集中监控等问题,提出城市系站
    的头像 发表于02-27 15:14 272次阅读
    <b class='flag-5'>浅谈</b>城市泵站远程监控系统的<b class='flag-5'>开发</b>

    CANoe编写CAPL测试脚本的几点思考

    测试 脚本开发人员,需要考虑到测试执行者测试不同控制器时的参数配置。比如不同的网络唤醒条件、不同的网络管理消息、不同的时间参数等等。
    的头像 发表于01-02 10:42 1528次阅读
    CANoe编写CAPL测试<b class='flag-5'>脚本</b>的几点思考

    shell脚本调试技巧

    0、专业 脚本的规范格式 函数1函数2main函数main$* 1、使用dos2unix命令转换来自windows下 开发脚本dos2unix默认是没有安装的,可以yum 安装
    发表于12-28 16:57

    Shell脚本检查工具ShellCheck介绍

    ShellCheck是一个用于bash/sh shell 脚本的静态分析工具,可以辅助检查 脚本语法错误,给出建议增强 脚本健壮性。
    的头像 发表于12-27 13:43 1327次阅读
    Shell<b class='flag-5'>脚本</b>检查工具ShellCheck介绍

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

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

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

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

    脚本错误scripterror怎么解决

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

    shell并行调用脚本

    在Shell 脚本中,可以使用一些技巧来实现并行调用。以下是几种常见的方法: 使用后台进程:在Shell 脚本中,可以使用"command2 上述 脚本中,每个命令都在末尾添加了"&"符号,它们将在
    的头像 发表于11-08 10:23 725次阅读

    编写一个点名器脚本

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

    如何使用脚本完成CRC和填充值的自动完成

    恩智浦的MPC架构的微控制器使用的 开发环境IDE是S32DS ,该IDE使用的GNU GCC工具链没有提供对编译结果的CRC校验和自动生成工具,所以需要我们制作一个 脚本自动生成和填充, 脚本调用Srecord工具执行。
    的头像 发表于10-21 09:50 604次阅读
    如何使用<b class='flag-5'>脚本</b>完成CRC和填充值的自动完成