UUtzinger_DRV8704  0.1.1
Arduino library for the DRV8704 dual H-bridge gate driver
drv8704_types.h
Go to the documentation of this file.
1 
6 #ifndef DRV8704_TYPES_H
7 #define DRV8704_TYPES_H
8 
9 #include <stdint.h>
10 
11 #include "drv8704_defs.h"
12 
16 enum class SenseGain : uint8_t {
17  Gain5VperV = 0,
21 };
22 
26 enum class DeadTime : uint8_t {
27  Ns410 = 0,
28  Ns460,
29  Ns670,
30  Ns880
31 };
32 
36 enum class DecayMode : uint8_t {
37  Slow = 0,
38  Fast = 2,
39  Mixed = 3,
40  AutoMixed = 5
41 };
42 
46 enum class OcpThreshold : uint8_t {
47  MilliVolts250 = 0,
51 };
52 
56 enum class OcpDeglitch : uint8_t {
57  Us1p05 = 0,
58  Us2p10,
59  Us4p20,
60  Us8p40
61 };
62 
66 enum class GateDriveTime : uint8_t {
67  Ns263 = 0,
68  Ns525,
69  Ns1050,
70  Ns2100
71 };
72 
76 enum class GateDriveSourceCurrent : uint8_t {
77  MilliAmps50 = 0,
81 };
82 
86 enum class GateDriveSinkCurrent : uint8_t {
87  MilliAmps100 = 0,
91 };
92 
96 enum class BridgeId : uint8_t {
97  A = 0,
98  B
99 };
100 
104 enum class BridgeMode : uint8_t {
105  Coast = 0,
106  Forward,
107  Reverse,
108  Brake
109 };
110 
114 enum class BridgeRuntimeState : uint8_t {
115  Coast = 0,
116  Brake,
117  CurrentDrive,
119 };
120 
124 enum class Direction : uint8_t {
125  Forward = 0,
126  Reverse
127 };
128 
132 enum class PwmBackendType : uint8_t {
133  None = 0,
135  Esp32Ledc,
137  StmHardware,
139 };
140 
144 enum class CurrentModePreset : uint8_t {
145  Heater = 0,
150 };
151 
155 enum class FaultBit : uint8_t {
156  Ots = 0,
157  Aocp,
158  Bocp,
159  Apdf,
160  Bpdf,
161  Uvlo
162 };
163 
167 enum class RegisterAddress : uint8_t {
168  Ctrl = 0x00,
169  Torque = 0x01,
170  Off = 0x02,
171  Blank = 0x03,
172  Decay = 0x04,
173  Reserved = 0x05,
174  Drive = 0x06,
175  Status = 0x07
176 };
177 
181 struct DRV8704Pins {
182  uint8_t csPin;
183  int8_t sleepPin;
184  int8_t resetPin;
185  int8_t faultPin;
186  int8_t ain1Pin;
187  int8_t ain2Pin;
188  int8_t bin1Pin;
189  int8_t bin2Pin;
190 
192  : csPin(0),
193  sleepPin(-1),
194  resetPin(-1),
195  faultPin(-1),
196  ain1Pin(-1),
197  ain2Pin(-1),
198  bin1Pin(-1),
199  bin2Pin(-1) {}
200 };
201 
212 
220 };
221 
226  bool enabled;
229  uint8_t torque;
230  uint8_t offTime;
231  uint8_t blankTime;
233  uint8_t decayTime;
235 
237  : enabled(true),
240  torque(0xFF),
241  offTime(0x30),
242  blankTime(0x80),
244  decayTime(0x10) {}
245 };
246 
252  uint8_t offTime;
253  uint8_t blankTime;
255  uint8_t decayTime;
257 
260  offTime(0x30),
261  blankTime(0x80),
263  decayTime(0x10),
264  deadTime(DeadTime::Ns460) {}
265 };
266 
275 
277  : bridge(BridgeId::A),
280  speedPercent(0.0f) {}
281 };
282 
287  bool enabled;
288  bool valid;
291  float shuntOhmsA;
292  float shuntOhmsB;
294  uint8_t torqueDac;
300  uint32_t pwmFrequencyHz;
301 
303  : enabled(false),
304  valid(false),
306  referenceShuntOhms(0.0f),
307  shuntOhmsA(0.0f),
308  shuntOhmsB(0.0f),
310  torqueDac(0U),
311  ampsPerTorqueCount(0.0f),
316  pwmFrequencyHz(0UL) {}
317 };
318 
323  uint32_t frequencyHz;
325 
329 };
330 
335  bool available;
339  uint8_t resolutionBits;
340  uint32_t dutySteps;
342 
344  : available(false),
347  achievedFrequencyHz(0UL),
348  resolutionBits(0U),
349  dutySteps(0UL),
351 };
352 
357  uint16_t raw;
364 
366  : raw(0),
367  overTemperature(false),
368  overCurrentA(false),
369  overCurrentB(false),
370  predriverFaultA(false),
371  predriverFaultB(false),
372  undervoltage(false) {}
373 };
374 
379  bool spiOk;
384  uint8_t defaultMatches;
385  uint16_t statusRegister;
387 
389  : spiOk(false),
390  initialized(false),
391  faultPinActive(false),
392  defaultsMatch(false),
393  writeReadbackOk(false),
394  defaultMatches(0),
395  statusRegister(0),
396  faultPresent(false) {}
397 };
398 
399 #endif // DRV8704_TYPES_H
Constants, register addresses, masks, and defaults for the DRV8704 driver.
#define DRV8704_DEFAULT_PWM_RES_BITS
Definition: drv8704_defs.h:23
#define DRV8704_DEFAULT_INPUT_PWM_HZ
Definition: drv8704_defs.h:22
GateDriveSourceCurrent
Supported source current values for the predriver.
Definition: drv8704_types.h:76
FaultBit
Selectable fault bits in the STATUS register.
Definition: drv8704_types.h:155
OcpDeglitch
Supported OCP deglitch durations.
Definition: drv8704_types.h:56
Direction
High-level direction selector for current mode and PWM mode.
Definition: drv8704_types.h:124
BridgeRuntimeState
High-level runtime state for one bridge.
Definition: drv8704_types.h:114
PwmBackendType
Supported platform PWM backend families.
Definition: drv8704_types.h:132
CurrentModePreset
Predefined load presets for current-mode timing and decay behavior.
Definition: drv8704_types.h:144
RegisterAddress
Supported register addresses.
Definition: drv8704_types.h:167
GateDriveTime
Supported gate-drive timing values.
Definition: drv8704_types.h:66
GateDriveSinkCurrent
Supported sink current values for the predriver.
Definition: drv8704_types.h:86
DecayMode
Supported current-decay modes.
Definition: drv8704_types.h:36
OcpThreshold
Supported overcurrent thresholds.
Definition: drv8704_types.h:46
BridgeId
Bridge selector.
Definition: drv8704_types.h:96
DeadTime
Supported dead-time settings.
Definition: drv8704_types.h:26
SenseGain
Supported sense amplifier gain settings.
Definition: drv8704_types.h:16
BridgeMode
Runtime bridge command.
Definition: drv8704_types.h:104
Reported direction and runtime mode of one bridge.
Definition: drv8704_types.h:270
BridgeId bridge
Definition: drv8704_types.h:271
DRV8704BridgeState()
Definition: drv8704_types.h:276
BridgeRuntimeState runtimeState
Definition: drv8704_types.h:273
Direction direction
Definition: drv8704_types.h:272
float speedPercent
Definition: drv8704_types.h:274
High-level DRV8704 configuration snapshot.
Definition: drv8704_types.h:225
uint8_t offTime
Definition: drv8704_types.h:230
uint8_t torque
Definition: drv8704_types.h:229
bool enabled
Definition: drv8704_types.h:226
uint8_t blankTime
Definition: drv8704_types.h:231
GateDriveConfig gateDrive
Definition: drv8704_types.h:234
SenseGain senseGain
Definition: drv8704_types.h:227
DecayMode decayMode
Definition: drv8704_types.h:232
DeadTime deadTime
Definition: drv8704_types.h:228
uint8_t decayTime
Definition: drv8704_types.h:233
DRV8704Config()
Definition: drv8704_types.h:236
Derived chip-global current-limit settings and per-bridge consequences.
Definition: drv8704_types.h:286
float shuntOhmsB
Definition: drv8704_types.h:292
bool valid
Definition: drv8704_types.h:288
float referenceShuntOhms
Definition: drv8704_types.h:290
DRV8704CurrentLimitResult()
Definition: drv8704_types.h:302
uint32_t pwmFrequencyHz
Definition: drv8704_types.h:300
uint8_t torqueDac
Definition: drv8704_types.h:294
bool enabled
Definition: drv8704_types.h:287
float shuntOhmsA
Definition: drv8704_types.h:291
float ampsPerTorqueCount
Definition: drv8704_types.h:295
float appliedCurrentLimitAmpsB
Definition: drv8704_types.h:298
float appliedCurrentLimitAmpsA
Definition: drv8704_types.h:297
CurrentModePreset preset
Definition: drv8704_types.h:299
float achievableMaxCurrentAmps
Definition: drv8704_types.h:296
SenseGain selectedGain
Definition: drv8704_types.h:293
float requestedCurrentLimitAmps
Definition: drv8704_types.h:289
Timing and decay recommendation associated with a current-mode preset.
Definition: drv8704_types.h:250
CurrentModePreset preset
Definition: drv8704_types.h:251
uint8_t offTime
Definition: drv8704_types.h:252
uint8_t decayTime
Definition: drv8704_types.h:255
DeadTime deadTime
Definition: drv8704_types.h:256
DRV8704CurrentPresetConfig()
Definition: drv8704_types.h:258
DecayMode decayMode
Definition: drv8704_types.h:254
uint8_t blankTime
Definition: drv8704_types.h:253
Minimal transport/bring-up health result.
Definition: drv8704_types.h:378
bool faultPinActive
Definition: drv8704_types.h:381
bool initialized
Definition: drv8704_types.h:380
bool writeReadbackOk
Definition: drv8704_types.h:383
DRV8704HealthCheck()
Definition: drv8704_types.h:388
bool faultPresent
Definition: drv8704_types.h:386
bool defaultsMatch
Definition: drv8704_types.h:382
bool spiOk
Definition: drv8704_types.h:379
uint8_t defaultMatches
Definition: drv8704_types.h:384
uint16_t statusRegister
Definition: drv8704_types.h:385
Pin assignment bundle for a DRV8704 instance.
Definition: drv8704_types.h:181
int8_t ain2Pin
Definition: drv8704_types.h:187
DRV8704Pins()
Definition: drv8704_types.h:191
int8_t bin1Pin
Definition: drv8704_types.h:188
int8_t faultPin
Definition: drv8704_types.h:185
int8_t resetPin
Definition: drv8704_types.h:184
int8_t sleepPin
Definition: drv8704_types.h:183
int8_t bin2Pin
Definition: drv8704_types.h:189
uint8_t csPin
Definition: drv8704_types.h:182
int8_t ain1Pin
Definition: drv8704_types.h:186
Resolved platform PWM capabilities for the active backend.
Definition: drv8704_types.h:334
uint32_t dutySteps
Definition: drv8704_types.h:340
PwmBackendType backendType
Definition: drv8704_types.h:336
uint32_t requestedFrequencyHz
Definition: drv8704_types.h:337
uint8_t resolutionBits
Definition: drv8704_types.h:339
float smallestDutyIncrementPercent
Definition: drv8704_types.h:341
bool available
Definition: drv8704_types.h:335
DRV8704PwmCapability()
Definition: drv8704_types.h:343
uint32_t achievedFrequencyHz
Definition: drv8704_types.h:338
Requested PWM generator settings.
Definition: drv8704_types.h:322
DRV8704PwmConfig()
Definition: drv8704_types.h:326
uint32_t frequencyHz
Definition: drv8704_types.h:323
uint8_t preferredResolutionBits
Definition: drv8704_types.h:324
Decoded device status and fault state.
Definition: drv8704_types.h:356
bool overCurrentB
Definition: drv8704_types.h:360
bool predriverFaultB
Definition: drv8704_types.h:362
bool undervoltage
Definition: drv8704_types.h:363
bool overTemperature
Definition: drv8704_types.h:358
bool overCurrentA
Definition: drv8704_types.h:359
uint16_t raw
Definition: drv8704_types.h:357
DRV8704Status()
Definition: drv8704_types.h:365
bool predriverFaultA
Definition: drv8704_types.h:361
Gate-drive configuration group.
Definition: drv8704_types.h:205
GateDriveSourceCurrent iDriveP
Definition: drv8704_types.h:211
OcpThreshold ocpThreshold
Definition: drv8704_types.h:206
GateDriveConfig()
Definition: drv8704_types.h:213
OcpDeglitch ocpDeglitch
Definition: drv8704_types.h:207
GateDriveSinkCurrent iDriveN
Definition: drv8704_types.h:210
GateDriveTime tDriveP
Definition: drv8704_types.h:209
GateDriveTime tDriveN
Definition: drv8704_types.h:208