基于STM32F103的简易示波器设计

基于STM32F103的简易示波器设计(基于正点原子mini开发板)

摘要

本设计采用STM32F103微控制器,硬件为正点原子的MiniSTM32开发板,设计一个示波器,能够测量输入信号的频率、最大值、最小值和幅值,并显示所输入的波形。
并且采样频率可以设置,并能通过串口输出所测量的内容。
采用FFT算法计算频率,精度较高。所用到的硬件模块有ADC、定时器、UART、外部中断、DMA、GPIO、EXTI。

作品实物

在这里插入图片描述

"源码联系 3270516346 qq "

一、设计内容与设计方法

1.1 设计内容与要求

  1. 由于STM32采用3.3V的电平标准,所以输入的信号电压范围为0V到3.3V。
  2. 采集输入的信号,计算输入信号的频率、最大值、最小值和幅值。
  3. 由于所测量的频率的范围与采样的频率有关,所以采样频率可以设置,以达到不同的要求。
  4. 计算的信号的内容可以通过串口打印出来。

1.2设计思路

  1. 通过ADC1模数转换模块,采集输入的模拟信号,通过定时器的PWM输出触发一次采样,所以采样频率可以通过定时器设置。将ADC采样的数据通过DMA的方式送到指定的内存中去。
  2. 将采样得到的数据通过循环比较得到最大值和最小是,两者相减得到信号幅值。将得到的采样数据进行FFT变换,然后在进行一系列的计算得到信号的频率。
  3. 通过UART1将得到的信号计算内容发送的PC,波特率可以设置。采样率的设置以及串口输出的设计通过外部中断(外部按键)设置。
  4. 设置开发板自带的LED灯,通过LED灯来指示系统是否工作。
  5. 将输入信号的波形以及计算结果在LCD屏幕上显示出来,LCD显示采用正点原子提供的LCD驱动函数。

硬件设计

2.1 STM32最小系统设计

  1. 采用的微控制器为STM32F103RCT6,该微控制器采用Cortex-M3体系结构,它拥有的资源包括: 48KB SRAM、 256KB FLASH、 2 个基本定时器、 4 个通用定时器、 2 个高级定时器、 2个 DMA 控制器(共 12 个通道)、 3 个 SPI、 2 个 IIC、 5 个串口、 1 个 USB、 1 个 CAN、 3 个 12位 ADC、 1 个 12 位 DAC、 1 个 SDIO 接口及 51 个通用 IO 口分三组,该芯片性价比较高。
  2. 该系统采用外部晶振作为时钟源,外部晶振频率为8MHz,通过内部PLL等电路设置系统频率为72MHz。,系统电源采用3.3V供电,DAC的参考电压设置为5V。
  3. 复位端外界一个按键,即RESET按键接到单片机的NRST端,当按下该按键时,系统复位。下载电路采用JTAG下载。
  4. 本次设计用到的内部资源有:SRAM、FLASH、通用定时器2,DMA1,UART1,DAC1,GPIOA、EXTI。
  5. 最小系统电路图为:在这里插入图片描述

2.2、LED显示与外部中断按键电路

  1. LED显示控制端为GPIOA_Pin_8,LED的阳极通过保护电阻接电源,阴极连接到GPIOA_Pin_8,该端口采用推挽输出,输出高电平时LED灭,输出低电平,LED亮。
  2. 按键连接电路如图所示,WK_UP按键连接到PA0,KEY0连接到PC5,KEY1连接到PA15,他们分别对应外部中断通道0、通道5、通道15。通道0的中断为上升沿触发,通道5和15为下降沿触发。 LED与按键电路

2.3、LCD显示屏接口电路

  1. LCD显示屏我们采用的为2.8寸屏,分辨率为320*240,支持65K色显示,接口为16位的80并口,自带触摸屏,TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接。
  2. LCD控制芯片采用ILI9341,ILI9341液晶控制器自带显存,可以通过不同的命令在LCD的不同位置显示不同的颜色,从而显示图像。
  3. 开发板上自带LCD显示屏接口,直接将开发板与LCD相连即可,其接口电路如下图:在这里插入图片描述

三、软件设计

3.1、软件设计总体流程

  1. 1、主函数执行过程

 1、初始化(延时函数、LED灯、串口、LCD显示、外部中断、定时器、DMA、ADC)
 2、中断向量优先级分组、LCD显示
 3、 输入信号采样、等待采样完成
 4、关闭信号采样(关闭DMA)、找出最大值、最小值、幅值
 5、利用FFT计算频率
 6、如果相应按键按下,则通过串口打印数据
7、 通过LCD屏显示相应数据
8、清除采集到的信号数据,打开信号采集(打开DMA)
9、外部中断服务函数
10、DMA中断服务函数,响应时为采集完毕

  1. 当按键KU_UP按下时,定时器分频系数增加,采样率减小;当按键KEY1按下时定时器分频系数减小,采样率增加;当KEY0按下时,通过串口发送数据到PC机。
  2. 信号采集采用ADC+DMA+TIMER的方式,采集完成,触发DMA中断,采集完成标记位置位。

3.2、按键中断设计

  1. KW_UP、KEY1、KEY2对应的引脚PA0、PC5、PA15,对应的中断触发条件为信号上升沿、下降沿、下降沿。PA0设置为输入下拉,PC5和PA15设置为输入上拉,设置前首先开启时钟,对应程序为:程序
  2. PA0、PC5、PA15对应的中断通道为通道0、5、15,外部中断配置响应的模式并使能,然后配置响应的NVIC并使能NVIC,他们对应的抢占优先级都为2,副优先级为0、1、2,相应代码为(以通道1为例):在这里插入图片描述
  3. 在他们的中断服务函数中,先判断相应的按键是否按下,按下则执行相应的功能,然后清楚相应的外部中断,程序如下(以K0为例):在这里插入图片描述

