Bar Logo 4kW dsPIC33C PSFB DC-DC DA (Part-No. )
 
Content
     
Loading...
Searching...
No Matches
fault.c
Go to the documentation of this file.
1
9#include "xc.h"
10#include <stdbool.h>
11#include <stddef.h>
12
13//#include "cmp/cmp1.h"
14#include "cmp/cmp3.h"
15#include "pwm_hs/pwm.h"
16#include "system/pins.h"
17
18//#include "config/macros.h"
19#include "device/device.h"
20#include "pwrctrl/pwrctrl.h"
21#include "fault_common.h"
22#include "fault.h"
24
25#include "pwrctrl/pwrctrl_pwm.h"
26
27//defining macros here for now
28// #define VPRI_OV_THRES_TRIG_V 890
29// #define VPRI_OV_THRES_CLEAR_V 800
30// #define VPRI_UV_THRES_TRIG_V 250 // TODO::sys Default 400V
31// #define VPRI_UV_THRES_CLEAR_V 240 // TODO::sys Default 390V
32
33// #define VPRI_OV_THRES_TRIG_ADC (((VPRI_OV_THRES_TRIG_V) * 4.329) + 205)
34// #define VPRI_UV_THRES_TRIG_ADC (((VPRI_UV_THRES_TRIG_V) * 4.329) + 205)
35// #define VPRI_OV_THRES_CLEAR_ADC (((VPRI_OV_THRES_CLEAR_V) * 4.329) + 205)
36// #define VPRI_UV_THRES_CLEAR_ADC (((VPRI_UV_THRES_CLEAR_V) * 4.329) + 205)
37
38// #define VSEC_OV_THRES_TRIG_V 18
39// #define VSEC_OV_THRES_CLEAR_V 11
40
41// #define VSEC_UV_THRES_TRIG_V 4
42// #define VSEC_UV_THRES_CLEAR_V 6
43
44// #define VSEC_OV_THRES_TRIG_ADC ((VSEC_OV_THRES_TRIG_V) * 191.131)
45// #define VSEC_OV_THRES_CLEAR_ADC ((VPRI_OV_THRES_CLEAR_V) * 191.131)
46// #define VSEC_UV_THRES_TRIG_ADC ((VSEC_UV_THRES_TRIG_V) * 191.131)
47// #define VSEC_UV_THRES_CLEAR_ADC ((VPRI_UV_THRES_CLEAR_V) * 191.131)
48
49// #define ISEC_OC_THRES_TRIG_A 210
50// #define ISEC_OC_THRES_CLEAR_A 180
51
52// #define ISEC_OC_THRES_TRIG_ADC 3370 // corrsesponds to 220 amps
53// #define ISEC_OC_THRES_CLEAR_ADC 3270
54
55// #define FAULT_VPRI_OV true
56// #define FAULT_VPRI_UV true
57// #define FAULT_VSEC_OV true
58// #define FAULT_VSEC_UV true
59
60// #define FAULT_ISEC_OC true
61// #define FAULT_PS_OTP false
62// #define FAULT_SHORT_CCT false
63// #define FAULT_VRAIL_5V false
64// #define LOAD_DISCONNECT false
65
66
67
68// PRIVATE FUNCTIONS
70bool loadDisconnect = false;
71
72
73
82{
83 // // Initialize Primary Over Current Protection
84 // FAULT_Init(&psfb_ptr->Fault.Object.IPrimaryOCP, IPRI_OC_THRES_TRIG,
85 // IPRI_OC_THRES_CLEAR, IPRI_OC_T_BLANK_TRIG, IPRI_OC_T_BLANK_CLEAR);
86
87 // Initialize Secondary Over Current Protection
88 FAULT_Init(&psfb_ptr->Fault.Object.ISecondaryOCP, ISEC_OC_THRES_TRIG,
89 ISEC_OC_THRES_CLEAR, ISEC_OC_T_BLANK_TRIG, ISEC_OC_T_BLANK_CLEAR);
90
91 // Initialize Primary Over Voltage Protection
92 FAULT_Init(&psfb_ptr->Fault.Object.VPrimaryOVP, VPRI_OV_THRES_TRIG,
93 VPRI_OV_THRES_CLEAR, VPRI_OV_T_BLANK_TRIG, VPRI_OV_T_BLANK_CLEAR);
94
95 // Initialize Primary Under Voltage Protection
96 FAULT_Init(&psfb_ptr->Fault.Object.VPrimaryUVP, VPRI_UV_THRES_TRIG,
97 VPRI_UV_THRES_CLEAR, VPRI_UV_T_BLANK_TRIG, VPRI_UV_T_BLANK_CLEAR);
98
99 // Initialize Secondary Over Voltage Protection
100 FAULT_Init(&psfb_ptr->Fault.Object.VSecondaryOVP, VSEC_OV_THRES_TRIG,
101 VSEC_OV_THRES_CLEAR, VSEC_OV_T_BLANK_TRIG, VSEC_OV_T_BLANK_CLEAR);
102
103 // Initialize Secondary Under Voltage Protection
104 FAULT_Init(&psfb_ptr->Fault.Object.VSecondaryUVP, VSEC_UV_THRES_TRIG,
105 VSEC_UV_THRES_CLEAR, VSEC_UV_T_BLANK_TRIG, VSEC_UV_T_BLANK_CLEAR);
106
107 // // Initialize 5V Rail instability Protection
108 // FAULT_Init(&psfb_ptr->Fault.Object.VRail_5V, VRAIL_5V_UV_THRES_TRIG,
109 // VRAIL_5V_UV_THRES_CLEAR, VRAIL_5V_UV_T_BLANK_TRIG, VRAIL_5V_UV_T_BLANK_CLEAR);
110
111 // Initialize Over Temperature Protection
112 FAULT_Init(&psfb_ptr->Fault.Object.PowerSupplyOTP, OTP_THRES_TRIG,
113 OTP_THRES_CLEAR, FAULT_PERSISTENCE_COUNT_TEMP, FAULT_PERSISTENCE_COUNT_TEMP);
114//
115#if defined (FAULT_SHORT_CCT) && (FAULT_SHORT_CCT == true)
116 // Initialize short circuit fault protection with comparators
117 Fault_EnableShortCircuitProtection();
118#endif
119
120 DAC3DATH = IPRI_SC_THRES_TRIG;
122
123}
124
125
135{
136 uint16_t faultCheck = 0;
137 // secondary over current fault handler
138 #if defined(FAULT_ISEC_OC) && (FAULT_ISEC_OC == true)
140 #endif
141//
142// // secondary over voltage fault handler
146//
147// // primary over current fault handler
148// #if defined (FAULT_IPRI_OC) && (FAULT_IPRI_OC == true)
149// faultCheck &= FAULT_CheckMax(&psfb_ptr->Fault.Object.IPrimaryOCP, psfb_ptr->Data.ISensePrimary, &Fault_Handler);
150// #endif
151//
152 // primary over voltage fault handler
153 #if defined(FAULT_VPRI_OV) && (FAULT_VPRI_OV == true)
155 #endif
156
157 // primary over voltage fault handler
158 #if defined(FAULT_VPRI_UV) && (FAULT_VPRI_UV == true)
160 #endif
161
162
163 // secondary over voltage fault handler
164 #if defined(FAULT_VSEC_OV) && (FAULT_VSEC_OV == true)
166 #endif
167
168 // secondary over voltage fault handler
169 #if defined(FAULT_VSEC_UV) && (FAULT_VSEC_UV == true)
170 if ((psfb_ptr->State > 1) && (psfb_ptr->State < 5)) // after precharge and before fault
172 #endif
173
174
175 // secondary over voltage fault handler
176 #if defined(FAULT_PS_OTP) && (FAULT_PS_OTP == true)
178 #endif
179//
180// // primary over voltage fault handler
181// #if defined(FAULT_VRAIL_5V) && (FAULT_VRAIL_5V == true)
182// faultCheck &= FAULT_CheckMin(&psfb_ptr->Fault.Object.VRail_5V, psfb_ptr->Data.VRail_5V, &Fault_Handler);
183// #endif
184//
185
186// #if defined(FAULT_IPRI_OC) && (FAULT_IPRI_OC == true)
187// // Hardware short circuit
188// if( CMP3_StatusGet()){
189
190// //Fault_Handler();
191
192// // Set fault bits
193// psfb_ptr->Fault.Object.IPrimaryOCP.FaultActive = 1;
194// psfb_ptr->Fault.Object.IPrimaryOCP.FaultLatch = 1;
195
196// //faultCheck &= psfb_ptr->Fault.Object.IPrimaryOCP.FaultActive;
197
198// PwrCtrl_PWM_Disable();
199// psfb_ptr->State = PWRCTRL_STATE_FAULT_DETECTION;
200// psfb_ptr->Fault.FaultDetected = 1;
201// // FAULT_EN_SetLow();
202// // Fault_Handler();
203// }
204
205// #endif
206//
207// #if defined (LOAD_DISCONNECT) && (LOAD_DISCONNECT == true)
208// // Protection when Load is removed by accident.
209// //psfb does not sink power in this modulation. Voltage builds up on output.
210// if(psfb_ptr->PowerDirection==PWR_CTRL_CHARGING)
211// {
212// if((iSecAveraging.AverageValue <= (ISEC_LOAD_STEP_CLAMP>>2)) &&
213// (vOutAveraging.AverageValue > (psfb_ptr->VLoop.Reference + VSEC_LOAD_STEP_CLAMP)) &&
214// (psfb_ptr->Properties.IReference >= 1) )
215// {
216// BatteryDisconnect = true;
217// Fault_Handler();
218// }
219// }
220// if(psfb_ptr->PowerDirection==PWR_CTRL_DISCHARGING)
221// {
222// if((iSecAveraging.AverageValue <= (ISEC_LOAD_STEP_CLAMP>>2)) &&
223// (vPrimAveraging.AverageValue > (psfb_ptr->VLoop.Reference + VPRIM_LOAD_STEP_CLAMP)) &&
224// (psfb_ptr->Properties.IReference >= 1) )
225// {
226// loadDisconnect = true;
227// Fault_Handler();
228// }
229// }
230// #endif
231
232 psfb_ptr->Status.bits.FaultActive = faultCheck;
233
234 // Identify the fault that trips
236}
237
238
239
281
282
283
284
295 //Fault_Handler();
296
297 // Set fault bits
301
302 //faultCheck &= psfb_ptr->Fault.Object.IPrimaryOCP.FaultActive;
303
307// FAULT_EN_SetLow();
308// Fault_Handler();
310}
311
312
313
325{
326 // Drive the fault pin to Low when Fault trips
327 //FAULT_EN_SetLow();
328
329 // Turn off PWM output
331
332 //set the fault active bit
333 psfb_ptr->Status.bits.FaultActive = 1;
334
336
337 // clear the running bit
338 psfb_ptr->Status.bits.Running = 0;
339
340}
This is the generated driver header file for the CMP3 driver.
This is the generated driver header file for the PWM driver.
Contains h files that are part of device layer.
bool loadDisconnect
Definition fault.c:70
Contains public fault functions.
Contains fault generic public functions.
uint16_t Fault_GetFlags(void)
Contains API functions for fault protection.
POWER_CONTROL_t * psfb_ptr
Definition pwrctrl.c:28
Contains public functions for PWM.
void PwrCtrl_PWM_Stop_Switching(void)
Disable the PWM output.
@ PWRCTRL_STATE_FAULT_DETECTION
power converter control state #6: checks if a fault occurs
static void Fault_PrimaryOverCurrent_EventHandler(void)
callback for primary OC
Definition fault.c:294
void Fault_Reset(void)
Clears the fault object flag bits.
Definition fault.c:247
void Fault_Initialize(void)
Initialize the fault objects.
Definition fault.c:81
void Fault_Execute(void)
Executes the fault handlers.
Definition fault.c:134
void Fault_Handler(void)
Handles the fault trip by turning off the power control switching.
Definition fault.c:324
bool FAULT_CheckMax(FAULT_OBJ_T *faultInput, int16_t faultSource, FAULT_CALLBACK callback)
This function compares the fault source value with the threshold limits and sets (or) resets the faul...
bool FAULT_CheckMin(FAULT_OBJ_T *faultInput, int16_t faultSource, FAULT_CALLBACK callback)
This function compares the fault source value with the threshold limits and sets (or) resets the faul...
void FAULT_Init(FAULT_OBJ_T *faultInput, int16_t threshold, int16_t hysLimit, uint16_t thresholdCnt, uint32_t hysCnt)
This function initializes the fault object data structure with the values that required to detect a f...
void CMP3_EventCallbackRegister(void(*handler)(void))
This function can be used to override default callback and to define custom callback for CMP3 Event e...
Definition cmp3.c:147
#define GPIO_debug_SetLow()
Sets the RD14 GPIO Pin which has a custom name of GPIO_debug to Low.
Definition pins.h:215
#define GPIO_debug_SetHigh()
Sets the RD14 GPIO Pin which has a custom name of GPIO_debug to High.
Definition pins.h:206
uint8_t FaultActive
Set/Cleared inside flt check loop
uint8_t FaultLatch
Flag indicating if FAULT has been tripped.
FAULT_OBJ_T VRail_5V
Fault object for 5V rail.
FAULT_OBJ_T VSecondaryUVP
Fault object for Secondary under voltage protection.
FAULT_OBJ_T PowerSupplyOTP
Fault object for Power Supply Temperature.
FAULT_OBJ_T VSecondaryOVP
Fault object for Secondary over voltage protection.
FAULT_OBJ_T ISecondaryOCP
Fault object for Secondary over current protection.
FAULT_OBJ_T VPrimaryOVP
Fault object for Primary over voltage protection.
FAULT_OBJ_T VPrimaryUVP
Fault object for Primary under voltage protection.
FAULT_OBJ_T IPrimaryOCP
Fault object for Primary over current protection.
FAULT_OBJ_T ISenseSCP
Fault object for Short circuit protection.
uint16_t FaultDetected
Fault indication for fault occurrence.
FAULT_t Object
Fault Objects.
uint16_t VCapVoltage
Data value for capacitor.
uint16_t VInVoltage
Data value for input voltage.
uint16_t ISenseSecondary
Data value for secondary current as measured with shunt.
uint16_t Temperature
Data value for temperature.
unsigned Running
Bit 0: Power converter is running.
unsigned FaultActive
Bit 1: Power converter fault is active.
PWR_CTRL_STATE_t State
Power Control State ID.
FEEDBACK_SETTINGS_t Data
Feedback channel settings.
STATUS_FLAGS_t Status
Power Supply status flags.
FAULT_SETTINGS_t Fault
Fault flags and settings.