Digital Power Starter Kit 3 Firmware  DM330017-3, Rev.3.0
dsPIC33C Buck Converter Peak Current Mode Control Example
app_fault_monitor.c
1 /*
2  * @file app_fault_monitor.c
3  * Author: M91406
4  * @brief Fault monitor application layer source file
5  * Revision history:
6  */
7 
8 #include <stddef.h>
9 
10 #include "config/hal.h"
11 #include "config/apps.h"
12 
49 // Define fault objects
50 volatile struct FAULT_OBJECT_s fltobj_BuckUVLO;
51 volatile struct FAULT_OBJECT_s fltobj_BuckOVLO;
52 volatile struct FAULT_OBJECT_s fltobj_BuckOCP;
53 volatile struct FAULT_OBJECT_s fltobj_BuckRegErr;
54 
55 // Declare private function prototypes
56 volatile uint16_t __attribute__((always_inline)) uvlo_FaultInitialize(void);
57 volatile uint16_t __attribute__((always_inline)) ovlo_FaultInitialize(void);
58 volatile uint16_t __attribute__((always_inline)) ocp_FaultInitialize(void);
59 volatile uint16_t __attribute__((always_inline)) regerr_FaultInitialize(void);
60 
61 // Variables
62 volatile uint16_t FaultRecoveryCounter=0;
63 
64 
81 volatile uint16_t appFaultMonitor_Execute(void)
82 {
83  volatile uint16_t retval=1;
84  static bool pre_fault_active=false;
85 
86  // Call fault handler
91 
92  // Combine individual fault bits to a common fault indicator
93  buck.status.bits.fault_active = (bool) (
94  fltobj_BuckUVLO.Status.bits.FaultStatus |
95  fltobj_BuckOVLO.Status.bits.FaultStatus |
96  fltobj_BuckRegErr.Status.bits.FaultStatus |
97  fltobj_BuckOCP.Status.bits.FaultStatus
98  );
99 
100  // If system has recovered from a global fault condition,
101  // trigger fault recovery function
102  if ((pre_fault_active) && (!buck.status.bits.fault_active))
103  {
104  if (FaultRecoveryCounter++ < BUCK_FAULT_RESTART_CYCLES)
105  { retval = appPowerSupply_Resume(); } // Initiate restart attempt
106  else
107  { // Latch Fault Condition keeping power supply disabled
108  buck.status.bits.fault_active = true;
109  buck.status.bits.fault_latch = true;
110  FaultRecoveryCounter = BUCK_FAULT_RESTART_CYCLES;
111  }
112  }
113 
114  // If power supply controller passes POWER GOOD and reaches state ONLINE,
115  // reset restart cycle counter
116  if (buck.state_id.bits.opstate_id == BUCK_OPSTATE_ONLINE)
117  FaultRecoveryCounter = 0;
118 
119  // Track global fault bit transitions
120  pre_fault_active = buck.status.bits.fault_active;
121 
122 
123  return (retval);
124 }
125 
126 
139 volatile uint16_t appFaultMonitor_Initialize(void)
140 {
141  volatile uint16_t retval=1;
142 
143  // Initialize user fault objects
144  retval &= uvlo_FaultInitialize();
145  retval &= ovlo_FaultInitialize();
146  retval &= ocp_FaultInitialize();
147  retval &= regerr_FaultInitialize();
148 
149  return(retval);
150 }
151 
152 
166 volatile uint16_t appFaultMonitor_Dispose(void)
167 {
168  fltobj_BuckUVLO = fltObjectClear; // Delete Under Voltage Lock Out object
169  fltobj_BuckOVLO = fltObjectClear; // Delete Over Voltage Lock Out object
170  fltobj_BuckRegErr = fltObjectClear; // Delete Regulation Error object
171  fltobj_BuckOCP = fltObjectClear; // Delete Over Current Protection object
172 
173  return(1);
174 }
175 
176 
177 /* *********************************************************************************
178  * PRIVATE FUNCTIONS
179  * ********************************************************************************/
180 
181 
195 volatile uint16_t uvlo_FaultInitialize(void)
196 {
197  volatile uint16_t retval=1;
198 
199  // Initialize UVLO fault object
200  fltobj_BuckUVLO = fltObjectClear; // Pre-initialize fault object
201 
202  fltobj_BuckUVLO.SourceObject.ptrObject = &buck.data.v_in; // Set pointer to variable to monitor
203  fltobj_BuckUVLO.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
204  fltobj_BuckUVLO.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
205  fltobj_BuckUVLO.ReferenceObject.bitMask = 0xFFFF; // Clear pointer to "compare against" variable
206 
207  fltobj_BuckUVLO.Status.bits.CompareType = FLTCMP_LESS_THAN; // Select Compare-Type
208 
210  fltobj_BuckUVLO.TripResponse.eventThreshold = BUCK_UVLO_TDLY; // Set counter level at which a FAULT condition will be tripped
211  fltobj_BuckUVLO.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
212 
214  fltobj_BuckUVLO.RecoveryResponse.eventThreshold = BUCK_UVLO_RDLY; // Set counter level at which a FAULT condition will be cleared
215  fltobj_BuckUVLO.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
216 
217  fltobj_BuckUVLO.Counter = 0; // Clear fault event counter
218  fltobj_BuckUVLO.Status.bits.FaultActive = true; // Set fault condition flag (must be cleared by fault check)
219  fltobj_BuckUVLO.Status.bits.FaultStatus = true; // Set fault flag (must be cleared by fault check)
220  fltobj_BuckUVLO.Status.bits.Enabled = true; // Enable fault checks
221 
222  return(retval);
223 
224 }
225 
226 
240 volatile uint16_t ovlo_FaultInitialize(void)
241 {
242  volatile uint16_t retval=1;
243 
244  // Initialize OVLO fault object
245  fltobj_BuckOVLO = fltObjectClear; // Pre-initialize fault object
246 
247  fltobj_BuckOVLO.SourceObject.ptrObject = &buck.data.v_in; // Set pointer to variable to monitor
248  fltobj_BuckOVLO.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
249  fltobj_BuckOVLO.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
250  fltobj_BuckOVLO.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
251  fltobj_BuckOVLO.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
252 
254  fltobj_BuckOVLO.TripResponse.eventThreshold = BUCK_OVLO_TDLY; // Set counter level at which a FAULT condition will be tripped
255  fltobj_BuckOVLO.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
256 
258  fltobj_BuckOVLO.RecoveryResponse.eventThreshold = BUCK_OVLO_RDLY; // Set counter level at which a FAULT condition will be cleared
259  fltobj_BuckOVLO.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
260 
261  fltobj_BuckOVLO.Counter = 0; // Clear fault event counter
262  fltobj_BuckOVLO.Status.bits.FaultActive = true; // Set fault condition flag (must be cleared by fault check)
263  fltobj_BuckOVLO.Status.bits.FaultStatus = true; // Set fault flag (must be cleared by fault check)
264  fltobj_BuckOVLO.Status.bits.Enabled = true; // Enable fault checks
265 
266  return(retval);
267 
268 }
269 
270 
283 volatile uint16_t regerr_FaultInitialize(void)
284 {
285  volatile uint16_t retval=1;
286 
287  // Initialize regulation error fault object
288  fltobj_BuckRegErr = fltObjectClear; // Pre-initialize fault object
289 
290  fltobj_BuckRegErr.SourceObject.ptrObject = &buck.data.v_out; // Set pointer to variable to monitor
291  fltobj_BuckRegErr.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
292  fltobj_BuckRegErr.ReferenceObject.ptrObject = &buck.set_values.v_ref; // Set pointer to "compare against" variable
293  fltobj_BuckRegErr.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of Reference (no bit filter)
294  fltobj_BuckRegErr.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
295 
297  fltobj_BuckRegErr.TripResponse.eventThreshold = BUCK_REGERR_TDLY; // Set counter level at which a FAULT condition will be tripped
298  fltobj_BuckRegErr.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
299 
301  fltobj_BuckRegErr.RecoveryResponse.eventThreshold = BUCK_REGERR_RDLY; // Set counter level at which a FAULT condition will be cleared
302  fltobj_BuckRegErr.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
303 
304  fltobj_BuckRegErr.Counter = 0; // Clear fault event counter
305  fltobj_BuckRegErr.Status.bits.FaultActive = false; // Set fault condition flag (must be cleared by fault check)
306  fltobj_BuckRegErr.Status.bits.FaultStatus = false; // Set fault flag (must be cleared by fault check)
307  fltobj_BuckRegErr.Status.bits.Enabled = false; // Disable fault checks at startup
308 
309  return(retval);
310 
311 }
312 
313 
326 volatile uint16_t ocp_FaultInitialize(void)
327 {
328  volatile uint16_t retval=1;
329 
330  // Initialize OCP fault object
331  fltobj_BuckOCP = fltObjectClear; // Pre-initialize fault object
332 
333  fltobj_BuckOCP.SourceObject.ptrObject = &buck.data.i_out; // Set pointer to variable to monitor
334  fltobj_BuckOCP.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
335  fltobj_BuckOCP.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
336  fltobj_BuckOCP.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
337  fltobj_BuckOCP.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
338 
339  fltobj_BuckOCP.TripResponse.compareThreshold = BUCK_ISNS_OCL; // Set fault trip level
340  fltobj_BuckOCP.TripResponse.eventThreshold = BUCK_OCP_TDLY; // Set counter level at which a FAULT condition will be tripped
341  fltobj_BuckOCP.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
342 
344  fltobj_BuckOCP.RecoveryResponse.eventThreshold = BUCK_OCP_RDLY; // Set counter level at which a FAULT condition will be cleared
345  fltobj_BuckOCP.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
346 
347  fltobj_BuckOCP.Counter = 0; // Clear fault event counter
348  fltobj_BuckOCP.Status.bits.FaultActive = false; // Set fault condition flag (must be cleared by fault check)
349  fltobj_BuckOCP.Status.bits.FaultStatus = false; // Set fault flag (must be cleared by fault check)
350  fltobj_BuckOCP.Status.bits.Enabled = false; // Enable fault checks
351 
352  return(retval);
353 
354 }
355 
356 // end of file
#define BUCK_FAULT_RESTART_CYCLES
Maximum number of restart cycles: Fault state will be latched until CPU reset or power cycle.
#define BUCK_OCP_TDLY
over current protection trip Delay conversion macro
#define BUCK_UVLO_RDLY
under voltage lock out recovery delay conversion nacro
#define BUCK_OVLO_TDLY
over voltage lock out trip delay conversion nacro
#define BUCK_REGERR_RDLY
regulation error recovery delay conversion macro
#define BUCK_REGERR_TDLY
regulation error trip delay conversion macro
#define BUCK_OCP_RDLY
over current protection recovery delay conversion nacro
#define BUCK_OVLO_RDLY
over voltage lock out recovery delay conversion nacro
#define BUCK_UVLO_TDLY
Conversion Macros of Fault Response Timing Settings.
#define BUCK_VIN_UVLO_TRIP
Under Voltage LOck Out voltage.
#define BUCK_VIN_UVLO_RELEASE
Under Voltage LOck Out voltage.
#define BUCK_VIN_OVLO_RELEASE
Over Voltage LOck Out voltage.
#define BUCK_VIN_OVLO_TRIP
Over Voltage LOck Out voltage.
#define BUCK_VOUT_DEV_RELEASE
Macro calculating the integer number equivalent of the maximum allowed output voltage deviation given...
#define BUCK_VOUT_DEV_TRIP
Macro calculating the integer number equivalent of the maximum allowed output voltage deviation given...
#define BUCK_ISNS_OCL
Over Current Limit.
#define BUCK_ISNS_OCL_RELEASE
Over Current Release Level.
volatile uint16_t appFaultMonitor_Initialize(void)
Initialization of user-defined fault objects.
volatile uint16_t appFaultMonitor_Execute(void)
Application wide fault object monitoring routine.
volatile uint16_t appFaultMonitor_Dispose(void)
Function clearing all fault object settings.
volatile struct FAULT_OBJECT_s fltobj_BuckUVLO
Under Voltage Lock Out Fault Object.
volatile struct FAULT_OBJECT_s fltobj_BuckOCP
Over Current Protection Fault Object.
volatile struct FAULT_OBJECT_s fltobj_BuckOVLO
Over Voltage Lock Out Fault Object.
volatile struct FAULT_OBJECT_s fltobj_BuckRegErr
Regulation Error Fault Object.
volatile uint16_t ocp_FaultInitialize(void)
Initializes the user-defined fault objects for overcurrent protection.
volatile uint16_t regerr_FaultInitialize(void)
Initializes the user-defined fault objects for regulation error.
volatile uint16_t uvlo_FaultInitialize(void)
Initializes the user-defined fault objects for under-voltage lockout.
volatile uint16_t ovlo_FaultInitialize(void)
Initializes the user-defined fault objects for overvoltage lockout.
volatile uint16_t drv_FaultHandler_CheckObject(volatile struct FAULT_OBJECT_s *fltObject)
Check current fault status of a user-defined fault object.
volatile struct FAULT_OBJECT_s fltObjectClear
Clears the fault objects.
volatile uint16_t appPowerSupply_Resume(void)
This function resumes the power supply operation.
volatile uint16_t appPowerSupply_Suspend(void)
This function stops the power supply operation.
volatile struct BUCK_CONVERTER_s buck
Global data object for a BUCK CONVERTER.
struct FLT_OBJECT_STATUS_s::@111::@113 bits
volatile uint16_t * ptrObject
Pointer to register or variable which should be monitored.
volatile uint16_t bitMask
Bit mask will be &-ed with source as value (use 0xFFFF for full value comparison)
volatile uint16_t(* ptrResponseFunction)(void)
pointer to a user-defined function called when a defined fault monitoring event is detected
volatile uint16_t eventThreshold
Bit mask will be &-ed with source as value (use 0xFFFF for full value comparison)
volatile uint16_t compareThreshold
Signal level at which the fault condition will be detected.
This data structure is a collection of data structures for fault handling.
volatile struct FLT_OBJECT_STATUS_s Status
Status word of this fault object.
volatile struct FLT_COMPARE_OBJECT_s ReferenceObject
Reference object the source should be compared with.
volatile uint16_t Counter
Fault event counter (controlled by FAULT HANDLER)
volatile struct FLT_EVENT_RESPONSE_s TripResponse
Settings defining the fault trip event.
volatile struct FLT_COMPARE_OBJECT_s SourceObject
Object which should be monitored.
volatile struct FLT_EVENT_RESPONSE_s RecoveryResponse
Settings defining the fault recovery event.
struct BUCK_CONVERTER_STATUS_s::@126::@128 bits
data structure for single bit addressing operations
struct BUCK_STATE_ID_s::@129::@131 bits
volatile uint16_t v_out
BUCK output voltage.
volatile uint16_t i_out
BUCK common output current.
volatile uint16_t v_in
BUCK input voltage.
volatile uint16_t v_ref
User reference setting used to control the power converter controller.
volatile struct BUCK_STATE_ID_s state_id
BUCK state machine operating state ID.
volatile struct BUCK_CONVERTER_STATUS_s status
BUCK operation status bits.
volatile struct BUCK_CONVERTER_DATA_s data
BUCK runtime data.
volatile struct BUCK_CONVERTER_SETTINGS_s set_values
Control field for global access to references.