基于STM32G474来实现2025年电赛G题电路模型探究装置(更新中)
本文基于STM32G474芯片设计实现了2025全国大学生电子设计竞赛G题的要求,实现了信号发生、滤波、自动增益调整和扫频等功能。系统采用软件定义信号架构,利用片内DAC和ADC完成信号生成与采集,通过DMA驱动数据传输实现高效处理。
一、赛题分析
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=jω
题目里
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)=10−8s2+3∗10−4s+15
当s=0(直流)时,H(0)=5,意味着直流增益为5,再令
H ( s ) = 5 ∗ 2 2 H(s)=5*\frac{\sqrt{2}}{2} H(s)=5∗22 (增益为-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
更多推荐



所有评论(0)