H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。
争取2.27版本固件发布前,H7-TOOL的LUA API手册同步上线
简介
脉冲测量,4路PWM,多路GPIO可以在上位机端设置,也可以显示屏端设置
详细使用说明可以看在线或者离线操作说明手册:https://www.armbbs.cn/forum.php?mod=viewthread&tid=95373
用到的D0 -D9引脚是指的这几个引脚:
注意TVCC电平决定D0 - D9电平范围,支持1.2V - 5.0V
LUA函数说明:
1、PMW
lua 接口函数 gpio_pwm_out(pin, freq, duty)
--pin : 端口号,0、1、3、4
--freq : 频率,Hz单位,整数
--duty :占空比,百分比,0 - 100.0%
--推挽输出,电平由TVCC电压决定(可设置) --四路共用的一个TIM,因此频率必须相同。占空比可以不同
函数用法:
gpio_pwm_out(0, 1000, 50.00) --D0口输出1KHz,占空比50.00%的方波
gpio_pwm_out(1, 1000, 40.00) --D1口输出1KHz,占空比40.00%的方波
gpio_pwm_out(3, 1000, 30.00) --D3口输出1KHz,占空比30.00%的方波
gpio_pwm_out(4, 1000, 10.00) --D4口输出1KHz,占空比10.00%的方波
gpio_pwm_out(0, 0, 0) --D0口PWM关闭,输出0电平
gpio_pwm_out(1, 0, 0) --D1口PWM关闭,输出0电平
gpio_pwm_out(3, 0, 100) --D3口PWM关闭,输出1电平
gpio_pwm_out(4, 0, 100) --D4口PWM关闭,输出1电平
set_tvcc(3.30) --设置电平为3.3V
实际测试代码:
gpio_pwm_out(0, 1000, 50.00) --D0口输出1KHz,占空比50.00%的方波 gpio_pwm_out(1, 1000, 40.00) --D1口输出1KHz,占空比40.00%的方波 gpio_pwm_out(3, 1000, 30.00) --D3口输出1KHz,占空比30.00%的方波 gpio_pwm_out(4, 1000, 10.00) --D4口输出1KHz,占空比10.00%的方波 set_tvcc(3.30) --设置电平为3.3V print("测试PWM输出")
示波器测试D3和D4的输出效果:
2、GPIO
GPIO的设置选项比较多,推荐直接使用这里的LUA小助手生成配置比较方便,比如配置D2输出高电平
配置D2输出:
配置输出高电平:
测试代码:
gpio_cfg(2, 1) --配置模式D2 = 1-GPIO_OUT gpio_write(2, 1) --设置输出D2 = 1 set_tvcc(3.30) --设置电平为3.3V print("测试D2输出高电平")
示波器测量D2输出高电平
3、脉冲测量
H7-TOOL 的D1接口,可以测量输入脉冲的频率、占空比、个数。
下面是 lua程序用法:
m_init("DETPULSE") --进入D1测量脉冲模式 count, freq, duty = m_read("DETPULSE") --返回脉冲个数(整数)、频率(Hz 浮点数)、占空比(% 浮点数) m_write("DETPULSE", 0,0,0) --清零脉冲个数、频率、占空比 m_uninit("DETPULSE") --退出D1测量脉冲模式
比如我们这里使用D1端口测量1KHz的脉冲信号。直接使用TOOL的信号发生器功能输出即可,峰峰值3.3V,直流偏置1.65, 频率1KHz
测试代码:
m_init("DETPULSE") --进入D1测量脉冲模式 set_tvcc(3.30) --设置电平为3.3V print("测试D2输出高电平") for i = 1, 10, 1 do count, freq, duty = m_read("DETPULSE") --返回脉冲个数(整数)、频率(Hz 浮点数)、占空比(% 浮点数) print(string.format("脉冲数:%d, 频率:%f, 占空比:%f", count, freq, duty)) delayms(1000) end m_uninit("DETPULSE") --退出D1测量脉冲模式
实际效果:
4、波形打印
封装了一个 print_wave,方便大家将采集的数据以波形方式打印出来。使用比较简单,比如我们要测试tan函数:
for j=-10, 10, 0.1 do s = string.format("%f", math.tan(j)) -- 转换成字符格式 print(s) print_wave(s) delayms(20) end
又比如打印三路,就是%f, %f,%f
for j=-10, 10, 0.1 do s = string.format("%f,%f,%f", math.tan(j),math.tan(j)/2,math.tan(j)/4) -- 转换成字符格式 print(s) print_wave(s) delayms(20) end
动态效果: