关于stm32的示波器,网上以经有很多了。这里还是想把自己的设计思想发表出来。这个项目已经准备了很久。这里首先要感谢以前的团队,非常感觉陈师和覃总两位经验丰富的嵌入式工程师,获得了不少多方面的考虑。如果不是工作调整等原因,很有可能会出产品。但最后没有做完深感遗憾。这里发表下我的设计流程,希望能给做示波器的朋友有一定的帮助。也是让自己对此项目的一个总结。
本示波器有效测量频率0.1 ~ 100KHz
双通道
集成信号发生器
时间轴每格 1,2,5递增范围:2us ~ 1s
时间轴每屏12格
硬件结构:
主芯 stm32zet6
触摸屏 SSD1289 320*240 RGB565
AD: STM32内部ADC 1MHz采样率
双通道。
(设计扩展外部高速AD,上述原因没能得以完成)
DA:内部DAC 20K以内正弦波,锯齿波和方波。
平台:uCOSIII,
图形:uCGUI
软件设计:
设计思想
整个的数据流程如下:
数据采样分为三个部分:
高速采样(2us ~ 20us 包括20us);
在这之间以20us为例:
20us每格 * 12格 = 240us每屏。
采样率为1m也就是1us只可以采样到1个数据,上面提到了屏是320宽。
所以在这种情况下,1个数据在显示屏会对应1个或几个点。
因此在2~20us之间都用最大采样率1MHz采样。
采用连续采样模式。
中速采样(50us ~ 20ms 包括20ms);
在这之间的时间段中,只要采样周期调整和所选时间轴相同,就可以采样点与屏上的点一一对应。
采用定时器触发采样模式。
低速采样(大于等于50ms时)。
参考了海太科等品牌的示波器,在这种低速情况下在屏上循环显示(显示屏收尾相接)。
同样采用定时器触发采样模式。
数据解析:
波形参数:周期,占空比,最大值,最小值等等。
在获得采样数据后的数据参数的获得就比较简单了。
这里需要提的就是采样点与显示点的对应关系:
在中速,低速采样:
采样点显示点一一对应。
在高速采样时:
不管时间轴为多少采样周期都是1us;
采样点与显示点的对应关系为 (320屏宽)/(时间轴 * 12格 / 1us)
寻找触发点:
低速采样不进行触发,因为是循环显示。
在高速和中速采样 三倍屏幕的数据,与触发线比较获得匹配的一段数据进行显示。
信号发生器:
这部分就很简单了,先计算出一个周期的波形放在数组中,用DMA循环更新DA就可以了。
显示:
这部分就直接上图吧:
关键字:STM32 示波器 信号发生器
引用地址:
STM32示波器 信号发生器
推荐阅读最新更新时间:2024-03-16 15:24
stm32如何改变PC(R15)的值?
我想在FLASH里面存入两段程序,假设一个存在0x08000000(即烧录进去的,main函数),另一个存在0x08001000,我想在执行第一段程序的时候给PC赋一个值0x08001000,让它跳到另一段程序,关键要如何改变PC的值呢? 单纯的实现你上面说的结果: ((void (*) (void)) (0x08001000) ();就可以了。 但是要注意了,地址0x08001000处的数据必须要是可执行的代码而不是可执行代码的地址。 如果地址0x08001000处的数据是可执行代码的地址,那么你应该要这样用: ((void (*) (void)) (*(vu32 *)0x08001000) ();
[单片机]
STM32速成笔记(9)—RTC
一、RTC简介 RTC(Real Ti me Clock) 实时时钟 ,它是一个独立的 定时器 。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供 时钟 日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置都是在后备区域,无论单片机处于何种状态,只要保证后备区正常 供电 ,RTC就会一直工作。 二、 STM32 的RTC 2.1 主要特性 • 可 编程 的预分频系数 :分频系数最高为2^20 • 32位的可编程计数器 ,可用于较长时间段的测量 • 可以选择以下三种RTC的时钟源 ─ HSE时钟除以128 ─ LSE 振荡器 时钟 ─ LSI振荡器时钟 • 3个专门的可屏蔽中断
[单片机]
电源接地不良对示波器测试产生的干扰问题
示波器操作人员有时会发现这样一个现象:使用探头探测信号时,被测信号上下跳动,波形不正常,如果使用余晖显示,则波形糊成一团,如下图所示: 图一 糊住的波形 通常这种情况下,测试人员会怀疑是触发的问题,但当上下调节触发电平时,波形位置会随着触发电平的变化:如触发电平调高,则波形的位置上升,触发电平调低,波形位置又降低,如下图所示: 图二 调高触发电平,波形位置上升 图三 调低触发电平,波形位置下降 如果您在工作中也发现类似现象,则很大的可能是:您的测试存在接地不良的情况。更准确地说是:您测试系统的信号回流路径过长。 我们都知道,从信号发送器流出的信号,都会最终流回发送器。单端信号的“地”是信号的回流路径;而差分信号的回流路
[测试测量]
STM32外围电路硬件解析
复位电路: 复位 :让MCU回到最开始的状态。并且从头开始,重新执行程序 我们什么时候需要复位? 1.烧录的时候 2.程序跑飞了的时候 3.上电复位(上电的时候需要复位) 复位方式: 1.上电复位: --- 一定要有 MCU的Reset是复位引脚,当这个引脚为低电平时,单片机会产生复位。 2. 按键复位:--- 可有可无(看需求) K10按下,产生复位动作 这是阻容复位电路。当复位引脚低电平的时候复位。当上电的瞬间,C13电容开始充电,电容处于短路状态,电容上面的电压为低电平,此时MCU复位引脚被拉低,MCU执行复位,这样就实现了上电的时候复位功能了。 实际上,单片机
[单片机]
STM32F4学习笔记5——stm32串口发送数据最高位错误问题
最近,在做基于stm32f401串口的ModBus协议通信,遇到了stm32串口发送数据的问题。花了一整天去查找问题,从ModBus协议格式、调度算法到串口配置,最终终于把问题解决,记录下来。 问题描述: ModBus协议中配置stm32f401串口为奇校验,8位数据位,1位停止位,程序如下: void uart_init( u32 bound ) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitSt
[单片机]
STM32的精确延时
/*---------------------------------------------------------- 文件名称:systick.c 文件描述:sysTick 系统滴答时钟1us中断函数库,中断时间可自由配置 备注:程序默认使用72M时钟,无分频 -----------------------------------------------------------------*/ #include delay.h static __IO u32 TimingDelay; /*---------------------------------------------------------------------
[单片机]
STM32串口通讯协议浅析
通讯协议是指在嵌入式开发中,不同的硬件系统或者操作系统之间进行数据交换的方式,是一种数据通讯的规约。 通讯协议有很多种,而我今天要说的是串口通讯协议,而且是基于STM32来说的。 首先说串口通信,串口是单片机最常见的外设。常见的UART串口主要有两个线,一个线是发送、一个是接收。至于串口发送数据的时候数据线上的高低电平是怎么变化的,这个大家可以自行查阅相关知识,我们常见的单片机自带的串口已经把这个最底层的电平级别的协议做好了,我们使用的时候,收发都是以一个字节为单位来进行的。 举个例子,我们想使用串口连接STM32的串口1到PC机,然后通过PC上位机给STM32发送一个字节0x01,然后在STM32接收到之后,判断一下
[单片机]
使用采样示波器对PCB进行串扰分析
随着通信、视频、网络和计算机技术领域中数字系统的运行速度日益加快,对此类系统中的印刷电路板(PCB)的品质要求也越来越高。早期的PCB设计在面临信号频率日益增高和脉冲上升时间日益缩短的情况下已无法保证系统性能和工作要求。在目前的PCB设计中,我们需要利用传输线理论对PCB及其组件(边缘连接器、微带线和元器件插座)进行建模。只有充分了解PCB上串扰产生的形式、机制和后果,并采用相应技术最大程度地加以抑制,才能帮助我们提高包含PCB在内的系统的可靠性。本文主要围绕PCB设计展开,但相信文中所讨论的内容也有助于电缆和连接器的表征等其它应用场合使用。 串扰可能造成的后果 PCB设计师之所以关心串扰这一现象,是因为串扰可能造成以下性能方
[测试测量]