嵌入式数字示波器是近年来发展起来的一种集显示、测量、运算、分析、记录等多种功能于一体的智能化测量终端设备。凭借其强大的性能优势,己逐步取代传统模拟示波器。当前国内通用的数字示波器多数采用51单片机、FPGA、DSP等结构。但是51单片机处理能力有限,无法实现数字示波器的基本指标,FPGA虽然能深入开发数字示波器,然而,其成本偏高,即使加入SOPC软核,其软件压力也很大。
本设计选用ARM处理器中基于Cortex-M3内核的32位STM32F103VCT6作为主控芯片。该芯片内部集成了16通道的12位高精度A/D转换器,转换时间仅为1μs,而且STM32芯片具省电模式,功耗低,与传统MCU相比,其在性能和处理能力上都比较符合本设计要求。
1 系统设计方案
1.1 系统工作原理
数字示波器的工作原理可以用图1来描述,当输入被测信号从无源探头进入到数字示波器,首先通过的是示波器的信号调理模块,由于后续的A/D转换器对其测量电压有一个规定的量程范围,所以,示波器的信号调理模块就是负责对输入信号的预先处理,通过放大器放大或者通过衰减网络衰减到一定合适的幅度,然后才进入A/D转换器。在这一阶段,微控制器可设置放大和衰减的倍数来让用户选择调整信号的幅度和位置范围。
在A/D采样模块阶段,信号实时在离散点采样,采样位置的信号电压转换为数字值,而这些数字值成为采样点。该处理过程称为信号数字化。A/D采为采样速率,表示为样值每秒(S/s)。A/D转换器最终将输入信号转换为二进制数据,传送给捕获存储区。被测的模拟信号在显示之前要通过微处理器的处理,微处理器处理信号,包括获取信号的电压峰峰值、有效值、周期、频率、上升时间、相位、延迟、占空比、均方值等信息,然后调整显示运行。最后,信号通过显示器的显存显示在屏幕上。
1.2 系统设计框图
微处理器采用意法半导体的32位处理器STM32F103VET6,其内部是ARM公司的Conex—M3内核,工作主频最高可达72MHz,再在其上面移植开源的实时操作系统C/OS—II,确保系统的实时性和稳定性。由于高速A/D转换器的速度太快,STM32处理数据的速度跟不上,所以在中间加入FIFO高速缓存器。利用STM32内部自带的FSMC(灵活的静态存储器控制器)来控制TFT液晶屏刷新波形,可实现更高频率的信号的波形刷新和显示。此为,利用STM32的高级定时器可输出高达12MHz的时钟,可以作为高速A/D转换器的采样时钟和FIFO存储器的控制时钟,从而避免了一大堆由有源晶振和数字芯片组成的时钟电路,系统框图如图2所示。
1.3 程控放大电路设计
本设计的程控放大电路如图3所示,衰减后的信号先经过的是由高性能、低噪声的电压反馈型放大器AD8066组成的电压跟随器,然后经过限流电阻R进入到压控增益放大器AD603。AD603是ADI公司生产的低噪声、90MHz带宽的可变增益放大器,增益以dB为线性,经过精密校准,而且不随温度和电源电压而变化。增益由高阻抗(50M Ω)、低偏置(200nA)差分输入控制;比例因子为25mV/dB,因此仅需要1V的增益控制电压就能覆盖增益范围的中间40 dB。所以改变AD603的控制电压即可改变该器件的放大倍数。1号引脚恒定输入1.25V电压,2号引脚的电压由一片D/A转换器TLV5618A来输出。
由于后级A/D转换器ADS830的输入模拟电压范围是1.5~3.5V,基线输入电压是2.5V,为了尽量利用A/D转换器的量程,所以需要给前端输入的模拟信号加上2.5V的偏置电压。双路D/A转换器TLN5618A的另外一路输出OUTB就是为了给输入信号加入2.5V的偏置电压而设计的。同样的,为了保证这2.5V电压的稳定,中间加入反相电压跟随器。
1.4 数字采集电路设计
本设计的数字采集电路如图4所示,从程控放大电路输出的信号在进入A/D前先进入的是截止频率为66MHz的低通滤波器,因为所用A/D转换器ADS830的最大采样频率是60MHz,所以它理论上能采集到的最大信号就是60MHz,为了避免更高频率的噪声影响A/D转换器工作,所以要设计这样一个低通滤波器。A/D转换器ADS830是德州仪器公司的一个8位分辨率高速A/D转换器,其采样频率范围是10kSa/s~60MSa/s。它的参考电压源可选择为内部参考和外部参考,这里为了简化设计,选用它的内部参考电压源。
虽然STM32主频最高高达72MHz,但是在程序里对A/D转换器采集回来的数据的处理速度实际上是比不上ADS830的60MHz采样频率的,所以为了缓冲高速数据,中间加入高速缓存器IDT7204。IDT7204是双口的SRAM,FIFO存储器,工作方式是不依靠地址线,随着写入或读取信号来对数据指针进行递加或递减,来实现对数据的寻址。IDT7204的存储深度是4K字节,有三个存储标志,这里用到了它的“数据满标志FF”,当微处理器STM32读取FF标志,如果为低电平,证明FIFO存储器已经读取了4096个ADS830的数据,然后暂停对A/D转换器数据的读取。微处理器STM32处理当前存储区的数据;等待出来完毕,再次让IDT7204读取ADS830的数据,如此循环即可得到当前示波器输入信号的完整波形数据。
关键字:STM32 嵌入式 数字示波器
引用地址:
基于STM32的嵌入式数字示波器设计
推荐阅读最新更新时间:2024-11-09 16:06
STM32入门系列-开发工具keil5安装
主要介绍如下三部分内容: keil5软件获取 keil5安装 安装STM32芯片包 软件获取 可以通过搜索引擎搜索关键字“KEIL5下载”,找到其官方网站http://www.keil.com。我们这里使用MDK5.14版本,如果后面出了更高的版本选择性升级即可,不过也没有必要什么都追求最新的,这一个软件用着习惯就行。 登录armkeil官方网站,网站首页有软件下载连接,在这里我们选择MDK-Arm。会让你先注册,注册完成之后就可以开始下载了。 软件安装 安装此软件时一定要注意以下几点: 安装路径不能带中文,必须是英文路径。 安装目录不能跟51的KEIL或者KEIL4冲突,三者目录必须分开。 KE
[单片机]
怎样去设计汽车嵌入式SoC系统?
嵌入式系统是泛计算领域的重要组成部分,是嵌入式对象宿主体系中完成某种特定功能的专用计算机系统。嵌入式系统有体积小、低功耗、集成度高、子系统间能通信融合的优点。 随着汽车技术的发展以及微处理器技术的不断进步,在汽车电子技术中得到了广泛应用。目前,从车身控制、底盘控制、发动机管理、主被动安全系统到车载娱乐、信息系统都离不开嵌入式技术的支持。 01 汽车嵌入式系统发展历程 嵌入式系统诞生于微型机时代,经历了漫长的独立发展的单片机道路。嵌入式系统的核心是嵌入式微处理器。与嵌入式微处理器的发展类似,汽车嵌入式系统也可以分为三个发展阶段: 第一阶段:SCM(Single Chip M
[汽车电子]
STM32的优势在哪里?如何使用DMA来进行ADC操作?
STM32的优点在哪里?除去宣传环节,细细分析,STM32时钟不算快,72MHZ,也不能扩展大容量的RAM FLASH,同样没有DSP那样强大的指令集。它的优势在哪里呢? ---就在快速采集数据,快速处理上。 ARM的特点就是方便。 这个快速采集,高性能的ADC就是一个很好的体现,12位精度,最快1uS的转换速度,通常具备2个以上独立的ADC控制器,这意味着, STM32可以同时对多个模拟量进行快速采集,这个特性不是一般的MCU具有的。以上高性能的ADC,配合相对比较块的指令集和一些特色的算法支持,就构成了STM32在电机控制上的强大特性。 好了,正题,怎末做一个简单的ADC? 注意是简单的,ADC是个复杂的问题,涉及硬件
[单片机]
基于STM32芯片的指纹识别系统设计与实现
引言 指纹识别是根据每个人指纹的不变性和唯一性进行身份识别的一门技术。随着社会的发展,嵌入式的指纹识别技术越来越受到市场的青睐,成为近年研发的重点,但目前的嵌入式指纹算法大多在实时性和准确度上还存在不足,需要进一步优化算法,以实现准确高效的指纹识别。 本研究设计、实现一种基于STM32芯片的指纹识别系统,通过指纹传感器采集指纹数据,指纹算法处理指纹数据实现指纹识别,同时结合VC++平台建立人机交互界面对指纹图像数据显示。 1、系统硬件设计 1.1、结构组成及特点 本研究采用ARMcortex-M3内核的32位处理器STM32F-103ZET6作为主控制器,该芯片内部采用哈佛结构、其中集成有64KB的RAM和512KB的FL
[单片机]
STM32用串口下载后,不小心写保护和读保护了,如何解锁?
在STM32的开发过程中,有些时候可能会不小心开启了写保护和读保护,这将导致程序无法正常使用。此时,需要解锁芯片以便重新烧写程序。本文将介绍如何在STM32中解锁写保护和读保护,并提供详实的步骤以供参考。 1. 测试板子 在开始解锁之前,需要测试板子是否在保护状态下。首先,连接板子到电脑,并打开开发环境。在开发环境的终端中输入命令: ``` bash stm32flash /dev/tty.usbserialXXXX -Rs ``` 如果板子上的芯片已经被保护,则会显示以下信息: ``` bash Failed to init device. ``` 如果芯片没有被保护,则会显示以下信息(具体数字可能会有所不同): ``` bas
[单片机]
stm32变量能存进flash中吗
当涉及到将变量存储在Flash中时,我们通常指的是将变量存储在STM32微控制器的闪存器件中。在STM32芯片中,闪存用于存储程序代码和只读数据,但对于一些应用情况,我们可以使用闪存来存储可读写的变量。 虽然SRAM是通常用于存储变量的内存区域,但在某些场景中,需要将变量存储在闪存中的原因有以下几点: 节省SRAM空间:对于资源受限的应用,SRAM可能是有限的,因此在闪存中存储变量可以释放SRAM空间,使其可以用于其他用途。 数据持久性:将变量存储在闪存中可以确保其数据持久性,即使在断电或重新启动后,变量的值也能保持不变。 更新性:如果需要更新变量的值,而不需要重新烧录MCU的固件或运行其他复杂的操作,可以通过修改闪存中
[单片机]
新建STM32工程全局声明两个宏的原因
在uVision中新建STM32工程后,需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中,此时需要在工程设置- C/C++选项卡下的Define文本框中键入这两个全局宏定义。 STM32F40_41xxx,USE_STDPERIPH_DRIVER USE_STDPERIPH_DRIVER 这个说明你在使用标准外设驱动,有自己的外设配置文件,即stm32f10x_conf.h,详细可查看stm32f4xx.h中12026-12017行。关于stm32f4xx_conf.h 文件中的内容,是有选择的#inlude stm32f4xx_conf.h ,这样只编译需要的外设文件,减少hex文件的体积。如果没有使用这个宏,
[单片机]
谈谈STM32(CM3)的Faults异常
1写在前面 回归现实,本文带领大家学习下STM32中Fault的一些相关知识。 应该有许多朋友在学习,或者开发时遇到过程序进入HardFault_Handler的情况。 那么,你们有多少人认真去分析过Fault这类异常中断呢?下面结合STM32F103,也就是Cortex‐M3内核来给大家讲述一下这些异常中断的内容。 2 Cortex‐M3异常 说起Fault,我们就要说一下Cortex‐M3的异常。 Cortex‐M3 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。 CM3部分异常列表: 这些异常中断的优先级,有些却是固定的,有些是可以通过软件来配置,如UART发送中断
[单片机]