基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言

        由于需要对ADC采样性能的评估,重点在于对原波形的拟合性能。

        考虑到数据的直观性,本来计划采集后使用串口导出,并用图形做数据拟合,但是这样做的效率低下,不符合实时观察的需要,于是将开发板的屏幕用作波形模拟展示,虽然精度有所丢失,但是波形没有太大变形,有一定参考价值。

        目前开发板的版本是V3.4,主控STM32L496VET6。选择该主控的原因是adc部分的时钟是独立且可以调整的,F1和F4系列的时钟频率相对较低,最高36Mhz。

        L496可以到80Mhz,最大精度下采样率能够达到5.33Mhz,可以很大程度提高实验要求的实时性。

二、设计思路

        设计的关键在于ADC的采集方式和LCD的显示方式。

1、ADC配置

        在官方例程的框架基础上做了一些修改:

例程用的2倍分频,所以ADC时钟为40MHz,我改为了1分频,达到80MHz。其他根据自己需要修改。

通道配置部分,例程是放在了测量的时候配置,由于实时采集需要高频调用,于是我把这部分放到了初始化中,只保留了必须的部分:

例程为了可以实现任意通道的采样,所以在测量时才配置对应通道。但是要注意,初始化函数只对一个引脚做了配置,如果要测量其他通道还需要自行配置其他引脚。

时钟源可以参考CubeMX生成的代码,有多种组合方式,这里我采用最简单的,挂在系统时钟上:

2、定时器配置

       定时器就是正常配置为计数,开启溢出中断,没有使用其他功能。

        这部分没有采用定时器内置的触发ADC检测,我使用更为简单的标志位,这样便于调试和查错:

        count是测量计数,tim_flag是定时器溢出标志,用于主函数启动ADC采样。

3、led显示配置

这部分参考另一位博主的设计思路,在屏幕上建立坐标系,建立网格线:

        所有用于显示的函数都是使用官方的LCD驱动代码,要做的就是调整显示区域和颜色。

4、波形绘制

        最重要的就是波形模拟,这部分的主要思路是采集230次为一组,就是要显示的像素宽度,将每一次采集的数据保存,然后暂停定时器,处理数据,将模拟量转为电压值,找到最大最小值,刷新到屏幕,每两个相邻点之间连线,最后将计数值清零,开启定时器。

        描述的比较硬核,看代码就明白了:

if(count >= LCD_Width - 10)//如果显示的个数达到要求
{HAL_TIM_Base_Stop_IT(&TIM3_Handler);//定时器暂时关闭,先处理数据Display_Voltage_Net();	max = D_arr[0] * 3300 / 4096;min = D_arr[0] * 3300 / 4096;for(count = 0; count < LCD_Width - 10; count++)//进行最大值和最小值等处理{D_arr[count] = D_arr[count] * 3300 / 4096;//模拟量换成数字量电压,1mV为量度 if(D_arr[count] > max){max = D_arr[count];}if(D_arr[count] < min){min = D_arr[count];}}//最大值和最小值显示POINT_COLOR = BLACK;//设置画笔为黑色LCD_ShowString(0, 15, 20, 12, 12, "max");LCD_ShowNum(0, 27, max, 4, 12);LCD_ShowString(0, LCD_Height - 30 - 12, 20, 12, 12, "min");LCD_ShowNum(0, LCD_Height - 30, min, 4, 12);//显示处理for(count = 0; count < LCD_Width - 10; count++){D_arr[count] = D_arr[count] / 3300 * (LCD_Height - 20);//显示范围}//数据显示在LCD上for(count = 10; count < LCD_Width - 11; count++){//LCD_DrawLine(count + 10, LCD_Height - 10 - D_arr[count], count + 11, LCD_Height - 10 - D_arr[count + 1]);LCD_DrawLine(count, LCD_Height - 10 - D_arr[count], count + 1, LCD_Height - 10 - D_arr[count + 1]);}count = 0;//重新进行数据获取delay_ms(1000);HAL_TIM_Base_Start_IT(&TIM3_Handler);//定时器重新启动
}

三、实验结果

        根据本次实验的设计方式,实测定时器最快只能设置10微妙定时,更小的话会采样乱码,目前还没找到原因。

TIM3_Init(10 - 1, 80 - 1);//定时器3初始化 10us

        自动装载值为10,预分频80。也就是屏幕每一帧显示范围10us * 220  = 2.2毫秒,周期在该范围内的都能正常显示一帧,在频率为10khz时,波形较密集,应该是能看清的最高频率。

        读者可根据需要调整定时器的配置,低于10khz的方波都可以较清晰的模拟出来。

源码已上传至Gitee:

stm32: 一些stm32模块使用经验记录 - Gitee.comicon-default.png?t=N7T8https://gitee.com/lrf1125962926/stm32/tree/Waveform_simulation/

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

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

相关文章

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控&#xff0c;输出被监控组件信息的HTTP接口被叫做expo…

Node.js(1)

跨平台的node.js运行环境&#xff0c;使开发者可以搭建服务器端的js应用程序 它可以编写服务器端程序&#xff1b; 编写数据接口&#xff1b;提供网页资源浏览功能 前端工程化&#xff1a;开发集成的所有工具和技术 与浏览器环境的区别 node.js环境中没有DOM和BOM fs模块-读…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是此类文件存在一些限制&#xff0c;导致难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每种转换器提供的功能略有不同。本…

