H7-TOOL的LUA小程序教程第14期:任意波形信号发生器,0-20mA输出和微型数控电源(2024-10-11,已更新)
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。
简介
信号发生器,0-20mA输出和微型数控电源,可以在上位机端设置,也可以显示屏端设置
详细使用说明可以看在线或者离线操作说明手册:https://www.armbbs.cn/forum.php?mod=viewthread&tid=95373
建议优先熟悉下,特别是对应的信号发生器和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。
代码实现如下:
-- 定义一个空数组 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("开始波形输出")
动态效果: