首页 > 编程语言 >H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

时间:2024-10-22 11:33:49浏览次数:8  
标签:10 15 -- CH2 write CH1 reg16 read 热敏电阻

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


简介

电压,电流,NTC热敏电阻以及4-20mA输入,可以在上位机端设置,也可以显示屏端设置

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

建议优先熟悉下,特别是这几个功能对应使用的引脚。


LUA函数说明:

1、启动模拟量采集。

启动模拟量采集仅需用到两个大类配置,一个负载电流测量,还有一个低速多通道。

所以启动模拟信号采集封装了两种配置

(1)负载电流测量,配置代码固定如下:

function start_dso(void)
        write_reg16(0x01FF, 1) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end

(2)低速多通道测量,配置代码固定如下:

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end

 

2、测量函数,读取模拟值

测量函数比较简单,周期调用即可,建议100ms以上读取一次,因为所有数据100ms更新一轮

read_analog(9) --9 - 读取4-20mA


(1)电压读取

read_analog(0) -- 0 - CH1电压
read_analog(1) -- 1 - CH2电压

举例:每500ms读取一次CH1和CH2通道电压

实现代码如下:

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动电压测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_analog(0) -- 0 - CH1电压
data2 = read_analog(1) -- 1 - CH2电压
print(string.format("CH1电压:%f,CH2电压:%f", data1,data2))
delayms(500)
end

实际效果:


(2)高侧负载测量

read_analog(2) --2 - 高侧负载电压
read_analog(3) --3 - 高端负载电流

举例:每500ms读取一次

实现代码如下

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 1) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动高侧测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_analog(2) --2 - 高侧负载电压
data2 = read_analog(3) --3 - 高端负载电流
print(string.format("负载电压:%f,负载电流:%f", data1,data2))
delayms(500)
end

实际效果:


(3)TVCC测量

read_analog(4) --4 - TVCC电压
read_analog(5) --5 - TVCC电流

举例:每500ms读取一次

实现代码如下:

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动TVCC测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_analog(4) --4 - TVCC电压
data2 = read_analog(5) --5 - TVCC电流
print(string.format("TVCC电压:%f,TVCC电流:%f", data1,data2))
delayms(500)
end

 

(4)NTC热敏电阻测量

read_analog(6) --6 - NTC热敏电阻阻值

举例:每500ms读取一次

 

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动NTC热敏电阻测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_analog(6) --6 - NTC热敏电阻阻值
print(string.format("NTC热敏电阻:%f", data1))
delayms(500)
end

 

 

(5)供电电压测量

read_adc(7) --7 - 外部供电电压
read_analog(8) --8 - USB供电电压

举例:每500ms读取一次

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动供电电压测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_adc(7) --7 - 外部供电电压
data2 = read_analog(8) --8 - USB供电电压
print(string.format("外部供电电压:%f, USB供电电压:%f", data1, data2))
delayms(500)
end

 

(6)4-20mA测量
read_analog(9) -- 4-20mA测量

举例:每500ms读取一次

--启动模拟量电路
function start_dso(void)
        write_reg16(0x01FF, 2) -- 测量模式 0:示波器 1:负载电流 2:多路低速扫描
        write_reg16(0x0200, 1) -- CH1耦合,0:AC 1:DC
        write_reg16(0x0201, 1) -- CH2耦合,0:AC 1:DC
 
        --量程取值 0:±13.8V 1:±6.4V 2:±3.2V 3:±1.6V 4:±800mV 5:±400mV 6:±200mV 7:±100mV
        write_reg16(0x0202, 0) -- CH1量程
        write_reg16(0x0203, 0) -- CH2量程
        write_reg16(0x0204, 0) -- CH1通道直流偏值,未用
        write_reg16(0x0205, 0) -- CH2通道直流偏值,未用
        write_reg16(0x0206, 12) --采样频率 0:100 1:200 2:500 3:1K 4:2K 5:5K 6:10K 7:20K
                                                        --8:50K 9:100K 10:200K 11:500K 12:1M 13:2M 14:5M
        write_reg16(0x0207, 0) --采样深度 0:1K 1:2K 3:4K 4:8K 5:16K 6:32K
        write_reg16(0x0208, 32768) --触发电平ADC 0-65535
        write_reg16(0x0209, 50) --触发位置百分比 0-100
        write_reg16(0x020A, 0) --触发模式 0:自动 1:普通 2:单次
        write_reg16(0x020B, 0) --触发通道 0:CH1 1:CH2
        write_reg16(0x020C, 0) --触发边沿 0:下降沿 1:上升沿 
        write_reg16(0x020D, 0x03) --通道使能控制 bit0 = CH1  bit1 = CH2
        write_reg16(0x020E, 1) --采集控制 0:停止 1:启动
  end
 
