当IoT Power遇上Lua脚本开发,会擦出怎样的火花

描述

 

 

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

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

 

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


 

 

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

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

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

调整电压看电流,这不正是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)

 

 

 

运行一下看看效果:

lua脚本

 

 

● 模拟电池放电曲线

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

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

▼ 上下滚动,查看全部 ▼ 手机横屏查看更方便

 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上位机的脚本控制页面,即可看到模拟电池放电和测量二极管伏安曲线的两个示例脚本。

最新客户端/使用说明: https://iotpower.luatos.com/

lua脚本

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

审核编辑 :李倩

 


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

全部0条评论

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

×
20
完善资料,
赚取积分