硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1344|回复: 4
收起左侧

[LUA教程] H7-TOOL的LUA小程序教程第14期:任意波形信号发生器,0-20mA输出和微型数控电源(2024-10-11,已更新)

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2024-10-10 00:55:49 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。


简介

信号发生器,0-20mA输出和微型数控电源,可以在上位机端设置,也可以显示屏端设置

详细使用说明可以看在线或者离线操作说明手册:https://www.armbbs.cn/forum.php?mod=viewthread&tid=95373

建议优先熟悉下,特别是对应的信号发生器和0-20mA输出引脚。

1、上位机端设置

234.png

2、显示屏端设置

下载 (1).png

下载.png

LUA函数说明:

1、打开和关闭DAC

函数 dac_on()   打开DAC电源

函数dac_off()    关闭DAC电源

这两个函数都是直接调用即可。由于信号发生器和0-40mA输出都是通过DAC实现的,所以调用这两个函数可以实现信号发生器和0-40mA输出开关。

2、写DAC数值

函数dac_write(参数1)

参数1:范围0-4095,用于写DAC值,因为是12bit DAC,所以范围是0-4095

函数dac_volt2dac(参数1)

参数1:单位mV,支持正负10V,对应的数值范围是-10000到10000,即-10000mV到10000mV,用于电压值换算为DAC值

函数dac_curr2dac(参数1)  

参数1:单位uA,支持0-20mA,对应的参数范围是0到20000,即0uA到20000uA,用于电流值换算为DAC值

举例:
这三个函数同样是直接调用即可,这三个函数推荐配合使用,  

比如设置电流输出10mA,  那么我们就可以:
local value

dac_on()
value = dac_curr2dac(10000)
dac_write(value)

又比如设置输出电压5V,那么我们就可以:
local value

dac_on()
value = dac_volt2dac(5000)
dac_write(value)

2、写电压和电流

函数dac_volt(参数1)

参数1:写电压值,单位mV,支持正负10V,对应的数值范围是-10000到10000,即-10000mV到10000mV

函数dac_curr(参数1)

参数1:写电流值,单位uA,支持0-20mA,对应的参数范围是0到20000,即0uA到20000uA

举例1:

函数dac_volt等效于dac_volt2dac + dac_write, 比如设置输出电压5V,那么我们就可以:
local value

dac_on()
dac_volt(5000)

函数dac_curr等效于dac_curr2dac + dac_write,比如设置电流输出10mA,  那么我们就可以:
local value

dac_on()
dac_curr(10000)

使用另外一个TOOL的4-20mA输入采集,实际电流效果:

004533dr3309sgxdcxf0f3.png

使用台式万用表测量实际值

23.jpg

3、TVCC微型数控电源

函数write_tvcc_dac(参数1)

参数1:用于设置TVCC的DAC值,范围0 -127

函数write_tvcc_volt(参数1)

参数1:用于设置TVCC的电压,单位mV,范围1.2V - 5.0V,即1200mV - 5000mV

举例:

推荐使用函数write_tvcc_volt设置电压值,比如设置输出3.3V,那么就是write_tvcc_volt(3300)

4、信号发生器输出

函数lua_DacWaveStop()

无形参和返回值,直接调用即可,用于停止信号发生器输出。

函数lua_DacWaveStart(参数1, 参数2, 参数3)

参数1:波形数据缓冲

注意这个缓冲是每两个字节组成一个DAC值,值得范围是0-4095,  并且数值是以字符串形式填写才行,为了方便大家使用,需要使用函数dac_volt2dac做转换即可。

参数2:是输出一个波形数据点的速度

参数3:0表示无限输出,1表示输出一次。

举例:

比如周期性输出8个数值的波形,1123mV,  556mV, 2445mV,  5334mV,  -3334mV,  -5556mV,,  7890mV,  3231mV。

代码实现如下:

[Lua] 纯文本查看 复制代码
-- 定义一个空数组
local Volt = {1123, 556, 2445,  5334, -3334,  -5556,  7890, 3231}

-- 定义要赋值的数值
local DacValues = ""

-- 使用 for 循环将数值赋值给数组的每个成员
for i = 1, #Volt do
    DacValues = DacValues..dac_volt2dac(Volt[i])
end

dac_on()
dac_wave_start(DacValues,10000,0)
print("开始波形输出")


23.png

动态效果:

IMHEX2.gif



评分

参与人数 1金币 +20 收起 理由
missfox + 20 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
 楼主| 发表于 2024-10-11 01:43:13 | 显示全部楼层
更新完成。
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2024-10-11 10:01:19 | 显示全部楼层
赞,这样离线使用任意波形展示就方便了
代码不规范,亲人两行泪!
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2024-10-11 19:15:40 | 显示全部楼层
2.26主界面(新款)按上下键  界面不改变   刷回2.25正常
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
 楼主| 发表于 2024-10-12 01:05:08 | 显示全部楼层
yang.aixiang 发表于 2024-10-11 19:15
2.26主界面(新款)按上下键  界面不改变   刷回2.25正常

那几个页面功能集在2.26版本中成到这里了,将电压表、电阻表等功能移动到万用表菜单


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-1 13:42 , Processed in 0.281306 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表