多人聊天室 (epoll - Linux网络编程)

文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.bind() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站&#xff0c;多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务器代码 chatServer.cpp #include <…

【unity与android的交互(一)】安卓打包相关的常见参数详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【解读】Synopsys发布2024年开源安全和风险分析报告OSSRA

软件供应链管理中&#xff0c;许可证和安全合规性至关重要。开源组件和库可降低风险&#xff0c;但需了解许可证内容。Synopsys 2023年审计发现&#xff0c;超过一半的代码库存在许可证冲突。MIT许可证是最常用的宽松许可证&#xff0c;但也与其他许可证存在不兼容风险。点此获…

AI新工具(20240315) 用户通过点击图像的特定部分实现域区图像动画; 先进的机器人操作框架

✨ 1: Follow-Your-Click 用户通过点击图像的特定部分实现域区图像动画 Follow-Your-Click 是一个开放领域的区域性图像动画创作工具&#xff0c;它可以通过简短的提示语实现图像中特定区域的动画效果。这种功能允许用户通过点击图像的特定部分并输入简短的指令&#xff08;例…

ViT学习笔记

一、Embedding层 对于标准的Transformer 模块&#xff0c;要求输入的是 token (向量 ) 序列&#xff0c;即二维矩阵 [num_token, token_dim] 在代码实现中&#xff0c;直接通过一个卷积层来实现以ViT- B/16为例&#xff0c;使用卷积核大小为 16x16 &#xff0c; stride 为 16 …

【Streamlit学习笔记】实现包含多个sheet的excel文件下载

1、什么是Streamlit Streamlit是一个免费的开源框架&#xff0c;用于快速构建和共享漂亮的机器学习和数据科学Web应用程序&#xff0c;官网链接 Streamlit Streamlit API链接 API reference 实际项目中遇到的问题&#xff1a;包含多个sheet的excel文件下载&#xff0c;下面将给…

传输层的UDP协议

1. UDP协议报文格式 1.1 16位端口号 UDP协议报文中&#xff0c;端口号占2个字节&#xff0c;包括 源端口号 和 目的端口号。 1.2 16位UDP长度 UDP报文长度为2个字节 &#xff0c;即UDP数据报长度为0~65535&#xff0c;也就是64kb。 1.3 16位UDP检验和 数据在网络传输的…

k8s helm 删除 tiller

kuberneter 上面装了 helm 想卸载还并不是那么简单, 参考 stackoverflow 回复 kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l apphelm -o name|xargs kubectl dele…

DHCP在企业网的部署及安全防范

学习目标&#xff1a; 1. DHCP能够解决什么问题&#xff1f; 2. DHCP服务器如何部署&#xff1f; 3. 私接设备会带来什么问题以及如何防范&#xff1f; 给DHCP服务器配置地址&#xff1a; 地址池&#xff1a; DHCP有2种分配模式&#xff1a;全局分配和接口分配 DHCP enable

element el-table 表格限制多选个数

本次的功能的要求是&#xff1a; 原本的引入的elment 的表格&#xff0c;去除全选框&#xff0c;版本对比的按钮&#xff0c;需要在选择版本&#xff0c;并且版本个数为2的时候&#xff0c;可点击&#xff0c;进行版本对比操作每次选择版本的时候&#xff0c;目前已有两个选择…

酷轻松气囊按摩护膝全新上线,科技呵护膝部健康

在快节奏的现代生活中&#xff0c;膝部健康问题逐渐引起人们的重视。长时间的站立、行走或运动&#xff0c;都可能对膝部造成不同程度的压力和损伤。 特别是家里有老人一直被老寒腿、关节发凉疼痛困扰的&#xff0c;经常一遇到下雨天&#xff0c;膝盖就不舒服&#xff1b;尤其到…

鸿蒙-自定义组件的生命周期

目录 自定义组件的生命周期 1.aboutToAppear 2.aboutToDisappear 3.onPageShow 4.onPageHide 5.onBackPress 日志输出 1.显示页面 2.页面点击返回按钮 3.页面跳转 4.页面返回 自定义组件的生命周期 先来一段列子 import router from ohos.router Entry Component…

虚拟机VMware上 centos7 的网络配置

第一步&#xff1a;权限的切换 由普通用户切换到超级用户 用户名为&#xff1a;root 密码为&#xff1a;自己安装 linux 时第一次设置的密码 su -root超级用户的命令提示符是“#”&#xff0c;普通用户的命令提示符是“$”。当看到你的命令提示符为“$”时&#xff0c;证明切…

pytorch之诗词生成6--eval

先上代码&#xff1a; import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…

WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述

一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System&#xff0c;WPS) &#xff0c;集成了基于Fortran和C编写的程序&#xff0c;这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…

paddle ocr识别文字

paddle使用 # pip install paddlepaddle2.5.2 -i https://mirror.baidu.com/pypi/simple # pip install paddleocr2.7.0.3 -i https://mirror.baidu.com/pypi/simplefrom paddleocr import PaddleOCR from PIL import Image import numpy as npimage Image.open(./2.png) ocr…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉&#xff0c;会有未授权访问漏洞 include: "*" 他就是Actuator&#xff01; 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…