E-kit 一体化电子工具箱

news2024/11/5 22:40:25

请添加图片描述

详细请见:
E-kit: E-kit 一体化电子工具箱 (github.com)

在个人博客页查看本文

E-kit

E-kit 一体化电子工具箱,STM32 实现,示波器 + 函数发生器 + 幅频特性仪器…

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

目前此项目已归档

注意:工程采用 GB2312 编码

基本功能

  • STM32F103 (停留在较旧的版本并停止更新,仅支持以下功能)
    • 基本示波器实现(包括波形判断,频率测量,峰峰值测量,占空比测量)
    • 任意频率正弦波输出
    • 多窗口支持
    • 集中式 Log
  • STM32F407
    • 基本示波器实现(包括波形判断,频率测量,峰峰值测量,占空比测量)
    • 任意频率正弦波输出
    • 多窗口支持
    • 集中式 Log
    • 幅频特性仪移植
    • 上位机通讯重构
    • 函数信号发生器
    • 示波器触发模式
    • 电池管理

设计文档

一、工作原理

1. 软件部分

采用 HAL 库支持的 C 语言程序实现,通过无操作系统的形式直接运行在 ARM 架构 STM32F407 单片机上。通过 ARM Cortex M4 额外支持的硬件 FPU、DSP 指令集,更快的 FSMC,给予程序更高的运行效率、数据处理效率以及更高的显示速度。

程序流程通过初始化 + 主循环的结果,GUI 交互回调相应的模式。稳定性好。显示方案采用 STemWin 图形库实现,并支持电阻屏触摸,自己移植的图形库配合 HAL 库的框架工程开源在framist/STemWinForHAL: 移植 emWin 与 HAL 库结合。(正点原子项目结构) (github.com)。

项目工程已开源在 framist/E-kit: E-kit 一体化电子工具箱 (github.com)

总体使用到的版级接口:

TFTLCD <--排线--> TFTLCD(>=3.5')

VREF  <-跳线帽-- 3.3V

PA5  <-------- adc 输入

PA4  --------> dac 输出

1.1 示波器部分

通过通用定时器 TIM5 定时中断,控制 ADC 按精准的时间间隔取样。

采用 DSP 库中的 FFT 算法得出频率,作为后续处理的前提参考。微分法首先判别是否为方波,积分法判断波形和测占空比,同时还能实时测量信号的峰峰值、偏置电压等等。

示波器还采用自动量程。通过当前计算的波形频率自动调整 ADC 的采样周期,已适应更大的频率范围

1.2 信号发生器部分

使用 DMA 的方法把内存中的波形数据依次传递到 DAC 控制器,基本定时器 TIM6 控制 DMA 的速度来控制输出波形的频率。

通过软件控制波形、峰峰值、偏置电压、占空比。

DAC 输出 0~3.3V 的电平信号再经过外围电路的转换得到 -5V 到 +5V 范围的信号并进行输出。

1.3 幅频特性仪部分

比较输入输出信号的峰峰值可以计算得出滤波器的增益,

通过扫频的方式连续测量可以绘制出未知滤波器的幅频特性曲线。

通过幅频特性曲线可以判别出滤波器的类型,目前可自动判别以下几种类型的滤波器:

0:低通 HPF 1:高通 LPF 2:带通 BPF 3:带阻 BRF

二、仪器制作过程

1. 软件部分

1.1 主函数部分

主函数主要实现 init 与 main loop。

1.2 屏幕部分

屏幕采用 3.5’ TFTLCD 作显示,并可作为电阻屏输入触摸,支持手写笔。

1.2.1 初始化

请添加图片描述

先生成一个主窗口框架 mainFramewin,再在此窗口框架中通过 Multipage 窗口小组件生成四页选项卡,每页分别包含一个窗口。

hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIPAGE_0);
MULTIPAGE_AddEmptyPage(hItem, 0, " oscilloscope ");
MULTIPAGE_AddEmptyPage(hItem, 0, " signal generator ");
MULTIPAGE_AddEmptyPage(hItem, 0, " A-F characteristics ");
MULTIPAGE_AddEmptyPage(hItem, 0, " Logs ");

