75#include "max22200_version.h"
145 explicit MAX22200(SpiType &spi_interface);
518 float debounce_ms,
ChopFreq chop_freq);
863 bool slew_rate_control_enabled,
DutyLimits &limits);
924 uint32_t hold_ma,
float hit_time_ms,
927 bool slew_rate_control_enabled =
false,
928 bool open_load_detection_enabled =
false,
929 bool plunger_movement_detection_enabled =
false,
930 bool hit_current_check_enabled =
false);
951 float hold_duty_percent,
float hit_time_ms,
954 bool slew_rate_control_enabled =
false,
955 bool open_load_detection_enabled =
false,
956 bool plunger_movement_detection_enabled =
false,
957 bool hit_current_check_enabled =
false);
976 return HF_MAX22200_VERSION_STRING;
981 return HF_MAX22200_VERSION_MAJOR;
986 return HF_MAX22200_VERSION_MINOR;
991 return HF_MAX22200_VERSION_PATCH;
995 SpiType &spi_interface_;
998 mutable uint8_t last_fault_byte_;
1003 void *fault_user_data_;
1005 void *state_user_data_;
1008 void notifyFaults(
const FaultStatus &faults)
const;
1010 void notifyStatusFaults(
const StatusConfig &status)
const;
1042 DriverStatus writeCommandRegister(uint8_t bank,
bool is_write,
1043 bool mode8 =
false)
const;
1063 DriverStatus readData32WithTx(
const uint8_t tx[4], uint32_t &value)
const;
1080 DriverStatus writeReg32(uint8_t bank, uint32_t value)
const;
1085 DriverStatus readReg32(uint8_t bank, uint32_t &value)
const;
1090 DriverStatus writeReg8(uint8_t bank, uint8_t value)
const;
1095 DriverStatus readReg8(uint8_t bank, uint8_t &value)
const;
1098 void updateStatistics(
bool success)
const;
1106 return HF_MAX22200_VERSION_STRING;
1113#if __has_include("../src/max22200.ipp")
1114#include "../src/max22200.ipp"
Main driver class for MAX22200 IC.
Definition max22200.hpp:133
DriverStatus ReadRegister8(uint8_t bank, uint8_t &value) const
Read 8-bit MSB of a register (fast 8-bit mode)
Definition max22200.ipp:569
DriverStatus SetChannelEnabled(uint8_t channel, bool enable)
Set a channel on or off (convenience when toggling from a variable)
Definition max22200.ipp:281
DriverStatus DisableDevice()
Disable device (ENABLE pin low); low-power state.
Definition max22200.ipp:528
DriverStatus SetDeviceEnable(bool enable)
Set ENABLE pin state (true = on, false = off)
Definition max22200.ipp:533
MAX22200(const MAX22200 &)=delete
~MAX22200()
Destructor — calls Deinitialize() if initialized.
Definition max22200.ipp:36
DriverStatus WriteRegister8(uint8_t bank, uint8_t value)
Write 8-bit MSB of a register (fast 8-bit mode)
Definition max22200.ipp:575
DriverStatistics GetStatistics() const
Get accumulated driver transfer statistics.
Definition max22200.ipp:589
void SetBoardConfig(const BoardConfig &config)
Set board configuration (IFS, max current, max duty)
Definition max22200.ipp:816
bool IsInitialized() const
Check if driver completed Initialize() successfully.
Definition max22200.ipp:158
DriverStatus GetFaultPinState(bool &fault_active) const
Read nFAULT pin state (true = fault active, false = no fault)
Definition max22200.ipp:544
DriverStatus EnableDevice()
Enable device (ENABLE pin high); SPI and channels can be used.
Definition max22200.ipp:523
MAX22200 & operator=(MAX22200 &&)=delete
DriverStatus SetFullBridgeState(uint8_t pair_index, FullBridgeState state)
Set full-bridge state for a channel pair (datasheet Table 7)
Definition max22200.ipp:319
DriverStatus SetHoldDutyPercent(uint8_t channel, float percent)
Set HOLD duty cycle in percent (VDR mode)
Definition max22200.ipp:1046
MAX22200 & operator=(const MAX22200 &)=delete
static DriverStatus GetDutyLimits(bool master_clock_80khz, ChopFreq chop_freq, bool slew_rate_control_enabled, DutyLimits &limits)
Get duty cycle limits (δMIN, δMAX) for a configuration.
Definition max22200.ipp:1133
DriverStatus ReadRegister32(uint8_t bank, uint32_t &value) const
Read a 32-bit register by bank address (debug/advanced)
Definition max22200.ipp:558
DriverStatus ClearChannelFaults(uint8_t channel_mask, FaultStatus *out_faults=nullptr) const
Clear fault flags for selected channels only (MAX22200A)
Definition max22200.ipp:372
void SetFaultCallback(FaultCallback callback, void *user_data)
Register a fault event callback.
Definition max22200.ipp:631
DriverStatus ReadFaultFlags(StatusConfig &status) const
Read fault flags from STATUS register (byte 0, bits 7:1)
Definition max22200.ipp:404
DriverStatus Deinitialize()
Deinitialize — disable channels, ACTIVE=0, ENABLE low.
Definition max22200.ipp:136
DriverStatus ClearAllFaults()
Clear all fault flags (read FAULT register and discard)
Definition max22200.ipp:366
DriverStatus SetHoldCurrentA(uint8_t channel, float amps)
Set HOLD current in Amps (CDR mode)
Definition max22200.ipp:888
DriverStatus GetHitCurrentMa(uint8_t channel, uint32_t &ma) const
Get HIT current in milliamps (CDR mode)
Definition max22200.ipp:923
DriverStatus GetChannelConfig(uint8_t channel, ChannelConfig &config) const
Read a channel's configuration.
Definition max22200.ipp:223
DriverStatus WriteDpmConfig(const DpmConfig &config)
Write DPM algorithm configuration (CFG_DPM register)
Definition max22200.ipp:431
MAX22200(MAX22200 &&)=default
DriverStatus ConfigureAllChannels(const ChannelConfigArray &configs)
Configure all eight channels (CFG_CH0 through CFG_CH7)
Definition max22200.ipp:241
DriverStatus GetAllChannelConfigs(ChannelConfigArray &configs) const
Read configuration for all eight channels.
Definition max22200.ipp:254
static bool IsValidChannel(uint8_t channel)
Check whether channel is a valid MAX22200 channel index.
Definition max22200.hpp:968
DriverStatus DisableAllChannels()
Turn off all channels.
Definition max22200.ipp:300
DriverStatus WriteStatus(const StatusConfig &status)
Write the STATUS register (writable bits only)
Definition max22200.ipp:182
static constexpr uint8_t GetDriverVersionPatch() noexcept
Get the compiled driver patch version number.
Definition max22200.hpp:990
DriverStatus SetHoldCurrentPercent(uint8_t channel, float percent)
Set HOLD current as percentage of IFS (CDR mode)
Definition max22200.ipp:909
DriverStatus GetHoldDutyPercent(uint8_t channel, float &percent) const
Get HOLD duty cycle in percent (VDR mode)
Definition max22200.ipp:1100
DriverStatus ConfigureDpm(float start_current_ma, float dip_threshold_ma, float debounce_ms)
Configure DPM in real units (easy API)
Definition max22200.ipp:458
DriverStatus SetHitCurrentA(uint8_t channel, float amps)
Set HIT current in Amps (CDR mode)
Definition max22200.ipp:883
DriverStatus ReadDpmConfig(DpmConfig &config) const
Read DPM algorithm configuration (CFG_DPM register)
Definition max22200.ipp:420
static constexpr uint8_t GetDriverVersionMinor() noexcept
Get the compiled driver minor version number.
Definition max22200.hpp:985
DriverStatus DisableChannel(uint8_t channel)
Turn off a channel (set ONCHx = 0)
Definition max22200.ipp:276
void ResetStatistics()
Reset all statistics counters to zero.
Definition max22200.ipp:594
DriverStatus SetHitCurrentMa(uint8_t channel, uint32_t ma)
Set HIT current in milliamps (CDR mode)
Definition max22200.ipp:830
DriverStatus SetChannelsOn(uint8_t channel_mask)
Set which channels are on (fast multi-channel update)
Definition max22200.ipp:311
BoardConfig GetBoardConfig() const
Get current board configuration.
Definition max22200.ipp:821
DriverStatus WriteRegister32(uint8_t bank, uint32_t value)
Write a 32-bit register by bank address (debug/advanced)
Definition max22200.ipp:564
DriverStatus SetHitDutyPercent(uint8_t channel, float percent)
Set HIT duty cycle in percent (VDR mode)
Definition max22200.ipp:1007
static constexpr const char * GetDriverVersion() noexcept
Get the compiled driver version string.
Definition max22200.hpp:975
DriverStatus ReadFaultRegisterSelectiveClear(uint8_t ocp_mask, uint8_t hhf_mask, uint8_t olf_mask, uint8_t dpm_mask, FaultStatus &faults) const
[Advanced] Read FAULT register with per-type selective clear (MAX22200A)
Definition max22200.ipp:384
DriverStatus ConfigureChannelCdr(uint8_t channel, uint32_t hit_ma, uint32_t hold_ma, float hit_time_ms, SideMode side_mode=SideMode::LOW_SIDE, ChopFreq chop_freq=ChopFreq::FMAIN_DIV4, bool slew_rate_control_enabled=false, bool open_load_detection_enabled=false, bool plunger_movement_detection_enabled=false, bool hit_current_check_enabled=false)
Configure channel in real units (CDR mode)
Definition max22200.ipp:1237
DriverStatus SetDpmEnabledChannels(uint8_t channel_mask)
Enable or disable DPM (plunger movement detection) on selected channels.
Definition max22200.ipp:438
DriverStatus GetHoldCurrentMa(uint8_t channel, uint32_t &ma) const
Get HOLD current in milliamps (CDR mode)
Definition max22200.ipp:941
DriverStatus GetHitDutyPercent(uint8_t channel, float &percent) const
Get HIT duty cycle in percent (VDR mode)
Definition max22200.ipp:1081
DriverStatus EnableChannel(uint8_t channel)
Turn on a channel (set ONCHx = 1)
Definition max22200.ipp:271
DriverStatus GetHoldCurrentPercent(uint8_t channel, float &percent) const
Get HOLD current as percentage of IFS (CDR mode)
Definition max22200.ipp:981
DriverStatus SetHoldCurrentMa(uint8_t channel, uint32_t ma)
Set HOLD current in milliamps (CDR mode)
Definition max22200.ipp:857
DriverStatus ConfigureChannel(uint8_t channel, const ChannelConfig &config)
Configure a channel (write full 32-bit CFG_CHx register)
Definition max22200.ipp:196
static constexpr uint8_t GetDriverVersionMajor() noexcept
Get the compiled driver major version number.
Definition max22200.hpp:980
DriverStatus GetHitTimeMs(uint8_t channel, float &ms) const
Get HIT time in milliseconds.
Definition max22200.ipp:1215
void SetStateChangeCallback(StateChangeCallback callback, void *user_data)
Register a channel state-change callback (stored for application use)
Definition max22200.ipp:638
DriverStatus GetHitCurrentPercent(uint8_t channel, float &percent) const
Get HIT current as percentage of IFS (CDR mode)
Definition max22200.ipp:959
DriverStatus SetHitCurrentPercent(uint8_t channel, float percent)
Set HIT current as percentage of IFS (CDR mode)
Definition max22200.ipp:893
DriverStatus SetHitTimeMs(uint8_t channel, float ms)
Set HIT time in milliseconds.
Definition max22200.ipp:1187
DriverStatus Initialize()
Initialize the driver per datasheet flowchart (Figure 6)
Definition max22200.ipp:47
DriverStatus ReadFaultRegister(FaultStatus &faults) const
Read per-channel fault register (FAULT)
Definition max22200.ipp:354
DriverStatus ClearFaultFlags()
Clear STATUS fault flags by reading the STATUS register.
Definition max22200.ipp:409
DriverStatus SetAllChannelsEnabled(bool enable)
Set all channels on or off at once (convenience when toggling from a variable)
Definition max22200.ipp:305
DriverStatus ConfigureChannelVdr(uint8_t channel, float hit_duty_percent, float hold_duty_percent, float hit_time_ms, SideMode side_mode=SideMode::LOW_SIDE, ChopFreq chop_freq=ChopFreq::FMAIN_DIV4, bool slew_rate_control_enabled=false, bool open_load_detection_enabled=false, bool plunger_movement_detection_enabled=false, bool hit_current_check_enabled=false)
Configure channel in real units (VDR mode)
Definition max22200.ipp:1273
uint8_t GetLastFaultByte() const
Get last fault flags byte received from Command Register write.
Definition max22200.ipp:580
DriverStatus EnableAllChannels()
Turn on all channels.
Definition max22200.ipp:295
DriverStatus ReadStatus(StatusConfig &status) const
Read the full 32-bit STATUS register.
Definition max22200.ipp:167
Template implementation for MAX22200 driver.
Register definitions and constants for MAX22200 IC.
CRTP-based template interface for SPI communication.
Type definitions and structures for MAX22200 driver.
Definition max22200.hpp:78
std::array< ChannelConfig, NUM_CHANNELS_ > ChannelConfigArray
Array type for channel configurations.
Definition max22200_types.hpp:1035
void(*)(uint8_t channel, FaultType fault_type, void *user_data) FaultCallback
Callback function type for fault events.
Definition max22200_types.hpp:1048
SideMode
High-side / Low-side selection (HSnLS bit in CFG_CHx[6])
Definition max22200_types.hpp:123
@ LOW_SIDE
Low-side driver (HSnLS = 0) — supports CDR and VDR.
DriverStatus
Driver operation result codes.
Definition max22200_types.hpp:985
FullBridgeState
Full-bridge state for a channel pair (datasheet Table 7)
Definition max22200_types.hpp:973
void(*)(uint8_t channel, ChannelState old_state, ChannelState new_state, void *user_data) StateChangeCallback
Callback function type for channel state changes.
Definition max22200_types.hpp:1061
const char * GetDriverVersion() noexcept
Get the compiled driver version string (namespace-level convenience)
Definition max22200.hpp:1105
ChopFreq
Chopping frequency setting (FREQ_CFG bits in CFG_CHx[5:4])
Definition max22200_types.hpp:211
@ FMAIN_DIV4
FreqMain / 4 (fCHOP = 25kHz if FREQM=0, 20kHz if FREQM=1). Valid with SRC=1.
constexpr uint8_t NUM_CHANNELS_
Number of channels on the MAX22200.
Definition max22200_registers.hpp:60
Board/scale configuration for unit-based APIs.
Definition max22200_types.hpp:1089
Channel configuration structure.
Definition max22200_types.hpp:402
DPM (Detection of Plunger Movement) algorithm configuration.
Definition max22200_types.hpp:940
Driver runtime statistics.
Definition max22200_types.hpp:1165
Duty cycle limits (δMIN, δMAX) for a given configuration.
Definition max22200_types.hpp:1136
Per-channel fault information from FAULT register (0x09)
Definition max22200_types.hpp:859
STATUS register structure.
Definition max22200_types.hpp:683