一、赛题分析

1.1 赛题(略)

赛题版权归属全国大学生电子设计竞赛组委会,本人未经授权转载,请自行查询。

1.2 基本要求1分析

这个要求就是制作一个有源二阶低通滤波器,具体方法模电都学过。电压传函定义:
H ( s ) = V o u t V i n H(s) = \frac{Vout}{Vin} H(s)=VinVout
其中:
s = j ω s=j\omega s=
题目里
H ( s ) = 5 1 0 − 8 s 2 + 3 ∗ 1 0 − 4 s + 1 H(s)=\frac{5}{10^{-8} s^2+3*10^{-4}s+1} H(s)=108s2+3104s+15
当s=0(直流)时,H(0)=5,意味着直流增益为5,再令
H ( s ) = 5 ∗ 2 2 H(s)=5*\frac{\sqrt{2}}{2} H(s)=522 (增益为-3dB时),代入上式,解得s的值。

这里的坑: 电压增益为5倍,题目要求输入的正弦信号峰峰值为1.0V,所以滤波器输出最大的峰峰值是5.0V。这个峰峰值对于大多数+/-5V供电的运放来说是没问题的,但是后续的电路需要注意。

1.3 基本要求2分析‘

这里要求产生频率可调的正弦信号,步进100Hz,最高频率>1MHz,电压峰峰值>3.0V。
这个要求可以使用DDS作为信号发生器。对于DDS,需要其输出采样率大于10Msps,这个对于常见的DDS芯片相当容易,最低端的AD9833也有125Msps的采样率,最大输出正弦频率10MHz。当然,在我的方案中,是不愿意用外置DDS芯片的,看了下STM32G474手册,发现片内有DAC3/DAC4,最大支持25Msps,满足题目要求。但是DAC3/4是没有外部引脚的,我看了下CubeMX,只需要接片内OPAMP就能引出这些DAC的信号。
输出峰峰值要求>3.0V。对于片内DAC,最大峰峰值为3.3V,考虑到后面还有滤波器,以及片内运放在靠近电源轨处性能不佳,后续在外部需要添加一个G=1.5~2的运放以满足题目要求。

1.4 基本要求3分析

这个要求是要实现激励信号幅度的自动调整。根据这个要求,探究装置的输出通道应该可以调整信号幅度。我们用DAC自然可以调整,但是DAC分辨率只有12bit,动态范围不太够,为了保险,可以增加一个可变增益放大器(VCA),扩大动态范围。另外,探究装置需要采集DUT输出的信号幅度,这里需要有ADC通道进行采集。当然,受限ADC动态范围和量化噪声影响,可能会造成交流信号幅值测量误差,最好备份一个精密检波电路用以检测峰峰值。
最后,用个简单的PI调节,控制下DAC-DDS的输出幅度,或者控制VCA就能满足题目要求。

1.5 基本要求4分析

就是在要求3到基础上做扫频,并且DUT输出电压可程控。

1.6 发挥部分1分析

这个要求就是一个标量网分的基本功能,通过扫频来确定幅频特性,通过分析波特图中的幅频特性曲线模式,来确定未知DUT是低通、高通、带通、带阻中的哪种。
这里的坑: 这里有可能的问题是,由于高通/低通DUT在f0处可能因为Q值过高,有被误识为带通的情况。解决思路是需要从总体尺度上进行考察。

1.7 发挥部分2分析

这里需要实时模拟DUT的传函。如果前面使用DDS作为信号发生,实现这个功能就比较困难了。而使用ADC+DAC软件定义信号测量架构,就可以轻松实现本功能。这也是我选择使用G474的主要原因。

二、实现思路

除了发挥2,其他的要求其实都可以通过DDS+检波器来实现,但是发挥2的要求决定了使用ADC+DAC的软件定义信号测量方案具有显著的优势,但是对于性能有较高的要求。我这篇文章主要是为了展示如何只使用G474来完成比赛,其实为了性能,完全可以使用外置16bit ADC+ 12~16bit 高速DAC来实现。目前,具备1Msps以上采样速率的16bit ADC有很多解决方案可供选择,DAC可以选择12bit 10+Msps的方案。但是这个组合需要占用大量引脚,成本也比较高。如果题目没有要求输出大于1MHz信号,完全可以使用16bit 1Msps的DAC。