WM_HWIN CreateoscilloscopeFramewin(void);
hWin_oscilloscopeFramewin = CreateoscilloscopeFramewin(); 
MULTIPAGE_AttachWindow(hItem,0,hWin_oscilloscopeFramewin);

WM_HWIN CreateSingalWindow(void);
hWin_SingalWindow = CreateSingalWindow();
MULTIPAGE_AttachWindow(hItem,1,hWin_SingalWindow);

WM_HWIN CreateAFCFramewin(void);
hWin_AFCFramewin = CreateAFCFramewin();
MULTIPAGE_AttachWindow(hItem,2,hWin_AFCFramewin);

WM_HWIN CreateLogWindow(void);
hWin_LogFramewin = CreateLogWindow();
MULTIPAGE_AttachWindow(hItem,3,hWin_LogFramewin);

MULTIPAGE_SelectPage(hItem,0);

1.2.2 图形界面

按功能分别包含 4 个子窗口,功能分别作示波器、波形发生器、幅频特性测试仪、系统日志的窗口:

日志窗口只是一个输出日志的文本框。

1.3 信号获取与处理部分

1.3.1 ADC 获取数据

1.3.2 FFT 处理数据

STM32F4 采用 Cortex-M4 内核,相比 Cortex-M3 系列除了内置硬件 FPU 单元,在数字信号处理方面还增加了 DSP 指令集,支持诸如单周期乘加指令(MAC),优化的单指令多数据指令(SIMD),饱和算数等多种数字信号处理指令集。相比 Cortex-M3,Cortex-M4 在数字信号处 理能力方面得到了大大的提升。Cortex-M4 执行所有的 DSP 指令集都可以在单周期内完成,而 Cortex-M3 需要多个指令和多个周期才能完成同样的功能。

主要采用

void arm_cfft_radix4_f32(
    const arm_cfft_radix4_instance_f32 * S,
    float32_t * pSrc);
void arm_cmplx_mag_f32(
    float32_t * pSrc,
    float32_t * pDst,
    uint32_t numSamples);

完成 FFT 计算。(但主要这两个函数目前不再推荐使用)

主要程序结构如下:

float wave_frequency_calculate(void)
{
    //初始化 scfft 结构体,设定 FFT 相关参数
    arm_cfft_radix4_instance_f32 scfft;
    arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1); // TODO 不知道加上按位取反的原理
    //FFT 计算(基 4)
    arm_cfft_radix4_f32(&scfft,fft_inputbuf);	
    //把运算结果复数求模得幅值 
    arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);	

    uint32_t Max_Val = 0;
    for (i = 2; i < FFT_LENGTH / 2; i++){
        if (fft_outputbuf[i] > Max_Val){
            Max_Val = fft_outputbuf[i];
            frequency_max_position = i;
        }
    }

    sample_psc = 0;
    sample_arr = TIM5->ARR;
    sample_frequency = 84000000.0f / (float)((sample_arr + 1) * (sample_psc + 1)) / (float)k;
    wave_frequency = (float)frequency_max_position * sample_frequency / FFT_LENGTH;
    return wave_frequency;
}

1.3.3 信号显示

1.3.3.1 时域波形的显示

一次采样玩立即就刷新屏幕显示数据

1.3.3.2 幅频特性的显示

可采取线性显示和对数显示

1.4 信号的产生与输出部分

1.4.1 DAC 产生信号

DAC+TIM6+DMA 的配置由 cube-MX 配置生成。

1.4.1.1 DAC 的初始化

