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

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。


简介

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

详细使用说明可以看在线或者离线操作说明手册:H7-TOOL操作说明和客户常见问题汇总贴,含PDF离线版(2024-08-16) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!

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

1、上位机端设置

2、显示屏端设置

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)

3、写电压和电流

函数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输入采集,实际电流效果:

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

4、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)

5、信号发生器输出

函数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("开始波形输出")

动态效果:

相关推荐
程序员_三木11 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊21 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama27 分钟前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全30 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050631 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc36 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob40 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
羚羊角uou42 分钟前
【C++】优先级队列以及仿函数
开发语言·c++
FeboReigns1 小时前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns1 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++