STMCU小助手
发布时间:2022-11-1 17:19
|
本文主要讲解如何实现STM32ADC同步采样。* J2 a+ F: ?) x% |' V 7 T; E* C5 U! s8 ^6 z 所需工具:+ u% R# K5 \+ l( t; I: c1 @0 m 开发板:STM32F103RCT6# Q- P2 ~: H" b8 o STM32CubeMX IDE: Keil-MDK 模式简介6 [- v. l: g! Q 同步采样可以让两、三个ADC同时对各自的待测信号进行采样,这样就可以保留住两个信号之间的相位差。在相频分析中极具应用价值。, Y& M- H) q5 Q" h( } / U* |) W/ i' y" b 实现方式1; e" o' R: r/ M. H+ g STM32的ADC自带同步模式,这种方式配置有些复杂,信号处理的也不直接。已有现成的教程了,写的不错,我就不重复造轮子了。1 ?; g1 A0 E5 ?% P! [5 ? % d2 ^$ w, F, u! l! O( n 实现方式2 这种方式的核心思想非常简单,可是网上却没有发现有人写。以两个ADC的同步为例,就是ADC1、ADC3分别进行交流采样,触发源选择同一个定时器。这样在编程时,先开启两个ADC采样,再开启定时器触发,就可以实现同步采样了。 是不是非常简单?如果有思路了就不用往下看了。下面是具体的实现过程,能看这篇文章,说明你已经会基础的ADC采集交流、建立工程等操作了,一些细节我就不再赘述。(不会的话可以参考我的相关博客,写了我好久,非常非常详细) STM32F103RCT6的ADC2不支持DMA,所以我只能演示ADC1、ADC3的同步。对于其他型号比如F4,H7就可以实现三个ADC同步了。不过电赛用不到3个同步,两个就够。 原理讲解 两个ADC选择同样的触发源,这样当触发源发出触发信号时,两个ADC同时接收到触发,同时开始采样。. \2 \2 U, O, f+ U. X% i: ] S ( F* {# s/ F9 d7 a2 k
0 S7 p( w9 k6 _8 I: T3 g" _ 工程建立 ADC1的配置 2 o% ^/ F5 k# D B; K
+ v+ l5 O `% l2 R& g7 b7 B6 }7 S3 D ADC2的配置0 J' {- V+ o" R0 d , }% D4 m5 h! D
定时器配置6 W) R& U' ~9 j' i" i
; O8 a* F4 L. D, y |; Q/ E8 D 代码编写 & G& j& E& ]: @% D- q; X
和单个ADC采集交流一样。1 B% O8 j( { v# g$ U7 u ]
7 R2 x6 n+ z0 _8 n
可以分为下面两步走,顺序不能乱。 ADC开启采样$ r+ \. x+ T7 u p 开启定时器1 c7 I& ^# ~: \7 B# ~, O2 B- F6 N 6 Y" @) r; T: s% P4 i' N0 k 一定要注意这样顺序,因为两个ADC是分别开启的,开启的时间有先后,先开启ADC采样,因为定时器没开,就没有触发信号来触发ADC采样,这样两个ADC都在等待定时器没有开采。 如果先开启定时器,也就是这样编写代码
, j6 y, @0 u: H* D 因为ADC开启顺序不一样,当ADC1开启后,立马开始采样,这个时候ADC3正在开启,前面的个点就不在同步了。
+ S1 `' p! V* W0 E
因为ADC1和ADC3是同时采集完成的。所以只需要在其中任意一个ADC的DMA的采集完成中断位置把标志位置一表示采集完成即可。我这里选择的是ADC1的DMA中断。 同步采样的作用2 M' T, }" ?3 s4 k( D+ O4 \- x8 D 萌新宝宝第一次听到同步采样会有些懵。下面我来介绍下这个模式有什么作用。 ; Z7 m2 m& U1 c3 L0 ]+ X 很多电路系统都有一套属于自己的幅频和相频曲线,这点在电分、模电等课本中都有提到,已经是常客了。 我们测量幅频的时候比较简单,测量不同频率下输入信号幅度,再测量输出信号的幅度,两个幅度一比就是幅频曲线。" I8 e, D( u S3 h! h5 k, [ 相位呢则是对比输入输出信号的相位差来计算。输入信号的相位每一个时刻去测量都是不一样的。前1ms还是0°。后一1ms就是45°了。但是输入与输出信号的相位差是固定的。 * b' {2 p; ~& r- B( V; W) a
# Z ^$ `% ]) h, P: B; b; i 我如果先去测量输入信号,测完后,再去测量输出信号,或者先后顺序反过来,上面不同时刻测量相位不同的问题。只有同时对信号进行测量才能“锁存”住两个信号的相位差。* Z% J5 ?/ k2 V$ a & ?) N$ Y7 B: J7 k
) `6 c1 e2 M% _ 无论上面时候采集,两个信号的相位差是固定的。" n6 {$ e0 U" X% x 5 z; e5 }; X9 [0 ?" g6 f$ U
这样就把相位信息“锁存”到了单片机里面。下面就可以采用各种方式,比如FFT变换等分析信号之间的相位相位差了。如果不同步,相位信息就“丢失”了,无论有什么方法都不可能推算处来信号的相位差。7 [ w5 ^- F6 Z, O4 \7 r) x ! A- U& i3 f( ?* W3 V* X 如果理解不了,好好做下练习1,实践感受一下,我相信你可以懂的。; d8 S, C5 ]% D$ h+ Y 练习 用信号发生器产生两个相差30°、45°、90°的信号,让单片机分别去采集,打印导VOFA上,观察波形的相位差。每一个信号都多测几次,好好体会下博客中讲解的同步采样的作用。 有F4、H7的可以尝试开启三个ADC的同步采样。 ————————————————# H3 w" w; N$ F" d3 _, {- F0 s( |2 T 版权声明:四臂西瓜* H E. s+ p8 I' J; j' u+ _ 9 a9 b8 }$ [8 u8 t6 \5 t |
【STM32H5 评测】ADC 电压表
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
STM32H563 ADC+TIM+DMA应用演示
经验分享 | STM32N6 ADC DMA 传输失败案例分享
实战经验 | MC SDK V6.x软件HSO功能ADC采样设计说明
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | STM32 ADC过采样话题
经验分享 | STM32双定时器+ADC+DMA实战案例
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
微信公众号
手机版