hdma_dac1.Instance = DMA1_Stream5;
hdma_dac1.Init.Channel = DMA_CHANNEL_7;
hdma_dac1.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_dac1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_dac1.Init.MemInc = DMA_MINC_ENABLE;
hdma_dac1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_dac1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_dac1.Init.Mode = DMA_CIRCULAR;
hdma_dac1.Init.Priority = DMA_PRIORITY_HIGH;
hdma_dac1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;

1.4.1.2 DMA 传输数据

/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();

/* DMA interrupt init */
/* DMA1_Stream5_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);

1.4.1.3 TIM6 提供中断源

htim6.Instance = TIM6;
htim6.Init.Prescaler = 0;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 9999;

1.4.1.4 不同波形的产生

控制传入的枚举类型以及其他参数可以方便的配置输出

enum Wave_Form
{
  Wave_Form_NA,     
  Wave_Form_SIN,      //正弦波  ~~~~
  Wave_Form_TRI,      //三角波  VVVV
  Wave_Form_SQU,      //方波    _||_
  Wave_Form_SAW_1,    //锯齿波 1 /|/|  
  Wave_Form_SAW_2,    //锯齿波 2 |\|\|  
  Wave_Form_RAD,      //噪波    ????
  Wave_Form_DC        //直流    ----
};
/**
 * @brief Wave_Output_Config
 * 
 * @param Output_Wave_Form 类型:enum Wave_Form 
 * @param f 单位 Hz
 * @param Vpp  单位 V
 * @param offset  单位 V
 * @param duty 单位 %
 * @return int 
 */
int Wave_Output_Config(enum Wave_Form Output_Wave_Form, float f, float Vpp, float offset, int duty)

1.4.2 上位机传输数据

1.4.2.1 无线传输模块

采用蓝牙串口透传。

1.4.2.2 上位机接收

有蓝牙的设备都可以通过蓝牙的串口信号接收,包括手机电脑等。

2. 硬件部分

参考外围电路设计

from yuexiavqiufeng

请添加图片描述

三、实验仪器的应用

1. 整体说明

在转置的前端是显示屏幕,可以直接在屏幕上直接触摸来对各种参数进行设置,旁边分别是信号的输入和输出端口。在装置的后端是 USB 电源接口和指示灯。

2. 示波器功能

请添加图片描述

当信号经由输入端口进入仪器以后即可在屏幕上得到其波形,将对其波形进行识别并做出判断。同时显示出其峰峰值、频率,如果是自动判断为方波将自动测量占空比,或者手动点击DR Measure按钮也可以自动测量占空比。

对于波形显示,可以对其水平灵敏度和垂直灵敏度进行调节,也可以点击Stop/Run进行波形冻结。

3. 信号发生器功能

请添加图片描述

输出波形选择:

可以选择输出:

  • OFF, 不启用 DAC 输出功能
  • SIN, 正弦波 ~~~~
  • TRI, 三角波 VVVV
  • SQU, 方波 _||_
  • SAW_1, 锯齿波 1 /|/|
  • SAW_2, 锯齿波 2 |\|\|
  • RAD, 噪波 ????
  • DC, 直流 ----

捷径配置选择:

控制在示波器界面的捷径控制框可以改变的参数。

输出波形参数配置:

并且可以方便实时地改变 占空比、峰峰值、偏置电压、占空比(如果输出是方波)。

调整步进配置:

调整微调按钮的步进大小

输出按钮:

快速控制是否输出。也可通过输出按钮的颜色判断当前是否有输出。

4. 幅频特性仪功能

请添加图片描述

选择 single measurement 可测量滤波器在单个频率下的增益。

选择 auto measurement 会扫频并自动进行测量,并会绘制出滤波器的幅频特性曲线

勾选 Log coordinate 复选框可以以对数方式绘制幅频特性曲线

5. 上位机传输功能

在示波器界面选择 IOT 复选框,可开启上位机传输功能,上传当前屏幕显示的波形,并与屏幕刷新同步。

四、仪器性能指标分析

2.示波器

