H7-TOOL的LUA小程序教程第17期:扩展驱动AD7606, ADS1256,MCP3421, 8路继电器和5路DS18B20(2024-11-01)

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

争取2.27版本固件发布前,H7-TOOL的LUA API手册同步上线


【ADS1256】

驱动8通道24bit分辨率ADS1256

这个功能还是非常有意义的,大大方便了多路高精度数据采集监测。特别是搭建三代示波器模拟前端的洞洞板模拟电路,可以方便的采集多个节点位置。从实战应用中来提出问题,再到实战应用中去解决问题,这大概就是工具的真正价值所在。

需要深入了解ADS1256可以看教程第93章节:
【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至95章(2024-05-06) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz!

1、ADS1256接线说明:

ADS1256模块 H7-TOOL (TVCC输出3.3V)

+5V <------ 5.0V 5V供电

GND ------- GND 地

CS <------ D0 SPI_CS PI0

DRDY ------> D1 准备就绪 (用到外部中断) PH10 --所有的IO电平固定是3.3V

DIN <------ D2 SPI_MOSI PE6

DOUT ------> D3 SPI_MISO PE5

SCLK <------ D5 SPI时钟 PE2

GND ------- GND 地

PDWN (模块有上拉,可不接线)

RST (模块有上拉,可不接线)

NC 空脚

NC 空脚

2、ADS1256测试代码

使用比较简单,注释很详细,使用也比较简单。

Lua 复制代码
local gain = 0    -- 增益 (0=X1,  1=X2,  2=X4,  3=X8, 4=X16, 5=X32, 6=X64)
local drate = 7    --数据率 (0=30000,1=15000,2=7500,3=3750,4=2000,5=1000,6=500,7=100, 8=60, 9=50, 10=30, 11=25, 12=15, 13=10, 14=5,  15=2.5sps)
local buffen = 1  -- 1表示使能输入buffer使能,0表示禁止
local diffmode = 0  -- 0表示单端模式,1表示差分模式
local scantable = "01234567"  --扫描次序, 可只扫描需要的通道
 
m_init("ADS1256", gain, drate, buffen, diffmode, scantable)  -- 挂载ADS1256
 
delayms(500)
 
for j=1, 8, 1 do                           --  循环执行了8次              
    adc = {m_read("ADS1256")}    --  读取数据            
    adc[1] = adc[1]*2.5/4194303   --  8通道的数据全部读取,直接计算实际电压值。
    adc[2] = adc[2]*2.5/4194303
    adc[3] = adc[3]*2.5/4194303
    adc[4] = adc[4]*2.5/4194303
    adc[5] = adc[5]*2.5/4194303
    adc[6] = adc[6]*2.5/4194303
    adc[7] = adc[7]*2.5/4194303
    adc[8] = adc[8]*2.5/4194303
    s = string.format("%f", adc[1]) --打印1个通达,多个通道同理,类似C的printf
    print(s)                                   --  打印数值
    print_wave(s)                          --  打印波形效果
    delayms(100)                          --   100ms刷新1次
end
 
m_uninit("ADS1256")  -- 卸载ADS1256

将代码贴到Lua小程序窗口里面执行即可:

【MCP3421】

这个帖子有个早期使用I2C控制驱动说明,可以优先看下:H7-TOOL的I2C控制器驱动18bit分辨率ADC芯片MCP3421操作说明,简单易用(2021-11-20) - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!

使用专用的API驱动实现如下:

Lua 复制代码
local gain = 0   --0=X1 1=X2 2=X4 3=X8
  local drate = 3  --0=240sp(12bit)  1=60sps(14bit) 2=15sps(16bit) 3=3.75sps(18bit)
  m_init("MCP3421", gain, drate)
 
  delayms(200)
 
  adc = m_read("MCP3421")  print(adc) --读ADC数据

同时将TOOL的信号发生器输出1.4V电压让MCP3421模块测试:

【8路继电器】

1、驱动模块说明:

Lua驱动74HC595,可配置任意引脚、595芯片个数。发布74HC595_8路继电器模块
Lua驱动74HC595,可配置任意引脚、595芯片个数。发布74HC595_8路继电器模块 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!

2、TOOL控制继电器模块的接线:

H7-TOOL 继电器

5.0V 5.0

3.3V VDD

GND GND

D4 SCK

D2 SDI

D9 LCK

实际接线效果:

3、控制说明:

m_init("74HC595", 4, 2, 9, 1) -- 配置D4为SCK时钟, D2为SDI数据, D9为LCK锁存, 1个74HC595芯片