3.3、TIMER+DMA+ADC1组成的数据采集模块

  1. 本实验用PA1口做为数据采集端口,定时器2配置为PWM模式,通过PWM,触发一次采样,改变PWM的频率,就可以改变采样率。通过DMA1,将采集的数据传送给内存,然后在处理数据。
  2. 首先使能GPIOA与ADC1的时钟,然后将PA1配置为模拟输入。ADC1选择通道1使用规则转换,配置为连续转换模式,触发方式选择T2_CC2,即定时器2,数据选择右对齐,规则顺序转换的通道数目为1,采样时间设置为cycles。
    ADC1设置完成之后,使能DAC1,并且重置指定ADC的校准寄存器进行校准。设计程序为:在这里插入图片描述
  3. 首先使能定时器的时钟,计数器2的预分频值与计数值通过外部参数传入,可以设置,从而设置频率,计数器设置为向上计数方式。
    输出设置为PWM1,输出极性为低,并且设置TIM_Pulse,来设置占空比。最后使能TIM2.程序如下:在这里插入图片描述
    4.使用DMA1的通道1,首先开启DMA1的时钟,将ADC1的数据传入内存,设置一次传输数据量为1024个字,内存和外设的数据位数都为16位,循环传输,优先级设置位最高。
    开启DMA1的中断,当一次DMA传输完成时,响应中断,在中断服务函数中通知一次数据采样完成,抢占优先级与副优先级都设置为0。在这里插入图片描述

3.4UART设置

  1. 通过UART1将相应的数据打印出来,UART1对应的端口为PA9、PA10。根据参考手册,PA9应该设置为复用推挽输出,PA10设置为浮空输入。
    初始化UART1,首先开启GPIOA和UART1的时钟,然后设置字长为8位,一个停止位,无奇偶效验位,无硬件数据流,波特率可设置。相关程序如下:
    在这里插入图片描述
  2. 重定向函数printf(),在工程中加入fputc(int ch,FILE *f)函数代码,并包含“stdio.h”,即可通过printf()进行串口发送数据。在这里插入图片描述

3.5、FFT计算频率

  1. 我们一次连续采样1024个点,对这些点利用提供的FFT库函数进行离散傅里叶变换,变换后从频谱中找出最大的频率,该频率即为采样信号的频率。由采样定理可知,采样信号的频率要大于所采集信号频率的两倍才能恢复出信号的频谱,求得最大频率。
  2. 采样信号的频率为fus=72000000/(Tpsc),其中T为STM32定时器的计数值,psc为分频值。所以如果当k=temp时,频率取最大值,则最大频率为f=tempF=temp*fus/n,(n为一次采样的点数)。
  3. cr4_fft_1024_stm32(fftout ,fftin ,n)为使用的进行FFT变换的库函数,fftin为采集的输入信号的数组,fftout为输出的数组,n为点的个数。fftout中每个点有32位,高16位为FFT变换后的实部,低16位为虚部。对fftout进行变换,然后在求出频率的幅度最大时的k,即求出最大的频率。
    相应的程序为:在这里插入图片描述

3.6 TFTLCD显示界面设计

  1. 显示屏采用正点原子的3.2寸TFTLCD显示屏,利用正点原子提供的库函数进行开发。首先调用函数”LCD_Init()”进行初始化。
  2. 然后调用函数windows()函数进行绘制基本的显示窗口,当采样完1024个点后,将相应的点在LCD屏上显示出来,即形成波形。

四、设计结果

  1. 当输入1kHz方波时,采样频率为12000Hz:在这里插入图片描述
    .在这里插入图片描述
    测量得到频率为996Hz,最大值571mV,最小值0V。

  2. 当输入的信号频率为5kHz时,采样率为12000Hz时,得到:
    在这里插入图片描述
    在这里插入图片描述
    测量得到信号的频率为5003Hz,最大值为577mV,最小值为0V。

附录

在这里插入图片描述
作品实物

  • 27
    点赞
  • 313
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
基于引用\[1\]、\[2\]和\[3\]的描述,STM32F103简易示波器是一种使用STM32F103微控制器的数字示波器设计。它可以测量输入信号的频率、最大值、最小值和幅值,并显示所输入的波形。该示波器采用了ADC、定时器、UART、外部中断、DMA、GPIO和EXTI等硬件模块。它还采用了FFT算法来计算频率,以提高测量的精度。该设计还包括数据的采样量化、A/D转换、波形分析、波形显示和触摸屏操作等多个部分。该示波器使用了STM32F103RCT6芯片作为主控核心,具有稳定运行和实时准确采样数据的能力。它还具有LCD液晶显示模块和外围按键,可以实时显示波形、振幅大小和频率大小。该示波器体积小、价格低廉、低功耗,适用范围广泛,可以满足某些场合的需要,并且克服了传统示波器体积庞大的缺点,降低了成本。 #### 引用[.reference_title] - *1* [基于STM32F103简易示波器设计](https://blog.csdn.net/weixin_48984764/article/details/127188469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基于STM32F103的多种波形示波器制作](https://blog.csdn.net/FML7169/article/details/94044285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chy_wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值