三、关键技术点

3.1 DMA驱动的ADC/DAC数据搬移

在采样率高到1Msps的情况下,靠中断来处理ADC、DAC的转换数据是不可靠的。虽然G474时钟高达170MHz,但是如果程序放在Flash里执行很难保证长跳转指令的执行时间。而放在RAM里跑又占用宝贵的RAM空间,且中断也有很大限制。因此,有必要借助DMA,将CPU从繁重的数据搬移任务中解放出来。

3.1.1 定时器+DMA驱动DAC更新数据的实现方式

参考代码:
STM32CubeMX安装了STM32G4支持包后,在以下目录内,有使用DMA配合定时器和DAC产生正弦信号的示例工程:
c:\users\your_user_name\STM32Cube\Repository\STM32Cube_FW_G4_V1.6.1\Projects\NUCLEO-G474RE\Examples\DAC\DAC_SignalsGeneration2

3.2 软件DDS实现

3.3 基于ADC的交流信号幅值测量

3.4 传函拟合

3.5 传函模拟

四、硬件设计

4.1 系统框图

在这里插入图片描述
单片机内共使用2个ADC,ADC1负责采集测试信号,ADC2负责测量信号峰值;DAC4为片内高速DAC,最大25Msps数据更新率,但是需要接片内运放才能引出来,DAC1为辅助DAC,用来控制VCA调节增益。

4.2 STM32G474关键配置

这里,G474片内的ADC1和DAC3可以使用TIM3定时器的溢出信号作为转换触发时钟。首先将TIM3的TRGO设置为Update Event,这样当定时器溢出时,会产生TRGO脉冲,驱动ADC1启动转换,或者启动DAC4的DMA会话。

4.3 输入信号调理

这里使用了TL084运放作为输入缓冲及峰值检测,因为TL084中的另外两个给输出通道用,这里还需要一个LMV321作为精密检波的缓冲器,当然这里会有2~3mV的直流失调电压,问题不大。
输入通道调理电路和输入精密峰值检波电路见下图:
在这里插入图片描述

4.4 输出信号调理

4.4.1 DAC输出后的低通滤波器设计

考虑到简单实用,调整方便,我这里暂时采用LC构成的二阶低通滤波器,电路及参数如下:
在这里插入图片描述
该电路波特图如下:
在这里插入图片描述
转折频率3.2MHz

4.4.2 调理电路

输出通道调理电路如下图所示。DAC输出后通过电容C9隔直,然后U3C提升带负载能力。因为STM32G474的运放输出能力比较弱,允许输出电流只有几百个uA,而VCA810因为内部实现结构,输入偏置电流很大,大约几十uA级别,如果用驱动能力比较弱的运放带,会有很大的失调电压。当然,我们这里只有交流信号,但是为了减小失调,还是加了一级缓冲。
U3D负责将单片机输出的增益控制电压转换为VCA810需要的0~-2.0V控制电压。这里用了一个反相比例电路,G=-1。
在这里插入图片描述

4.5 与单片机的连接

本电路使用G474的ADC1的1个输入通道,ADC2的1个输入通道,DAC1的1个输出通道,和OPAMP5(内部接DAC4)。另外还有一个SPI接口供LCM显示用,另有4个GPIO给按键使用。
在这里插入图片描述
下图是与NUCLEO-G474RE开发板的接线。
在这里插入图片描述

4.6 其他电路

此外,整个板子的供电(5V)从NUCLEO-G474RE板上的5V取,通过一个IH0505S隔离电源模块(5V转±5V)产生运放需要使用的±5V电源(VCC/VEE)。输入偏置用的3.3V从开发板的AVDD取。
在这里插入图片描述
显示使用SPI接口的金益晨19264点阵模块。按键使用Omron B3FS兼容按键。

软件设计

测试


参考资料

CSDN:传递函数H(s)-滤波器设计, 作者:硬件工程师炼成之路
TI Analog Engineer’s Circuit – Full-Wave Rectifier Circuit
TI Precision Designs: Verified Design – Precision Full-Wave Rectifier, Dual-Supply
ST um2505 stm32g4 nucleo64 boards user’s manual

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