m_write("74HC595", 2, 1) -- 设置74HC595的Q2 = 1 (第2个形参是起始bit, 第3个形参值。 支持多个形参)

m_write("74HC595", 2, 1,0) --设置74HC595的Q2 = 1 Q3 = 0

m_write("74HC595", 0, 1,0,1,0, 0,0,0,0) -- 设置74HC595的Q0-7 分别为 1,0,1,0, 0,0,0,0

注意一点就行,第2个形参是设置的起始继电器,范围从0到7。后面的参数根据大家的设置起始继电器,设置继电器的开关。

1表示这两个导通:

0表示这两个导通:

比如我们控制前4个为1,后4个为0,就是如下效果:

验证是否设置正常,进入TOOL的电阻,二极管测量界面即可:

接线如下:

可以方便的测量继电器的闭合状态。

【AD7606】

需要深入了解AD7606可以看教程第76或77章节:
【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至95章(2024-05-06) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz!

1、设置AD7606模块是SPI接口:

2、AD7606 SPI接线说明:

AD7606模块 H7-TOOL

+5V <------ 5.0V 5V供电

GND ------- GND 地

CS <------ D7 片选控制

RD/SCLK <------ D5 时钟线

DB7/DOUT ------> D3 数据输出

BUSY ------> D6 BUSY信号

CVA CVB <------ D0, 启动转换

RAGE <------ 可以接3.3V或者GND控制,3.3表示±10V测量范围,GND表示±5V测量范围。

RST <------ 不接

OS0 <------ 可以接3.3V或者GND控制, 过采样引脚0(默认接地),最好接上

OS1 <------ 可以接3.3V或者GND控制,过采样引脚1(默认接地),最好接上

OS2 <------ 可以接3.3V或者GND控制, 过采样引脚2(默认接地),最好接上

其中CVA和CVB可以考虑短接

最终接线效果:

3、AD7606测试代码:

Lua 复制代码
adc = {} --定义个数组
 
ex_start()   -- 启动AD7606
 
delayms(100)
 
for j=1, 800,1 do                  -- 循环800次                                    
    adc[1] = ex_adc(0)*5/32768  
    adc[2] = ex_adc(1)*5/32768
    adc[3] = ex_adc(2)*5/32768
    adc[4] = ex_adc(3)*5/32768
    adc[5] = ex_adc(4)*5/32768
    adc[6] = ex_adc(5)*5/32768
    adc[7] = ex_adc(6)*5/32768
    adc[8] = ex_adc(7)*5/32768
    s = string.format("%f", adc[8]) --打印1个通达,多个通道同理,类似C的printf
    print(s)                        --  打印数值
    print_wave(s)                   --  打印波形效果
    delayms(100)                    --   100ms刷新1次
end
 
ex_stop() -- 卸载AD7606

将代码贴到Lua小程序窗口里面执行即可:

测试3.3V的效果:

【DS18B20】

使用这个功能,有必要优先看下TOOL端展示和使用方法:H7-TOOL的5路DS18B20温度表波形展示和数据记录说明 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!

使用专用的API驱动实现如下:

Lua 复制代码
m_init("DS18B20")
 
re,temp = m_read("DS18B20", 0)  --读D0口DS18B20的温度值, re = 1 表示OK
re,temp = m_read("DS18B20", 2)  --读D2口DS18B20的温度值, re = 1 表示OK
 
m_uninit("DS18B20") --退出程序

1、H7-TOOL支持外接5路DS18B20,通过D1,D3,D5,D7和D9外接DS18B20数据引脚,而18B20的GND和VCC接到TOOL的GND和TVCC供电上即可。

2、其中D7和D9是内置了上拉电阻的,大家可以直接外接DS18B20测试,如果使用D1,D3和D5,采用下面方式即可。

相关推荐
井眼2 小时前
微信小程序-prettier 格式化
微信小程序·小程序
wqq_9922502774 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
licy__10 小时前
微信小程序登录注册页面设计(小程序项目)
微信小程序·小程序
Dnelic-13 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记
unix2linux17 小时前
YOLO v5 Series - Image & Video Storage ( Openresty + Lua)
yolo·lua·openresty
最后一个bug18 小时前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
说私域2 天前
基于“开源 2+1 链动模式 S2B2C 商城小程序”的社区团购运作主体特征分析
大数据·人工智能·小程序
HUODUNYUN2 天前
小程序免备案:快速部署与优化的全攻略
服务器·网络·web安全·小程序·1024程序员节
guanpinkeji2 天前
二手手机回收小程序,一键便捷高效回收
微信小程序·小程序·软件开发·手机回收小程序·二手手机回收
paterWang2 天前
小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
java·spring boot·小程序