1.高性能DAC
! E3 X& k9 O8 m+ t, V+ e& ZG4系列一共有四个DAC,前两个为低速采集DAC(1MHz),后两个为高速(可达15MHz)
) B( H _: r! z: M8 ~; {1 O5 r6 E A, O
! X5 R) \% K2 [9 f2 ]& Y( Q5 F! W4 W3 c& W
4 ^6 C% u" P% @4 _3 {8 Q* Y; [ @5 }8 O0 w- m* w$ z
DAC1,DAC2的采样速率最大为1MHz,DAC3,DAC4的采样速率最大为15MHz。但是没有直接连接的GPIO口。
' t' X7 G- b) V
' u, e- i: n, y9 l4 }# L
; |' Q, O/ M; h, S, Z: `# ~0 x" Z* q+ d4 a% O N; J
& x- J# ^( g) s" w# v f
8 d+ L! X5 o- E$ {3 g' B
s K$ A- i' x- L: {, O% W3 \
! H8 i! ^1 {# Q2 e
DAC可以输出任意的高频模拟波形。2 x& M: N/ C& M0 p) b! _% R
此时DAC的更新速度受制于运放带宽的限制,因此最大的速度也就是13M。# L* O) n& Y/ V" J
* g! O5 V/ \! x2.滤波算法加速器FMAC(硬核FMAC+DMA滤波计算,能解放CPU), G( V% o' R. d1 _
# m; b9 e4 Y9 ~. N: t) ^4 |/ W- h7 X M) W+ W
7 o: v/ P4 v/ ^/ ?4 c
9 f: E# I! f1 y% P使用硬核的滤波,不通过软件程序进行,可以有效的解放CPU,/ Q1 I% h/ a G# |9 k. Z: w) k* T
2.滤波方程
% B3 S$ ~; j' u' y; C, ]; f5 p3 t5 D$ t3 A* b u
# k l2 T! ?; \8 v, y/ D
+ I8 y' E( j! L" C3 }( _) X3.单乘累加架构
5 ~, k( B4 M5 }# o' K% W% ?1 T+ e) [; h0 j! N
! i, u/ C" @/ ^' b/ @
' P( T' F, e" V/ W6 Y) e9 `- nFMAC单乘累加架构,是重复利用的。输入有Buffer,输出也有Buffer,通过Buffer加一个乘累加器实现滤波的计算。* ]- `+ v, e/ p: l* N/ ~
. H$ x# \( k- E ?$ EBuffer:存储缓冲器,将外设送来的数据暂时存放,以便处理器将它取走。7 F/ Z( x8 j0 }; W0 G1 C
! k& y2 V. j* H0 `, L: @) z0 O
4.Buffer配置, L' r0 R' b% ^- h2 F
$ L2 p+ w6 |+ l. k' l' s% P- b5 B2 F' A8 Z5 g* x5 z
1 }: E% r( p' g/ x) k
5.存储空间需求(Buffer的空间)-FIR
/ f: ^0 v& h* w
0 F3 |& Y; v" Z6 y; T8 o# w
) F- _3 E( n9 l( V5 `3 }
# O, w4 d: d6 H4 \6 L输入空间:N+k
$ l4 T. K0 @! O9 L4 E. v2 F. B固定参数空间:N
; j2 f1 W, M; N) `" P输出空间:k
# m: Z# U, G5 l5 y7 G! p总的占用空间=2(N+k)应该小于Buffer的空间256
$ J4 L9 T9 d/ l9 _2 }0 t$ C* B6.硬核与软件的滤波计算比较$ M3 R9 ?4 Q' D. H
硬核处理滤波计算(FMAC+DMA),速度不占优,但是胜在可以解放CPU.
3 Z: ~! J# ?- `/ Z8 s! G3 E/ @& j0 F4 i$ I' i- R, d3 E* O2 C8 M
3 f- E' Z! w9 l- F% |0 b
4 F! ~1 l2 c, v( M9 X+ ]- P7.工作流控制% [4 N+ ~' z' ~
3 A: _7 M- j$ q0 t" |% G# ?# }/ \9 [+ n9 R, r
' v2 K7 `- n( x9 X) o/ l& y+ Z% I- j* H; @
/ Q6 Q/ y& Y h! n& }2 V. v9 S& ^& _. z, x5 |- @
# a' a, ^% a) G9 t& e, U$ ~
6 Z1 ]$ C2 n8 F% s6 X9.FMAC应用举例
: f/ B5 q; z5 m: N$ Z, t: N
6 \2 r% }& q' H5 L
& T7 R- s3 t2 O B
" n( g$ b v% C0 b+ w( H2 j3 a* A7 t+ b/ S
& [6 _0 n7 K: O, j, S F( ~5 O; Z. s" e
1 \1 ?; P: B; {! L$ t5 E
4 }4 S$ Z( F8 i% L: F G( b: W* n8 n& h
: {. p& |/ `: U, U( N6 m/ l9 r; o; @# ~5 F1 i
U+ n% a% t1 }7 C
% D3 ]7 i, {/ d
代码:
, j) b7 z; E9 C: F% T9 B- 1.FMAC_FilterConfigTypeDef sFmacConfig; sFmacConfig.CoeffBaseAddress = 0; sFmacConfig.CoeffBufferSize = FIR_COEFF_B_SIZE; …… …… 2. HAL_FMAC_FilterConfig(&hfmac, &sFmacConfig); HAL_FMAC_FilterPreload(&hfmac, aInputValues, FIR_COEFF_B_SIZE + FIR_D1, aOutputDataToPreload, FIR_COEFF_A_SIZE +FIR_COEFF_B_SIZE) 3.HAL_FMAC_FilterStart(&hfmac, aCalculatedFilteredData, &FIR_OutputSize)
复制代码
# v! s- W! z% z+ I& ?5 Z$ _7 ]
~1 P# x3 d7 {5 l3 U" t, Y0 V4 ?) s: B* A2 K+ H9 N
/ U& D. V& a# }2 `: Q0 s- F! q+ x9 B3 y p7 z1 O. P1 a0 h0 m
6 v9 S4 }! _9 C+ A$ u1 o
+ E. Z7 M5 H0 Z* Z$ P1 F- T2 S/ W5 P- t
6 }( L( e. i4 ]2 ^- n+ ~4 I) {
; M. I7 H( G% S2 t2 a, t& {+ L1 n: j# ?$ _0 ^. y- s9 X" P! e- Q
4 b: A' M+ l1 q5 e3 B2 _6 A7 i0 ? Q3 {
% N; @# L8 J& z) {5 w. I* a( x6 S. v
总结5 ? a" ]( b f! q
STM32G4的Cordic可以加快环路计算
6 }( \+ ]0 ~6 Y) r! v0 m• STM32G4的FMAC做滤波算法可以释放CPU资源- G/ u2 g- s( ~" x/ L# ~# w
• 使用出色的片上运放,比较器即省成本又省板材空间; c# j1 a( ~" n7 W. f* _* D
• 特色外设可以有更多设计想象# {# f8 c& X+ y& V( f) e
% u" U) J6 ? d1 r2 j2 V; K
& r- F- O% \7 A v
# u% ?7 ^4 F9 t0 Y |