2.1 频率范围、误差、精度

频率范围:50Hz——100kHZ

频率精度:1Hz

频率误差:

2.2 幅值范围、误差、精度

幅值范围:-5V——+5V

幅值精度:10mV

幅值误差:

2.3 水平灵敏度、垂直灵敏度

水平灵敏度范围:1us/div~1000us/div 可调

垂直灵敏度范围:50mV/div~500mV/div 可调

垂直精度:2.4mV

水平精度:5us

3.信号发生器功能

3.1 频率范围、误差、精度

频率范围:20Hz——50kHZ

频率精度:1Hz

频率误差:

3.2 幅值范围、误差、精度

幅值范围:-5V——+5V

幅值精度:1mV

幅值误差:

3.3 可产生的波形类型

方波、三角波、正弦波、锯齿波、直流、噪声

4.幅频特性仪功能

5.上位机传输功能


请添加图片描述

框架科工 | 致力为虚无的世间献上一点花火🔥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ:基于DelayExchange插件实现延迟队列

因为延迟队列的需求非常多&#xff0c;所以RabbitMQ的官方也推出了一个插件&#xff0c;原生支持延迟队列效果。 这个插件就是DelayExchange插件。参考RabbitMQ的插件列表页面&#xff1a;Community Plugins — RabbitMQ 使用方式可以参考官网地址&#xff1a;Scheduling Mes…

OPC UA协议报文,基础介绍+Hello报文解析

消息主要分为&#xff1a;消息头和附加字段 通讯过程 协议标准第一部分进行总体介绍&#xff1b;协议标准第四部分有详细介绍通讯过程 流程介绍 整体流程 连接套接字》Hello》打开安全信道》创建会话》关闭安全信道》关闭套接字 订阅等事件 服务器审核行为 聚合的服务器审…

你已经应用了哪种服务注册和发现的模式呢?

前面历史文章中我们有说过关于微服务的注册和发现&#xff0c;并以 etcd 作为简单例子简单阐述了关于服务注册和发现的应用 那么日常工作中&#xff0c;你已经使用了服务注册和发现的哪些模式呢&#xff1f; 服务注册和发现的作用 首先&#xff0c;简单说明一下服务注册和发…

大数据知识点之大数据5V特征

大数据的特征可以浓缩为五个英文单词&#xff0c;Volume(大量&#xff09;、Variety(多样性&#xff09;、Velocity(速度&#xff09;、Value(价值&#xff09;、Veracity(准确性&#xff09;。因为是5个特征都是以“V”开头的英文单词&#xff0c;又叫大数据5V特征。 概述&…

GFS文件系统

GFS 分布式文件系统 GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。 由存储服务器、客户端以及NFS/Samba 存储网关&#xff08;可选&#xff0c;根据需要选择使用&#xff09;组成。 没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性。 …

230908

1. 地址 0基础漫画式阅读&#xff1a;https://www.cnblogs.com/charlesblc/p/6130433.html 清晰详细的地址生成解释&#xff1a;比特币&#xff1a;账户私钥、公钥、地址的生成 - kumata - 博客园 (cnblogs.com) 对原理更详细解释&#xff1a;区块链技术核心篇之二&#xff…

数学建模__动态规划

动态规划就是&#xff0c;将任务每一步均记录下来&#xff0c;以便将来重复使用时能够直接调用 问题描述&#xff1a;给定n个物品&#xff0c;每个物品的重量是Wi,价值是Vi&#xff0c;但是背包最多能装下capacity重量的物品&#xff0c;问我们如何选择才能利益最大化。 这里涉…

从Endnote导入Zotero(含PDF)

概述 这个问题尚未完美的解决&#xff0c;不过本方法可行 1 在Endnote中导出.xml文件 2 替换路径 使用记事本打开导出的.xml文件 将 internal-pdf://替换为 /My EndNote Library.Data/PDF/3 在Zotero中导入 导入后可以看到有PDF附件 4 删除笔记 导入文献之后可能会有一些…

