DRV8353S电机驱动芯片基本介绍
5 T6 F- y- ^8 M" cDRV835x系列设备是高度集成的三相无刷直流(BLDC)电机应用门驱动器。这些应用包括面向现场控制(FOC),正弦电流控制,和无刷直流电动机梯形电流控制。设备变体提供可选的集成电流分流放大器,以支持不同的电机控制方案和降压调节器,为门驱动器或外部控制器供电。- e1 p* D* J/ u2 W$ n1 v# C
" q* w0 W* b+ z# n$ U2 s
DRV835x采用智能门驱动(SGD)体系结构,以减少MOSFET转率控制和保护电路所需的外部组件数量。SGD架构还优化了死区时间,以防止通射条件,通过MOSFET转速率控制提供了减少电磁干扰(EMI)的灵活性,并通过VGS监视器防止门短路条件。强大的门拉下电路有助于防止不必要的dV/dt寄生门打开事件的各种PWM控制模式(6x, 3x, 1x和独立)支持简单的接口到外部控制器。这些模式可以减少控制器对电机驱动PWM控制信号的输出数量。该系列设备还包括1x PWM模式,通过使用内部块换向表对无刷直流电动机进行简单的传感器梯形控制。4 w( U) g8 `# w8 r
6 Y* t# l$ l& a3 v
7 W7 a) N; a! Z. d2 z: |2 f
$ c0 n. d: H% v- B& e+ x: y. ^+ y1 R0 `1 o0 S. c8 A5 s: D
一、硬件分析2 v+ R: ]9 O7 _0 |% [
# I* e$ {, Z; h- A/ M4 C) M
% U% D0 L h5 G" T9 V$ l8 g8 Y
* D9 W9 x# K5 U
! ?" q1 `1 |- n1.电源部分: L# `3 B6 M! V' ~
驱动芯片供电部分- _. ]1 V+ W0 z% {& I" {
% ~, G5 c5 U1 z$ S' o2.pwm驱动部分! m8 i2 l7 \2 I' L0 M9 k
6路pwm波加使能信号ENABLE,ENABLE使能信号有效时(高有效)才会控制电机旋转
8 Z! j6 C y; _% ^3 C6 C! }. Y! H. t6 N h( r
3.SPI寄存器配置部分
9 o) [# p; b" Y; N1 P! ~2 N# O& b4路pwm波,SPI模式需配置为模式1 即CPOL 0 CPHA 10 z3 V- Z3 r( d8 s w: }( O9 l
9 z- d4 y3 [. N4.电流反馈部分
$ e2 r7 }( d* W- n5 E; D可直接连接对应AD采样口,注意电流方向& X$ [' M# D, ?% k' Q* O
; l- y* O2 G. c* J/ ?* H" S# d5.输出部分
2 {; ?6 ]; A' I% X% s7 O接6个MOSFET管,组成逆变器电路7 E$ L0 M. J- X2 x6 q5 E! n
K, S5 S& d7 v7 ~) c
6.故障检测部分8 G/ Y2 I+ I) a( \- c# e
产生故障后输出保护信号
6 }0 m0 t% _0 l6 n1 k- q
5 t3 l$ z o/ ?! x5 c$ G2 ]. t: ], R# ~# I7 _4 G3 o. E
二、cubemx IO配置和SPI配置
+ H- G* n. Z8 u0 i! Q1.IO配置% K# t' P% n! j1 z% r# H) l
片选信号配置默认为高电平,/ U( k+ T7 i0 V% q9 ?
. J. Z/ G' {( a8 E' H
! c, s3 c& l6 m* w+ W+ Y# y
8 u! a" z$ L8 O8 L( H2.SPI配置 q1 v3 } F' _: J
16位,CPOL配置为low ,CPHA配置为2Edge(8位也可以),SCK MISO MOSI信号配置默认低电平。
: s7 c A" B. h" S& k
! J" i( a6 n+ g9 D
! p9 c; }- j. J7 n. T) _/ ^. O
2 t, A" }* \# Y7 L* D3 a6 f% [
& S$ b; x7 Z4 P: e- f8 S/ |+ O3 G. g% R/ i* M0 S1 p0 b* C& t1 q% b
三、寄存器部分说明和配置
0 o, P+ n s7 O3 v9 J. Q1.基本数据格式! ?- k+ V) S; ^7 {1 Q( G: x( _
SDI输入数据字长16位,格式如下:•1读写位,W (B15位)•4地址位,A (B14 ~ B11位)•11数据位,D (B11 ~ B0位)设置写命令的读写位(W0, B15)为0b。设置读命令的读写位(W0, B15)为1b) n6 l3 J* v4 u: q3 t5 y8 M
1 |* j) I' e" qSDO输出数据字长16位,前5位为“不在乎”位。响应字是当前正在访问的寄存器中的数据。整体后续配置基本按照默认配置。4 R1 ]2 N, _! L0 Q* M5 R
5 Y+ z" j" ~; z* w9 g0 O5 B
+ p/ G! @- ]) Q; x8 n) a7 i6 u
1 x. ~/ l m3 O! [2.寄存器发送具体数据分析(地址0x02至0x06)2 i+ y7 w$ i' i( t
2.1地址0x02- i. m% ?2 x4 D1 B1 r# U3 m2 v
+ o, \. K( b! x+ I4 O
1 |8 Z# l) M. O. q! F# w Q
/ `+ Q8 I, ^; k/ q4 c, E* ?7 [0x02 需配置BIT10为三个半桥(三相) 数据为"10000000000
& M% C) h) ~. z* m4 c' r5 j7 M前五位数据为00010 因为第一位0代表写入寄存器,后四位代表寄存器地址0x02& C) w3 D0 O8 }0 ~7 [# [& a7 W
总的传输数据为0001 0100 0000 0000% O& l: U* \. e/ o" ]0 B
HEX表示为0x1400
! V @# Z( Y5 B: L& L3 H
- [/ y8 [+ R, T0 I/ u/ `/ g2 k3 K+ w4 S
2.2地址0x033 y: k1 y6 o3 `& ~; l5 ~
# L6 f3 G1 T: B
( x: t7 ?& c9 {
( e% p; u7 `% s- u( w* M$ Y! a* L0x03 需配置BIT 7-4为 1111 1000mA% k9 I3 U I. [% T% P
需配置BIT 3-0为 1111 2000mA 默认值即可以
/ Z& @" l$ L* a* U( r前五位数据为00011 因为第一位0代表写入寄存器,后四位代表寄存器地址0x03* z/ r3 B9 A% T5 z8 w
总的传输数据为0001 1011 0010 00107 U0 d7 s: p+ g$ o( x2 _
HEX表示为0x1b22! _& w/ C4 a1 Y8 B
0 T9 K& z4 l" k H& b. k% u
2.3地址0x04- c) H7 D* p& [8 H
7 q% q( m/ G" O3 e$ w
4 X3 @3 B* \( J; {! d
1 r" k& l- F/ s( z9 o0x04/ @, z/ `- g- S$ F! A$ u' r
需配置BIT10为 1 当给出新pwm输出后故障清除
$ s5 ^3 o: b& n; Q$ N& I需配置BIT 9-8为 11 4000ns的门电流驱动时间
# \8 y4 b: a- G5 P6 f; C. v; T6 Q! s需配置BIT 7-4为 1111 1000mA- S% L1 a! H; m
需配置BIT 3-0为 1111 2000mA' h5 x' _" w3 O2 w" c
前五位数据为00100因为第一位0代表写入寄存器,后四位代表寄存器地址0x04
! Q+ w3 y+ H0 H5 k1 }* ]总的传输数据为0010 0111 0010 0010+ s9 k; N6 @+ X
HEX表示为0x2722
& h2 K$ j) ?- L2 _) x. P/ M( S: O
. X7 ^) ~! F' e; t! w; b
$ }7 L( E( b( R6 R' b1 K, t2.4地址0x05
- d" a) y. G- \; g( v! F9 [1 E; K2 l4 q/ v# @, n/ P8 \+ G
% m' W% i/ e; [) c* }5 N2 T+ V9 g* R+ O
0x058 v* Z) n- s. ], ?3 c
需配置BIT9-8为 11 400ns死区时间
1 y9 S7 n9 Z+ z& O. |" M需配置BIT 9-8为 11 4000ns的门电流驱动时间
6 z- k% g( w- i- G需配置BIT 7-6为 11 过流自动重试故障: \! G$ Z' Q( n' C" q
需配置BIT 3-0为 0110 0.3V VDS_LVL电压
; z+ u# `+ O) r$ y. I% k. Q" g
前五位数据为00101因为第一位0代表写入寄存器,后四位代表寄存器地址0x05
! W( l0 y0 U* V% a) r/ i6 W) w! k总的传输数据为0010 1011 0110 0110
4 @! e' @; c: a5 P, f' K: lHEX表示为0x2b66 }9 a; N# G' l# h5 Z) E2 w
0 I* P3 F& l" I* G+ O7 l! |$ z# v2 [# r: u6 S* O# q
2.5地址0x06
" x/ C8 M6 m x8 v9 o; A& l; n% |7 Q4 D. h
& Z9 F& z' o- H5 A$ e' ^7 Y2 C
! U6 t. c, B& v" M8 A, t2 B! h0x06
* w. X0 ~; K; I8 p需配置BIT9为 1 感测放大器参考电压为VREF除以2
3 ?3 Q$ z0 s7 b6 V& U. P8 x需配置BIT 7-6为 10 20V-V增益
$ X$ l0 n( z! [# x; `前五位数据为00110因为第一位0代表写入寄存器,后四位代表寄存器地址0x060 v/ B, c' [8 V/ s
总的传输数据为0011 0010 1000 00000 \ E: j$ H! k
HEX表示为0x3266! k* e- ?6 g5 t( Q; R9 w
% P5 S1 k0 N8 {+ a
% m" w1 [+ {: }2 \6 p7 ?三、读取代码
- w+ n; x+ y1 A- c代码顺序
% Y0 i e( E- b3 m1发使能. M8 z5 `6 D5 v2 I6 C8 A- V5 ?6 E
2配置对应寄存器 o' r8 O& Q) f8 _
3发送pwm波给驱动芯片
) m( Q0 z$ n: w/ T2 a( j* j
0 m, @2 ^ ^6 Z) S% G/ A$ @4 Q发送函数
; M( M) H- z& P7 `% { T- uint16_t SPI_SendHalfWord(uint16_t HalfWord), N" D5 H4 M+ m& q' S4 E- O
- {
4 o0 W8 @# n0 U5 H: r - * c+ [" a! L# A i+ G# r* z
- SPITimeout = SPIT_LONG_TIMEOUT;1 |4 y1 e* d/ G4 Y6 L2 F: q
- /* Loop while DR register in not emplty */
/ K5 A5 H N( V - while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_TXE ) == RESET)5 W% H. F1 V. H, P
- {' v/ H; R9 Q& F! {. [ ~
- if((SPITimeout--) == 0) return 0;. @" C" [% b; v7 Z3 P& C
- }" H J3 N/ [) B6 l; U! c
- /* Send Half Word through the SPIx peripheral */
4 r6 j0 g$ h2 \ - WRITE_REG(hspi1.Instance->DR, HalfWord);
8 s) E( _% V. I5 J; m) W1 [ B - # X' k" g4 @8 L9 H
- SPITimeout = SPIT_LONG_TIMEOUT;2 W* e6 b( f& |1 E9 T# E
- /* Wait to receive a Half Word */
8 b' t2 K" R. S0 [) I% I& F9 M" w - while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_RXNE ) == RESET) X8 ^* {! E0 ?" F: f
- {: Z& I1 L. Z; q: @$ } V: t
- if((SPITimeout--) == 0) return 0;) b4 {* S4 x" A3 N& A E
- }3 N; e3 C- f* C) @" v* Y
- /* Return the Half Word read from the SPI bus */
0 V7 G6 F) A$ P: }$ Z7 ], ] - return READ_REG(hspi1.Instance->DR);
9 b# {' {+ T% R# ?2 G -
: r3 B3 y2 @9 R3 H! X - }/ o7 }. T, O5 M! ~
复制代码 . a" o$ D: w. t8 u+ @9 {
8353写入函数$ j, y6 n; ~5 u7 q6 p; ]
- void SPI_WRITE_DRV8353(uint16_t WRITE_MOTOR_DATA)
y: b/ J& g$ }& h' k1 u6 Q6 |/ P$ e - {
! S" P( L4 k: t3 @5 F. [9 X - 4 ]+ U2 o! s5 U: R
- /* Select the MOTOR: Chip Select low *// L6 r7 q/ l/ T% s
- SPI_MOTOR_CSN_LOW();* v4 l C0 k" X! a/ Y: a& @3 e& ]: W
- /* Write a halfword to the DRV8353 */ 3 J! J5 D0 ?. n, U7 o ^/ c
- SPI_SendHalfWord(WRITE_MOTOR_DATA); ; a: r$ g v, U4 C. \
- /* Deselect the MOTOR: Chip Select high */ 7 g R7 V/ g6 X
- SPI_MOTOR_CSN_HIGH();0 M2 B9 W& q2 Q; I7 ^6 U) E5 v
- Delay(1000); # U. E1 m& }; o3 {- N
- 0 L; ~: z- E- M, o
- }* e3 S/ I- S6 W- b( o
复制代码
4 S2 S% A3 Q' B. j& P6 ]5 [8353读取函数
3 M$ F9 K* o9 d F9 k- uint16_t SPI_Read_DRV8353(uint16_t READ_MOTOR_ADDR)
- t! ^; J( R6 q% K- m* C q, l' J. u - {* h% {) V1 p# [: E
/ m, D6 X+ x: }$ r, c% j- uint16_t DRV8353_Temp = 0;
6 A8 s8 m" x) x4 N0 {" v - /* Select the MOTOR: Chip Select low */$ g# O# R: d+ g4 B( D ]
- SPI_MOTOR_CSN_LOW();
$ ^7 D P5 t# h; m$ o; e - // SPI_ABS_CSN_LOW(); 8 k" k/ T1 I# E+ {
- /* Read a halfword from the DRV8353 */
5 G: a- ?' j$ O& W, `4 b( j; Z! G- v - SPI_SendHalfWord(READ_MOTOR_ADDR);/ p3 `3 ~. |2 R0 R( i) J5 P
- DRV8353_Temp = SPI_SendHalfWord(READ_MOTOR_ADDR);
/ L8 B9 H& r, ?6 b0 u6 K; g Z -
0 K' U# M7 s% _6 W' Z - //TIMP2=HAL_SPI_Receive(&hspi1, spi_rx_data1, 1, SPI_TIMEOUT_VALUE); //DRV8353的数据传输 d+ n% m% U4 O- H+ G; x
- /* Deselect the MOTOR: Chip Select high */
3 \" v0 L6 D5 z - SPI_MOTOR_CSN_HIGH();
1 ~/ i9 _" p6 A - Delay(1000); $ G# _9 s2 H+ q& H5 \1 |
- return DRV8353_Temp;& ]# @5 i+ T/ m( i; R8 p* [( p, N/ \
- u g7 W4 [ w( R
- }8 ]6 g7 @; Q' o& w0 ]3 l
复制代码
5 v5 O) }9 Y/ @+ N. G使能加配置芯片
) }; A1 c. E: J* t5 Z: K- MOTOR_ENABLE();//使能DRV高电平输出) _8 y1 \! r) l3 a$ k# ^: @
- Delay(200000);
+ e* q0 q5 L1 @8 ? - SPI_WRITE_DRV8353(0x1400);
- o/ K: L/ @( z3 M% z1 g$ N - SPI_WRITE_DRV8353(0x1b22); ( p1 O& Z+ f3 C. M6 z! S
- SPI_WRITE_DRV8353(0x2722);' q) K# o3 a& ?" ^' J
- SPI_WRITE_DRV8353(0x2b66);
% x- G, f& b% ~. z - SPI_WRITE_DRV8353(0x3280);6 f( c8 |6 s8 N* x1 t* Q3 c
- Delay(100);
6 Q, \2 c! W3 Z0 b: I i5 n7 ?+ O
复制代码
0 [9 [, J! [! I2 v- }读取芯片返回值
. G3 p3 U: a9 r- SPI_Read_DRV8353(0x9400);2 m$ P- K4 k. |& K
- TIMP1=hspi1.Instance->DR;//取地址0x02
% }0 u% I4 z L0 v9 S: f7 d: r - SPI_Read_DRV8353(0x9800);
1 z! f3 z2 b7 u! R - TIMP2=hspi1.Instance->DR;//取地址0x03" I6 m0 z2 K, r4 G0 e
- SPI_Read_DRV8353(0xA000);
/ |! T+ f* g2 t+ n) N+ {" p& n - TIMP3=hspi1.Instance->DR;//取地址0x04
0 C0 B8 |. U/ N" M% Z6 {4 V - SPI_Read_DRV8353(0xA800);" t/ J% j6 w$ M- v* _$ ~( s
- TIMP4=hspi1.Instance->DR;//取地址0x05
% g' f& a2 y& n4 h - SPI_Read_DRV8353(0xB000);: H- f% f0 |+ z) G$ B3 \
- TIMP5=hspi1.Instance->DR;//取地址0x06, F, L) V C0 _ x B3 N+ p# x3 w* N
- , P5 [' G Y. F2 S/ N
- 8 e' k9 x8 @+ X
复制代码 2 j# s) Q; c8 ^2 j- {7 k
将返回值与寄存器表进行对应查看是否写入寄存器
' l1 v+ p, x' w9 m+ N$ r1 C! B5 i; L ?, H" m8 e
, J+ A) z5 Q) t! O- L9 Y) h/ _! q; z L& n
————————————————
0 n H4 m- R. C; J. t7 K" E版权声明:超级馒头神9 E& v! s/ E% u; G
% H7 X$ P% y& H7 `, Q
" z @; _3 ]; L! E- a+ J* M) C" \
|