DRV8353S电机驱动芯片基本介绍) f J, z+ S: B) L
DRV835x系列设备是高度集成的三相无刷直流(BLDC)电机应用门驱动器。这些应用包括面向现场控制(FOC),正弦电流控制,和无刷直流电动机梯形电流控制。设备变体提供可选的集成电流分流放大器,以支持不同的电机控制方案和降压调节器,为门驱动器或外部控制器供电。
3 x, |$ ~( B" r- y5 g
3 B5 A; ]3 j3 Q$ n4 tDRV835x采用智能门驱动(SGD)体系结构,以减少MOSFET转率控制和保护电路所需的外部组件数量。SGD架构还优化了死区时间,以防止通射条件,通过MOSFET转速率控制提供了减少电磁干扰(EMI)的灵活性,并通过VGS监视器防止门短路条件。强大的门拉下电路有助于防止不必要的dV/dt寄生门打开事件的各种PWM控制模式(6x, 3x, 1x和独立)支持简单的接口到外部控制器。这些模式可以减少控制器对电机驱动PWM控制信号的输出数量。该系列设备还包括1x PWM模式,通过使用内部块换向表对无刷直流电动机进行简单的传感器梯形控制。
~3 f6 ^& x' [, A' P. Q# |" o$ |# W9 i( f) O
) s9 _- C6 `" g$ l O% ?
: ^+ V, }3 i# v* h
+ |3 }: c, h4 }- R: p$ W& I% l一、硬件分析
; y5 T% ^/ n* c. R+ ~9 X! ~. A
3 G4 j4 ]$ I8 Y- Z/ b z5 {' ^
" s+ O0 t9 {7 d; D
# U- x2 b" F% r
! u% b( j# \0 F+ x1 I3 E
1.电源部分1 ~+ ~( ]* O4 l% P! d) l6 }2 c
驱动芯片供电部分# O/ g7 s" @* @* D
! ^: g& R* W: z7 L# m; A
2.pwm驱动部分
9 D$ S- H2 h1 _3 ^! g$ I6路pwm波加使能信号ENABLE,ENABLE使能信号有效时(高有效)才会控制电机旋转1 ~8 X5 p2 l6 y# C8 J& c
* N$ @9 u# ^! p( w/ o
3.SPI寄存器配置部分
9 e8 f- J' H3 e9 o$ ^& f4路pwm波,SPI模式需配置为模式1 即CPOL 0 CPHA 1
6 d2 F/ O' R6 h* m1 b2 c5 p8 P3 G& Y
4.电流反馈部分
" E% Z1 ]1 c. q5 n, s9 _可直接连接对应AD采样口,注意电流方向
8 L, w% G5 Q/ h1 A" Q3 s* W% l8 O v! B# [1 q, A
5.输出部分5 Q- ~' V7 K4 s8 c
接6个MOSFET管,组成逆变器电路) C2 g S( _. |. ~0 Q2 s% f
/ w* x Z1 x+ t, L9 `& o9 |2 E6.故障检测部分
/ ]# q+ F9 q5 s" d9 F产生故障后输出保护信号4 F; T# A; M4 s, a6 p, F$ j; F
; ^9 Z' h" n4 g8 R y6 P9 E9 @0 a$ [
二、cubemx IO配置和SPI配置1 f0 j1 x9 f P3 @/ [# x/ X
1.IO配置1 b' Q3 Y+ E7 ~) k7 S* h* P) X& f( C
片选信号配置默认为高电平,
* t- i' u( } G$ N* G
3 \- n" ]" g! O7 B7 ]$ a6 ?
9 i, T- d# e/ A2 E# P2 B7 C) F
+ p( y! V8 o4 t$ }# C
2.SPI配置
{: y& C; Q- G7 Q* M3 x, [16位,CPOL配置为low ,CPHA配置为2Edge(8位也可以),SCK MISO MOSI信号配置默认低电平。( t9 _5 k, |, S+ o
% P: G" y- n- ?" ]
8 p7 W; Q0 d/ b5 c- G8 `4 s& [( X
. x" d2 O9 J7 \0 ?/ q
# W: l: Z+ n* {; |' y/ v) e
% {( Z* s: l+ o; u
三、寄存器部分说明和配置
F% t/ `& g. N' P: N1.基本数据格式! }: h! P9 t, F7 \4 M# g
SDI输入数据字长16位,格式如下:•1读写位,W (B15位)•4地址位,A (B14 ~ B11位)•11数据位,D (B11 ~ B0位)设置写命令的读写位(W0, B15)为0b。设置读命令的读写位(W0, B15)为1b
/ `! m+ m I4 H! h4 k
2 S/ Q0 E G& x, s P# | U$ W( I) BSDO输出数据字长16位,前5位为“不在乎”位。响应字是当前正在访问的寄存器中的数据。整体后续配置基本按照默认配置。% P6 Z/ X' E9 i% W
. r( d2 u! z3 s5 l2 y9 S8 K* S
5 _$ M) F, k9 c; _8 m
+ a, e0 T# k4 m8 Z& n2.寄存器发送具体数据分析(地址0x02至0x06). T4 f2 C6 X( S% J9 N
2.1地址0x02 _# X: d1 E) q! r
! T% q _: |# ^
9 Q: `, `- c6 D( }" E6 p
. a, q0 H) H! \' ]. ?0x02 需配置BIT10为三个半桥(三相) 数据为"10000000000
0 B1 A; T0 ^) `( Q前五位数据为00010 因为第一位0代表写入寄存器,后四位代表寄存器地址0x022 ^- b; k( j6 I' q7 {: \
总的传输数据为0001 0100 0000 0000
/ l: g7 n9 v2 `8 ^# N3 ]( [HEX表示为0x1400
8 m9 B0 `( c7 `& g4 f- c1 B
o. [0 O9 ]: @, n3 i6 x5 F% N0 a! p$ d1 L
2.2地址0x03
# W s$ w; j( A" w* V' Q, C6 X) h: X& ]0 Z9 P
: B& _* v! |1 C" Q' b! l8 @
: o6 ^* v/ |" h0x03 需配置BIT 7-4为 1111 1000mA
. o% [$ g- B+ h% d需配置BIT 3-0为 1111 2000mA 默认值即可以- L F& y7 E6 m+ n
前五位数据为00011 因为第一位0代表写入寄存器,后四位代表寄存器地址0x03
1 L8 H7 `& `0 [) K3 ]9 T总的传输数据为0001 1011 0010 00105 z5 C2 O# u' q% E; @! o4 z& B
HEX表示为0x1b22# y8 g( l+ f2 s$ L8 S8 P/ l8 A V9 E
: M9 b6 ^ D/ b: _: q2 u2.3地址0x04- d& `! f+ G; }1 s( S" ]
$ J! T2 h+ s1 [
: z% a% L) q9 z) k( i0 T: G: {
+ w, o9 a9 U; U
0x04
* W( Q# L* Y0 X9 o: i( O+ g需配置BIT10为 1 当给出新pwm输出后故障清除& l' K: w! w4 A6 r
需配置BIT 9-8为 11 4000ns的门电流驱动时间
, Y4 V+ r/ x+ U1 W需配置BIT 7-4为 1111 1000mA% Y: I B: \( f0 K H! ^( {
需配置BIT 3-0为 1111 2000mA
) G4 J" b) c% ~/ F! b前五位数据为00100因为第一位0代表写入寄存器,后四位代表寄存器地址0x04
: }# g* Y# u' j( ?# D) y4 C总的传输数据为0010 0111 0010 00100 P4 }0 g2 R, R. Z
HEX表示为0x2722
% ~7 O3 G& }; W. J+ i7 y
: i7 g) N5 O3 }; w3 t2 M* L) J3 [& G. Z$ C0 m3 i
2.4地址0x056 m0 i+ v) c0 D! e2 K
7 d; _0 `* P4 ?6 k
6 j- ~ o3 Y- u7 T( Z$ D
R7 a! J- I) r
0x05
! i+ \* Q$ D& Y+ ^, e. E需配置BIT9-8为 11 400ns死区时间/ b+ c) h! H9 M/ ]2 k0 j
需配置BIT 9-8为 11 4000ns的门电流驱动时间/ B7 u/ j! t! U& Z: @/ W
需配置BIT 7-6为 11 过流自动重试故障
- |! J; p6 z' z) ^: j+ c# K s需配置BIT 3-0为 0110 0.3V VDS_LVL电压2 G( X, F5 I1 N9 p' c
! ?7 }" S0 W8 F0 n( g前五位数据为00101因为第一位0代表写入寄存器,后四位代表寄存器地址0x059 C0 d, F; U/ D8 h/ R$ V
总的传输数据为0010 1011 0110 0110+ n3 f# x0 a9 \2 H
HEX表示为0x2b66
: N3 z' Z+ ~# N3 X0 s/ j
; i8 E, [ E. ?) x) I
L4 r6 s9 ]% S$ u8 F4 p2.5地址0x06
( x8 D- ]0 ~2 v( f* Q* I2 D% _" R
~- F! Z4 j' A/ Z8 K
8 M6 w i& F: c: u3 C
3 {0 R% n E6 }/ r [7 D; @0x06
5 ]- U0 n( H5 M, @" ?需配置BIT9为 1 感测放大器参考电压为VREF除以2
% Y! J& f+ v0 a; D0 Q需配置BIT 7-6为 10 20V-V增益
' W3 ]- v/ b( t9 s前五位数据为00110因为第一位0代表写入寄存器,后四位代表寄存器地址0x06
8 _' a9 ?" J4 R1 @/ B' `/ [总的传输数据为0011 0010 1000 0000
9 X+ {5 k: H5 _ p% E! pHEX表示为0x3266% J2 W8 q' `. H" B7 L( C/ E! _% u
6 u! j2 J2 F% o' m/ m& o
3 e6 D0 b2 f0 o. C
三、读取代码
% D. A. s! @6 o代码顺序
0 E+ P) H1 l6 P0 z0 k$ a1发使能/ j; K) U( V y% V
2配置对应寄存器6 J$ r; z: z+ g6 d0 T- f# @
3发送pwm波给驱动芯片( s: i6 j2 H- A; l' p0 ^" K
7 ^" P: l5 a( n: x& K发送函数
8 r8 G& `5 M' |% ~& r' \- uint16_t SPI_SendHalfWord(uint16_t HalfWord)
; L( F* o/ \' s0 i/ ^; U( i$ X - {
3 T/ h$ a w% u% p/ t -
' z% ?% O5 k g# \5 K* [ - SPITimeout = SPIT_LONG_TIMEOUT;
' J" ^/ w% y2 o/ ~. p - /* Loop while DR register in not emplty */
1 Z) C; K8 X2 T. `+ B' ? - while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_TXE ) == RESET)
6 `( t7 |" J! o) q' N$ d - {
5 J9 J7 h- m6 m: I4 B - if((SPITimeout--) == 0) return 0;1 V+ e3 ?, s) i/ S" j' m
- }
- C L) Z o+ n - /* Send Half Word through the SPIx peripheral */
3 V& ~$ |: B6 \4 N) C4 \0 C - WRITE_REG(hspi1.Instance->DR, HalfWord);
9 O( S, t! y( C6 U8 h5 M. o) } - 1 n- m9 `; C$ k9 O% U
- SPITimeout = SPIT_LONG_TIMEOUT;. Q- l% U( g+ s! L; N) K8 x
- /* Wait to receive a Half Word */' }0 L0 y" U8 @, L
- while (__HAL_SPI_GET_FLAG( &hspi1, SPI_FLAG_RXNE ) == RESET)
* ]" K1 r. _7 n# Z! G( N- R1 S, i - {5 x$ o2 ~2 |4 ^5 G% o& N% d2 c. C
- if((SPITimeout--) == 0) return 0;
/ ~ Y2 x3 U6 H' l; `( x) t6 M' S o - }
% B2 M5 s# F4 q+ `% ] - /* Return the Half Word read from the SPI bus */
# u9 K# a+ R8 U; H - return READ_REG(hspi1.Instance->DR);
/ j. c0 S/ M5 L5 I$ A6 _ - 6 ]7 Z8 |8 R! n" O+ Z2 g- l9 ~6 D
- }% x0 Z5 j5 p! g1 @
复制代码 ; [# d; k) H6 y' a- K' ~1 S
8353写入函数
5 F( n: \3 T4 H! q, `/ u' h- void SPI_WRITE_DRV8353(uint16_t WRITE_MOTOR_DATA)5 [' U1 w) a3 g ~, B7 b" j4 t
- {
1 R* N/ _1 r( s2 s6 b% m* h* h
3 Z: ]3 A2 J9 y( u. M4 k6 M- /* Select the MOTOR: Chip Select low */( F: c( p/ m1 R; L
- SPI_MOTOR_CSN_LOW();, k" n7 N4 h# L% o
- /* Write a halfword to the DRV8353 */
" }4 ?* t1 ?$ m8 s4 R - SPI_SendHalfWord(WRITE_MOTOR_DATA);
0 ]: _" a; R7 c# ]% h6 k) } - /* Deselect the MOTOR: Chip Select high */
1 K0 g6 T4 D" w3 [5 m - SPI_MOTOR_CSN_HIGH();+ e; H# w6 Y2 T0 \# y
- Delay(1000);
. ?0 o8 y5 e' k -
, n4 w) `! l# m% D - }6 `, k. S* G7 u, ~2 V
复制代码
* \: P( k, J3 Z9 j1 K% ~8353读取函数; }' H9 O* ?; b# J) {
- uint16_t SPI_Read_DRV8353(uint16_t READ_MOTOR_ADDR)
4 D$ b4 s- U1 I1 _/ ]( R# C2 a - {
9 o( ?0 v& R6 U. A
3 U* Q1 r& M/ a! x% v1 n: U- uint16_t DRV8353_Temp = 0;
$ B6 L; W! W; r! ^6 b8 L( ^ - /* Select the MOTOR: Chip Select low */
% t- O7 [8 ?1 Z/ y2 R2 O - SPI_MOTOR_CSN_LOW(); ( \3 I% {8 D5 P1 N- R- y. Y
- // SPI_ABS_CSN_LOW();
9 A) W+ s" E7 o0 J( g - /* Read a halfword from the DRV8353 */) ]0 Z& B) ~$ M k0 R+ S4 V, y% `
- SPI_SendHalfWord(READ_MOTOR_ADDR);/ z z" V3 l7 d$ D, O1 Q$ S R- [
- DRV8353_Temp = SPI_SendHalfWord(READ_MOTOR_ADDR);! p1 J1 K- j1 s9 M
-
' X+ U% Q' |0 e, d" m2 J - //TIMP2=HAL_SPI_Receive(&hspi1, spi_rx_data1, 1, SPI_TIMEOUT_VALUE); //DRV8353的数据传输3 k; Z$ t% l3 Q, U2 n+ l( L
- /* Deselect the MOTOR: Chip Select high */
6 f" _. D1 I: I Z* m - SPI_MOTOR_CSN_HIGH();2 m6 E7 a6 ^4 I6 r8 x7 S4 z, k
- Delay(1000);
4 \$ k0 ~" L$ a$ m' z - return DRV8353_Temp;
* y$ T/ n; P' q& s3 N% \# M - ) e8 K1 E: d" B$ l
- }) q# h" l4 f0 y% I g
复制代码
$ u" r; h6 U: y4 P+ {! Z! Q使能加配置芯片
' D V+ g2 P$ F' {- MOTOR_ENABLE();//使能DRV高电平输出
$ ~/ j5 m. N8 W- _1 k, R3 V+ x - Delay(200000);
' t8 H# U. K7 L& c/ `. I- C% R( ` - SPI_WRITE_DRV8353(0x1400);) W4 B! h% q6 W% E! V
- SPI_WRITE_DRV8353(0x1b22);
- J8 G. C2 p" [: B - SPI_WRITE_DRV8353(0x2722);
/ f k6 F9 _$ J# o( z - SPI_WRITE_DRV8353(0x2b66);* o/ R- u" [, \0 h
- SPI_WRITE_DRV8353(0x3280);" M; i+ y) J6 C- D7 l
- Delay(100);! q, c+ Y" }% P3 t) I4 x$ F. v
复制代码
3 L7 j x% e3 N4 a) g读取芯片返回值
" i. R; E4 q. Z$ I1 Z. R# e- SPI_Read_DRV8353(0x9400);
5 e, Q* H% V. b - TIMP1=hspi1.Instance->DR;//取地址0x02# `% e) A8 r" ?3 H' ~
- SPI_Read_DRV8353(0x9800);
$ c9 |0 ~2 e! M+ o - TIMP2=hspi1.Instance->DR;//取地址0x03
2 v4 s9 l9 z) t9 N+ ^( ~- F( v - SPI_Read_DRV8353(0xA000);3 I0 g0 U) [- i6 S3 \" F
- TIMP3=hspi1.Instance->DR;//取地址0x04
% ?+ @2 u# A# m2 M9 q# U - SPI_Read_DRV8353(0xA800);
6 n! Z+ Q: s- ?% Q# Y* H2 @ - TIMP4=hspi1.Instance->DR;//取地址0x05
7 I9 [7 }. E% B& t - SPI_Read_DRV8353(0xB000);
! t: c; H3 E3 m& A& O6 X; r5 y! g) ? - TIMP5=hspi1.Instance->DR;//取地址0x06
% j9 c8 j+ Q/ k; O2 D2 }" f - : L2 X# N# Q8 I- @ _
- % [) }& g& k/ _6 _# l: z
复制代码 f0 Z$ s; _8 U" S- A4 G* t7 ?6 F
将返回值与寄存器表进行对应查看是否写入寄存器% k7 S" J" L& h. n- U- `! W' Z( q
' f# o# ~+ v+ @0 J. H; T& H4 i
+ i6 o& B6 A; w2 u2 a4 w
8 E$ P9 g- n3 F, V# I) @& T9 D
————————————————# c6 ^5 S( m# ?( [+ t
版权声明:超级馒头神
3 B" S, p% D% ?9 f' b
( U! z: W$ y4 k+ l& a6 p( @
6 w, Q4 {1 R/ n; b1 m! E: w6 H |