Springboot 实践(17)spring boot整合Nacos配置中心

前文我们讲解了Nacos服务端的下载安装&#xff0c;本文我们降价spring boot整合nacos&#xff0c;实现Nacos服务器配置参数的访问。 一、启动Nacos服务&#xff0c;创建三个配置文件&#xff0c;如下所示 Springboot-Nacos-Client-dev.yaml文件配置参数 Springboot-Nacos-Clie…

WebLOAD: 一站式性能测试工具

WebLOAD 是一款一站式前端性能测试工具&#xff0c;对测试人员来说使用非常方便。 它可以帮助前端工程师和测试快速对网页进行性能测试和优化&#xff0c;提高网页加载速度&#xff0c;减少页面卡顿和闪烁。 WebLOAD的特点、使用指南以及企业实际使用中的案列。 WebLOAD的特…

ARM 相关概念1

一、ARM相关介绍 二、ARM相关概念【重点】 三、ARM发展史 四、ARM产品分布 五、RICS和CISC的区别 六、数据类型约定 七、ARM处理器工作模式 八、寄存器 九、特殊功能寄存器【重点】 十、CPSR寄存器详解【重点】

uniapp h5 echarts 打包后图表点击失效/及其他失效

文章目录 期望效果实际效果环境引入echarts方式解决方法&#xff1a;注意 原因多说一句在h5打包的时候将 history 改为 hash 不然在浏览器打开后刷新会404 期望效果 实际效果 环境 pc端 window11 hbuilderx版本 3.8.12 echarts版本 5.4.3 引入echarts方式 npm install echar…

气传导耳机哪个好?值得推荐的气传导耳机分享

​随着生活节奏的加快&#xff0c;人们越来越关注听力健康。气传导耳机以其独特的传导方式和舒适的佩戴感受&#xff0c;逐渐成为耳机市场的新宠。气传导耳机不入耳设计听音&#xff0c;让你在享受音乐的同时&#xff0c;也能保护你的听力安全。今天我们就一起来看看几款值得大…

【CMU15-445 Part-10】Sorting and Aggregations

Part10-Sorting and Aggregations Part10-Sorting & Aggregations Query Plan 查询计划指的是指令或者是数据库系统如何执行一个给定查询的方式。整个查询计划是树形结构或者有向无环图。 Logical Plan&#xff1a;先SCAN A&#xff0c;交给join operator&#xff0c;SC…

Redis的介绍,安装Redis的方式

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Redis 初识Redis1.1 认识Redis1.2 安装Redis的方式…

18.4 【Linux】systemd-journald.service 简介

只有rsylogd的时候&#xff0c;rsylogd必须要开机完成并执行了rsyslogd这个daemon之后&#xff0c;登录文件才会开始记录。 现在有了systemd之后&#xff0c;它可以主动调用systemd-journald来协助记载登录文件&#xff0c;因此在开机过程中的所有信息&#xff0c;包括启动服务…

网络安全深入学习第四课——热门框架漏洞(RCE— Log4j2远程代码执行)

文章目录 一、log4j2二、背景三、影响版本四、漏洞原理五、LDAP和JNDI是什么六、漏洞手工复现1、利用DNSlog来测试漏洞是否存在2、加载恶意文件Exploit.java&#xff0c;将其编译成class文件3、开启web服务4、在恶意文件Exploit.class所在的目录开启LDAP服务5、监听反弹shell的…

Failed to start sshd.service: Unit sshd.service not found

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated.

1.在连接MySQL数据库时候会出现这个报错 Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unneces…

民用大中型无人直升机系统飞行性能飞行试验要求

声明 本文是学习GB-T 42856-2023 民用大中型无人直升机系统飞行性能飞行试验要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了民用大中型无人直升机系统飞行性能飞行试验的内容、目的、条件、实施、数据处理和 结果评定等要…