print("启动4-20mA测量")
start_dso() -- 调用一次初始化
 
for i = 1, 10, 1 do -- 读取10次
data1 = read_analog(9) -- 4-20mA测量
print(string.format("4-20mA读取:%f", data1, data2))
delayms(500)
end

测量的10mA,精度还是非常不错的


3、测量函数,直接读取ADC值

这个用法和第2步读取模拟值是完全一样的。只是这里获取的是ADC支持。

read_adc(0) --0 - CH1电压
read_adc(1) --1 - CH2电压
read_adc(2) --2 - 高侧负载电压
read_adc(3) --3 - 高端负载电流
read_adc(4) --4 - TVCC电压
read_adc(5) --5 - TVCC电流
read_adc(6) --6 - NTC热敏电阻阻值
read_adc(7) --7 - 外部供电电压
read_adc(8) --8 - USB供电电压
read_adc(9) -- 9 - 4-20mA输入

4、使用上位机同时展示这些数值

 

标签:10,15,--,CH2,write,CH1,reg16,read,热敏电阻
From: https://www.cnblogs.com/armfly/p/18492235

相关文章

  • P1078
    ohdear#include<bits/stdc++.h>usingnamespacestd;intn,k,m,s,t,a[105][105],wen[105];intd[100005];boolvis[100005];intqi,mo,f;inlineintread(){ intx=0; charch=getchar(); while(ch>='0'&&ch<='9'){ ......
  • ChatGPT国内中文版镜像网站整理合集(2024/10/22)
    ​一、GPT中文镜像站① 镜像站收集开源项目 收集各种可以的ChatGPT镜像网站,免费的收费的。支持4o以及o1,支持MJ绘画② yixiaai.com 支持4o以及o1,支持MJ绘画③ chat.lify.vip 支持通用全模型,支持文件读取、插件、绘画、AIPPT④ AIChat 支持GPT3.5/4,4o以及MJ绘画1.什......
  • .netframework3.5安装被拒绝。Win1011系统Windows Update无法启动拒绝访问怎么办?【解
    原文链接:https://blog.csdn.net/qq_44905692/article/details/140434164安装.netframework3.5的时候,提示拒绝。查了下,windows更新服务是需要启动的,根本就找不到启动两个字,设置为自动也提示拒绝。用以下办法,显示了启动两个字,点击又显示1053报错,目前还没解决。打开注册表:1、通......
  • 《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
    第三十二章音频FFT实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • SSM智慧小区综合管理平台q1033带论文文档1万字以上
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:业主,小区信息,车位信息,充电桩,垃圾屋,路灯信息,车位保修,垃圾屋保修开题报告内容一、研究背景与意义随着城市化进程的加快,小区物业管理面临诸多挑......
  • win10怎么录屏不再愁!推荐3款实用工具,轻松录制你的精彩瞬间
    现在我们经常得录电脑屏幕,不管是教课、直播打游戏还是记会议内容,有个好用的录屏软件特别重要。今天,我给你推荐三款特别适合Windows10的录屏软件,用了它们,你就不用愁 win10怎么录屏了,可以轻松抓到每一个精彩时刻。1.福昕多功能录快捷通道☛https://www.foxitsoftware.cn/REC......
  • 【2024-10-20】连岳摘抄
    23:59时间不仅是流逝的河流,更是塑造我们内心的雕刻师,珍惜每一刻,因为它都是我们生命故事的独特篇章。                                                 ——菲利普·津巴......
  • 该怎么设计,PCB才能过100A的电流?
    更多电路设计,PCB设计分享及分析,可关注本人微信公众号“核桃设计分享”!对于没参加工作的小伙伴来说,很少能接触到高功率的项目,特别是要求在PCB上过高电流的实例。今天就和大伙聊一聊怎么设计PCB,才能满足100A的要求。首先要知道PCB都是通过整张铜箔来实现线路流通的,常规的铜箔......
  • 210基于java ssm springboot垃圾分类回收预约管理系统垃圾站点(源码+文档+运行视频+讲
     文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot后端框架springboot持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • test20241018
    B-tp/CF1684FDiverseSegments给定长度为\(n\)的序列\(a\),以及\(m\)个数对\((l_i,r_i)\)。你可以进行下列操作至多一次:选择序列\(a\)的一个子段,并将其中的每个元素的值都改成任意整数。你需要保证执行完操作之后,对于每个整数\(i(1\leqi\leqm)\),都有\(a[l_i,......