EPC9143 300 W 16th Brick DC/DC Module Reference Design
epc9143_r40_hwdescr.h
1 /* Microchip Technology Inc. and its subsidiaries. You may use this software
2  * and any derivatives exclusively with Microchip products.
3  *
4  * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
5  * EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
6  * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
7  * PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
8  * WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
9  *
10  * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
11  * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
12  * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
13  * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
14  * FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS
15  * IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF
16  * ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
17  *
18  * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
19  * TERMS.
20  */
21 
22 /*
23  * @file epc9143_R40_hwdescr.h
24  * Author: M91406
25  * @brief EPC9143 16th Brick Reference Design Hardware Descriptor header file
26  * Revision history:
27  */
28 
29 
30 
31 // This is a guard condition so that contents of this file are not included
32 // more than once.
33 #ifndef EPC9143_R40_HARDWARE_DESCRIPTOR_H
34 #define EPC9143_R40_HARDWARE_DESCRIPTOR_H
35 
36 #include <xc.h> // include processor files - each processor file is guarded.
37 #include <stdint.h> // include standard integer data types
38 #include <stdbool.h> // include standard boolean data types
39 #include <stddef.h> // include standard definition data types
40 #include <math.h> // include standard math functoins library
41 
42 
53 #ifndef __EPC9143_R40__
54  #define __EPC9143_R40__
55 #endif
56  // end of group hardware-id-macro
58 
59 
69 /* CUSTOM RUNTIME OPTIONS */
70 #define PLANT_MEASUREMENT false
71 
72 #define DBGPIN1_ENABLE false
73 #define DBGPIN2_ENABLE true
74 
75  // end of group special-options
76 
77 
92 #define BUCK_ISNS_OFFSET_CALIBRATION_ENABLE false
93 
94 
105 #define CPU_FREQUENCY (float)100000000.0
106 
107 // ADC(DAC Reference and Resolution Settings
108 #define ADC_REFERENCE (float)3.300
109 #define ADC_RESOLUTION (float)12.0
110 
111 // PWM/ADC Clock Settings
112 #define PWM_CLOCK_FREQUENCY (float)4.0e+9
113 
114  // end of group device-abstraction-settings
116 
128 #define CPU_TCY (float)(1.0/CPU_FREQUENCY)
129 #define ADC_GRANULARITY (float)(ADC_REFERENCE / pow(2.0, ADC_RESOLUTION))
130 #define ADC_VALUE_MAX (uint16_t) (pow(2.0, ADC_RESOLUTION) - 1.0) // DO NOT CHANGE
131 #define PWM_CLOCK_PERIOD (float)(1.0/PWM_CLOCK_FREQUENCY)
132 
133  // end of group device-abstraction-macros
134 
135 
148 #define MAIN_EXECUTION_PERIOD (float)100.0e-6
149 
150  // end of group state-machine-settings ~~~~~~~~~~
151 
163 #define MAIN_EXEC_PER (uint16_t)((CPU_FREQUENCY * MAIN_EXECUTION_PERIOD)-1) // DO NOT CHANGE
164  // end of group state-machine-macros ~~~~~~~~~~
166 
177 #define _OsTimerInterrupt _T1Interrupt
178 #define _OSTIMER_IP _T1IP
179 #define _OSTIMER_IE _T1IE
180 #define _OSTIMER_IF _T1IF
181 #define _OSTIMER_PRIORITY 2
182 
183  // end of group state-machine-mcal ~~~~~~~~~~
184 
185 
198 #if (DBGPIN1_ENABLE == true)
199 #define DBGPIN1_PORT 1
200 #define DBGPIN1_PIN 14
201 #define DBGPIN1_Set() { _LATB14 = 1; }
202 #define DBGPIN1_Clear() { _LATB14 = 0; }
203 #define DBGPIN1_Toggle() { _LATB14 ^= 1; }
204 #define DBGPIN1_Init() { _LATB14 = 0; _TRISB14 = 0; }
205 #endif
206 
207 // Device Pin #2 on EPC9143 (not routed)
208 #if (DBGPIN2_ENABLE == true)
209 #define DBGPIN2_PORT 1
210 #define DBGPIN2_PIN 15
211 #define DBGPIN2_Set() { _LATB15 = 1; }
212 #define DBGPIN2_Clear() { _LATB15 = 0; }
213 #define DBGPIN2_Toggle() { _LATB15 ^= 1; }
214 #define DBGPIN2_Init() { _LATB15 = 0; _TRISB15 = 0; }
215 #endif
216 
217 // Device Pin #14 on EPC9243
218 #define PWRGOOD_PORT 1
219 #define PWRGOOD_PIN 1
220 #define PWRGOOD_Set() { _LATB1 = 1; }
221 #define PWRGOOD_Clear() { _LATB1 = 0; }
222 #define PWRGOOD_Toggle() { _LATB1 ^= 1; }
223 #define PWRGOOD_Init() { _ANSELB1 = 0; _LATB1 = 0; _TRISB1 = 0; }
224 
225  // end of group circuit-gpio-mcal
226 
227 
240 #define ISENSE_REF_DAC_INSTANCE 1U
241 #define ISENSE_REF_BUFFER_OPA_INSTANCE 2U
242 
243  // end of group circuit-peripheral-mcal
244 
245 
258 #define BUCK_NO_OF_PHASES 2U
259 
260 #define BUCK_SWITCHING_FREQUENCY (float)500.0e+3
261 #define BUCK_PWM_DUTY_CYCLE_MIN (float)0.010
262 #define BUCK_PWM_DUTY_CYCLE_MAX (float)0.850
263 #define BUCK_LEADING_EDGE_BLANKING (float)100.0e-9
264 #define BUCK_DEAD_TIME_LEADING_EDGE (float)10.0e-9
265 #define BUCK_DEAD_TIME_FALLING_EDGE (float)10.0e-9
266 
267  // end of group pwm-settings ~~~~~~~~~~~~~~~~~~~~
268 
283 #define BUCK_PWM1_CHANNEL 2U
284 #define BUCK_PWM1_GPIO_INSTANCE 1U
285 #define BUCK_PWM1_GPIO_PORT_PINH 12U
286 #define BUCK_PWM1_GPIO_PORT_PINL 13U
287 
288 #define BUCK_PWM1_PDC PG2DC
289 #define BUCK_PWM1H_TRIS _TRISB12
290 #define BUCK_PWM1H_WR _LATB12
291 #define BUCK_PWM1H_RD _RB12
292 #define BUCK_PWM1H_RPx (uint8_t)44
293 #define BUCK_PWM1L_TRIS _TRISB13
294 #define BUCK_PWM1L_WR _LATB13
295 #define BUCK_PWM1L_RD _RB13
296 #define BUCK_PWM1L_RPx (uint8_t)45
297 
298 #define _BUCK_PWM1_Interrupt _PWM2Interrupt
299 #define BUCK_PWM1_IF _PWM2IF
300 #define BUCK_PWM1_IE _PWM2IE
301 #define BUCK_PWM1_IP _PWM2IP
302 #define BUCK_PWM1_TRGSRC_TRG1 0b00110
303 #define BUCK_PWM1_TRGSRC_TRG2 0b00111
304 #define BUCK_PWM1_PGxTRIGA PG2TRIGA
305 #define BUCK_PWM1_PGxTRIGB PG2TRIGB
306 #define BUCK_PWM1_PGxTRIGC PG2TRIGC
307 
308 #define BUCK_PWM1_ADTR1OFS 0U
309 #define BUCK_PWM1_ADTR1PS 0U
310 
311 #define BUCK_PWM1_UPDREQ PG1STATbits.UPDREQ
312  // end of group pwm-mcal-phase1 ~~~~~~~~~~~~~~~~~
314 
330 // PWM Phase #2 Configuration
331 #define BUCK_PWM2_CHANNEL 4U
332 #define BUCK_PWM2_GPIO_INSTANCE 1U
333 #define BUCK_PWM2_GPIO_PORT_PINH 9U
334 #define BUCK_PWM2_GPIO_PORT_PINL 8U
335 
336 #define BUCK_PWM2_PDC PG4DC
337 
338 #define BUCK_PWM2H_TRIS _TRISB9
339 #define BUCK_PWM2H_WR _LATB9
340 #define BUCK_PWM2H_RD _RB9
341 #define BUCK_PWM2H_RPx (uint8_t)41
342 #define BUCK_PWM2H_INIT { _LATB9 = 0; _TRISB9 = 0; }
343 
344 #define BUCK_PWM2L_TRIS _TRISB8
345 #define BUCK_PWM2L_WR _LATB8
346 #define BUCK_PWM2L_RD _RB8
347 #define BUCK_PWM2L_RPx (uint8_t)40
348 #define BUCK_PWM2L_INIT { _LATB8 = 0; _TRISB8 = 0; }
349 
350 #define _BUCK_PWM2_Interrupt _PWM4Interrupt
351 #define BUCK_PWM2_IF _PWM4IF
352 #define BUCK_PWM2_IE _PWM4IE
353 #define BUCK_PWM2_IP _PWM4IP
354 #define BUCK_PWM2_TRGSRC_TRG1 0b01010
355 #define BUCK_PWM2_TRGSRC_TRG2 0b01011
356 #define BUCK_PWM2_PGxTRIGA PG4TRIGA
357 #define BUCK_PWM2_PGxTRIGB PG4TRIGB
358 #define BUCK_PWM2_PGxTRIGC PG4TRIGC
359 
360 #define BUCK_PWM2_ADTR1OFS 0
361 #define BUCK_PWM2_ADTR1PS 0
362 
363 #define BUCK_PWM2_UPDREQ PG1STATbits.UPDREQ
364  // end of group pwm-mcal-phase2 ~~~~~~~~~~~~~~~~~
366 
367 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
378 // Conversion Macros
379 #define BUCK_SWITCHING_PERIOD (float)(1.0/BUCK_SWITCHING_FREQUENCY)
380 #define BUCK_PWM_PERIOD (uint16_t)(float)(BUCK_SWITCHING_PERIOD / PWM_CLOCK_PERIOD)
381 #define BUCK_PWM_PHASE_SHIFT (uint16_t)((float)BUCK_PWM_PERIOD / (float)BUCK_NO_OF_PHASES)
382 #define BUCK_PWM_DC_MIN (uint16_t)(BUCK_PWM_DUTY_CYCLE_MIN * (float)BUCK_PWM_PERIOD)
383 #define BUCK_PWM_DC_MAX (uint16_t)(BUCK_PWM_DUTY_CYCLE_MAX * (float)BUCK_PWM_PERIOD)
384 #define BUCK_LEB_PERIOD (uint16_t)(BUCK_LEADING_EDGE_BLANKING / (float)PWM_CLOCK_PERIOD)
385 #define BUCK_PWM_DEAD_TIME_LE (uint16_t)(BUCK_DEAD_TIME_LEADING_EDGE / (float)PWM_CLOCK_PERIOD)
386 #define BUCK_PWM_DEAD_TIME_FE (uint16_t)(BUCK_DEAD_TIME_FALLING_EDGE / (float)PWM_CLOCK_PERIOD)
387 
388  // end of group pwm-macros ~~~~~~~~~~~~~~~~~~~~~~
389 
390 
391 
401 // Feedback Declarations
402 #define BUCK_VIN_MINIMUM (float)18.000
403 #define BUCK_VIN_NOMINAL (float)48.000
404 #define BUCK_VIN_MAXIMUM (float)60.500
405 
406 #define BUCK_VIN_UNDER_VOLTAGE (float)17.50
407 #define BUCK_VIN_OVER_VOLTAGE (float)61.00
408 #define BUCK_VIN_HYSTERESIS (float)1.500
409 
410 #define BUCK_VIN_R1 (float)(110.0)
411 #define BUCK_VIN_R2 (float)(4.870)
412 
413 #define BUCK_VIN_FEEDBACK_OFFSET (float)(0.0)
414 #define BUCK_VIN_ADC_TRG_DELAY (float)(120.0e-9)
415 
416  // end of group input-voltage-feedback-settings ~~~~~~~~~~~~~~~~~~~~
417 
418 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
429 // Peripheral Assignments
430 #define _BUCK_VIN_ADCInterrupt _ADCAN9Interrupt
431 #define _BUCK_VIN_ADCISR_IF _ADCAN9IF
432 
433 #define BUCK_VIN_ANSEL _ANSELA2
434 #define BUCK_VIN_ADCCORE 8
435 #define BUCK_VIN_ADCIN 9
436 #define BUCK_VIN_ADCBUF ADCBUF9
437 #define BUCK_VIN_ADCTRIG PG4TRIGA
438 #define BUCK_VIN_TRGSRC BUCK_PWM2_TRGSRC_TRG1
439 
440  // end of group input-voltage-feedback-mcal ~~~~~~~~~~~~~~~~~~~~~~~~~
441 
442 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
453 #define BUCK_VIN_FEEDBACK_GAIN (float)((BUCK_VIN_R2) / (BUCK_VIN_R1 + BUCK_VIN_R2)) // DO NOT CHANGE
454 #define BUCK_VIN_MIN (uint16_t)(BUCK_VIN_MINIMUM * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
455 #define BUCK_VIN_NOM (uint16_t)(BUCK_VIN_NOMINAL * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
456 #define BUCK_VIN_MAX (uint16_t)(BUCK_VIN_MAXIMUM * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
457 #define BUCK_VIN_HYST (uint16_t)(BUCK_VIN_HYSTERESIS * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
458 #define BUCK_VIN_UVLO_TRIP (uint16_t)(BUCK_VIN_UNDER_VOLTAGE * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
459 #define BUCK_VIN_UVLO_RELEASE (uint16_t)((BUCK_VIN_UNDER_VOLTAGE + BUCK_VIN_HYSTERESIS) * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
460 #define BUCK_VIN_OVLO_TRIP (uint16_t)(BUCK_VIN_OVER_VOLTAGE * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
461 #define BUCK_VIN_OVLO_RELEASE (uint16_t)((BUCK_VIN_OVER_VOLTAGE - BUCK_VIN_HYSTERESIS) * BUCK_VIN_FEEDBACK_GAIN / ADC_GRANULARITY)
462 #define BUCK_VIN_ADC_TRGDLY (uint16_t)(BUCK_VIN_ADC_TRG_DELAY / PWM_CLOCK_PERIOD)
463 #define BUCK_VIN_OFFSET (uint16_t)(BUCK_VIN_FEEDBACK_OFFSET / ADC_GRANULARITY)
464 
465 #define BUCK_VIN_NORM_INV_G (float)(1.0/BUCK_VIN_FEEDBACK_GAIN)
466 #define BUCK_VIN_NORM_SCALER (int16_t)(ceil(log(BUCK_VIN_NORM_INV_G)) + 1)
467 #define BUCK_VIN_NORM_FACTOR (int16_t)((BUCK_VIN_NORM_INV_G / pow(2.0, BUCK_VIN_NORM_SCALER)) * (pow(2.0, 15)-1))
468 
469 #define BUCK_VIN_RANGE_MAX (float)(ADC_REFERENCE * BUCK_VIN_NORM_INV_G)
470  // end of group input-voltage-feedback-macros ~~~~~~~~~~~~~~~~~~~~~~
472 
473 
483 // Feedback Declarations
484 #define BUCK_VOUT_NOMINAL (float)12.000
485 #define BUCK_VOUT_TOLERANCE_MAX (float)0.500
486 #define BUCK_VOUT_TOLERANCE_MIN (float)0.100
487 
488 #define BUCK_VOUT_DIV_R1 (float)(18.00)
489 #define BUCK_VOUT_DIV_R2 (float)(4.750)
490 #define BUCK_VOUT_FEEDBACK_OFFSET (float)(0.0)
491 #define BUCK_VOUT_ADC_TRG_DELAY (float)(0.0e-9)
492 
493  // end of group output-voltage-feedback-settings ~~~~~~~~~~~~~~~~~~~~
494 
495 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
506 // Peripheral Assignments
507 #define BUCK_VOUT_ANSEL _ANSELA0
508 #define BUCK_VOUT_ADCCORE 0
509 #define BUCK_VOUT_ADCIN 0
510 #define BUCK_VOUT_ADCBUF ADCBUF0
511 #define BUCK_VOUT_ADCTRIG PG2TRIGA
512 #define BUCK_VOUT_TRGSRC BUCK_PWM1_TRGSRC_TRG1
513 
514  // end of group output-voltage-feedback-mcal ~~~~~~~~~~~~~~~~~~~~~~~~~
515 
516 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
527 #define BUCK_VOUT_FEEDBACK_GAIN (float)((BUCK_VOUT_DIV_R2) / (BUCK_VOUT_DIV_R1 + BUCK_VOUT_DIV_R2))
528 
529 #define BUCK_VOUT_REF (uint16_t)(BUCK_VOUT_NOMINAL * BUCK_VOUT_FEEDBACK_GAIN / ADC_GRANULARITY)
530 #define BUCK_VOUT_NOM BUCK_VOUT_REF
531 #define BUCK_VOUT_DEV_TRIP (uint16_t)(BUCK_VOUT_TOLERANCE_MAX * BUCK_VOUT_FEEDBACK_GAIN / ADC_GRANULARITY)
532 #define BUCK_VOUT_DEV_RELEASE (uint16_t)(BUCK_VOUT_TOLERANCE_MIN * BUCK_VOUT_FEEDBACK_GAIN / ADC_GRANULARITY)
533 #define BUCK_VOUT_OFFSET (uint16_t)(BUCK_VOUT_FEEDBACK_OFFSET / ADC_GRANULARITY)
534 #define BUCK_VOUT_ADC_TRGDLY (uint16_t)(BUCK_VOUT_ADC_TRG_DELAY / PWM_CLOCK_PERIOD)
535 
536 #define BUCK_VOUT_NORM_INV_G (float)(1.0/BUCK_VOUT_FEEDBACK_GAIN)
537 #define BUCK_VOUT_NORM_SCALER (int16_t)(ceil(log(BUCK_VOUT_NORM_INV_G)) + 1)
538 #define BUCK_VOUT_NORM_FACTOR (int16_t)((BUCK_VOUT_NORM_INV_G / pow(2.0, BUCK_VOUT_NORM_SCALER)) * (pow(2.0, 15)-1))
539 
540 #define BUCK_VOUT_RANGE_MAX (float)(ADC_REFERENCE * BUCK_VOUT_NORM_INV_G)
541 
542  // end of group output-voltage-feedback-macros ~~~~~~~~~~~~~~~~~~~~~~
543 
544 
559 // Feedback Declarations
560 #define BUCK_IOUT_MINIMUM (float) 0.000
561 #define BUCK_IOUT_MAXIMUM (float) 26.50
562 #define BUCK_IOUT_RELEASE (float) 24.00
563 
564 #define BUCK_ISNS_FEEDBACK_GAIN (float) 0.050
565 #define BUCK_ISNS_MINIMUM (float) 0.000
566 #define BUCK_ISNS_MAXIMUM (float) 26.50
567 #define BUCK_ISNS_RELEASE (float) 24.00
568 #define BUCK_ISNS_REFERENCE (float) 18.00
569 #define BUCK_ISNS_ADC_TRG_DELAY (float) 120.0e-9
570 
571 #define BUCK_ISNS1_FEEDBACK_OFFSET (float) 1.650
572 #define BUCK_ISNS2_FEEDBACK_OFFSET (float) 1.650
573 
574  // end of group
575 
576 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
587 // Phase Current Feedback Settings Conversion Macros
588 #define BUCK_ISNS_REF (uint16_t)((BUCK_ISNS_REFERENCE * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
589 #define BUCK_IOUT_MIN (uint16_t)(int16_t)((BUCK_IOUT_MINIMUM * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
590 #define BUCK_IOUT_OCL (uint16_t)((BUCK_IOUT_MAXIMUM * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
591 #define BUCK_IOUT_OCL_RELEASE (uint16_t)((BUCK_IOUT_RELEASE * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
592 
593 #define BUCK_ISNS1_MIN (uint16_t)(int16_t)(((BUCK_ISNS_MINIMUM-BUCK_ISNS1_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
594 #define BUCK_ISNS1_OCL (uint16_t)(((BUCK_ISNS_MAXIMUM-BUCK_ISNS1_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
595 #define BUCK_ISNS1_OCL_RELEASE (uint16_t)(((BUCK_ISNS_RELEASE-BUCK_ISNS1_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
596 #define BUCK_ISNS1_OFFFSET (uint16_t)(BUCK_ISNS1_FEEDBACK_OFFSET / ADC_GRANULARITY)
597 
598 #define BUCK_ISNS2_MIN (uint16_t)(int16_t)(((BUCK_ISNS_MINIMUM-BUCK_ISNS2_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
599 #define BUCK_ISNS2_OCL (uint16_t)(((BUCK_ISNS_MAXIMUM-BUCK_ISNS2_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
600 #define BUCK_ISNS2_OCL_RELEASE (uint16_t)(((BUCK_ISNS_RELEASE-BUCK_ISNS2_FEEDBACK_OFFSET) * BUCK_ISNS_FEEDBACK_GAIN) / ADC_GRANULARITY)
601 #define BUCK_ISNS2_OFFFSET (uint16_t)(BUCK_ISNS2_FEEDBACK_OFFSET / ADC_GRANULARITY)
602 #define BUCK_ISNS_ADC_TRGDLY (uint16_t)(BUCK_ISNS_ADC_TRG_DELAY / PWM_CLOCK_PERIOD)
603 
604 #define BUCK_ISNS_NORM_INV_G (float)(1.0/BUCK_ISNS_FEEDBACK_GAIN)
605 #define BUCK_ISNS_NORM_SCALER (int16_t)(ceil(log(BUCK_ISNS_NORM_INV_G)) + 1)
606 #define BUCK_ISNS_NORM_FACTOR (int16_t)((BUCK_ISNS_NORM_INV_G / pow(2.0, BUCK_ISNS_NORM_SCALER)) * (pow(2.0, 15)-1))
607 
608  // end of group phase-current-feedback-macros ~~~~~~~~~~~~~~~~~~~~~~~
609 
610 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
622 // Peripheral Assignments
623 #define _BUCK_ISNS1_ADCInterrupt _ADCAN1Interrupt
624 #define _BUCK_ISNS1_ADCISR_IF _ADCAN1IF
625 
626 #define BUCK_ISNS1_ANSEL _ANSELA1
627 #define BUCK_ISNS1_ADCCORE 1
628 #define BUCK_ISNS1_ADCIN 1
629 #define BUCK_ISNS1_ADCBUF ADCBUF1
630 #define BUCK_ISNS1_ADCTRIG PG2TRIGB
631 #define BUCK_ISNS1_TRGSRC BUCK_PWM1_TRGSRC_TRG2
632 
633 #define _BUCK_ISNS2_ADCInterrupt _ADCAN4Interrupt
634 #define _BUCK_ISNS2_ADCISR_IF _ADCAN4IF
635 
636 #define BUCK_ISNS2_ANSEL _ANSELA4
637 #define BUCK_ISNS2_ADCCORE 8
638 #define BUCK_ISNS2_ADCIN 4
639 #define BUCK_ISNS2_ADCBUF ADCBUF4
640 #define BUCK_ISNS2_ADCTRIG PG4TRIGB
641 #define BUCK_ISNS2_TRGSRC BUCK_PWM2_TRGSRC_TRG2
642 
643  // end of group phase-current-feedback-mcal ~~~~~~~~~~~~~~~~~~~~~~~~~
644 
645 
646 
658 #define BUCK_VL_MINIMUM (float)(BUCK_VIN_UNDER_VOLTAGE - BUCK_VOUT_RANGE_MAX)
659 #define BUCK_VL_NOMINAL (float)(BUCK_VIN_NOMINAL - BUCK_VOUT_NOMINAL)
660 #define BUCK_VL_MAXIMUM (float)(BUCK_VIN_RANGE_MAX - 0)
661 
662 #define BUCK_AGC_FACTOR_MAX (float)(BUCK_VL_NOMINAL / BUCK_VL_MINIMUM)
663 
664 // To calculate the voltage across the inductor, input and output voltage ADC results need to be normalized. The normalization factor is determined here
665 // Each input voltage sample has to be multiplied with this scaling factor to allow the calculation of the instantaneous voltage across the inductor
666 #define BUCK_VIN_NORM_FCT (float)(BUCK_VOUT_FEEDBACK_GAIN / BUCK_VIN_FEEDBACK_GAIN)
667 #define BUCK_AGC_IO_NORM_SCALER (int16_t)(ceil(log(BUCK_VIN_NORM_FCT)) + 1)
668 #define BUCK_AGC_IO_NORM_FACTOR (int16_t)((BUCK_VIN_NORM_FCT / pow(2.0, BUCK_AGC_IO_NORM_SCALER)) * (pow(2.0, 15)-1))
669 
670 // The AGC compare value is defined at nominal input voltage and output voltage
671 #define BUCK_AGC_MEDIAN (int16_t)(((float)BUCK_VIN_NOM * BUCK_VIN_NORM_FCT) - BUCK_VOUT_NOM)
672 #define BUCK_AGC_NOM_SCALER (uint16_t)(ceil(log(BUCK_AGC_FACTOR_MAX)) + 1)
673 #define BUCK_AGC_NOM_FACTOR (uint16_t)(0x7FFF >> BUCK_AGC_NOM_SCALER)
674 
675  // end of group
676 
677 
711 #define BUCK_POWER_ON_DELAY (float) 200e-3
712 #define BUCK_VRAMP_PERIOD (float) 100e-3
713 #define BUCK_IRAMP_PERIOD (float) 100e-3
714 #define BUCK_POWER_GOOD_DELAY (float) 200e-3
715 
716  // end of group startup-timing-settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
717 
718 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
729 #define BUCK_POD (uint16_t)(((float)BUCK_POWER_ON_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
730 #define BUCK_VRAMP_PER (uint16_t)(((float)BUCK_VRAMP_PERIOD / (float)MAIN_EXECUTION_PERIOD)-1.0)
731 #define BUCK_VREF_STEP (uint16_t)((float)BUCK_VOUT_REF / (float)(BUCK_VRAMP_PER + 1.0))
732 #define BUCK_IRAMP_PER (uint16_t)(((float)BUCK_IRAMP_PERIOD / (float)MAIN_EXECUTION_PERIOD)-1.0)
733 #define BUCK_IREF_STEP (uint16_t)((float)BUCK_ISNS_REF / (float)(BUCK_VRAMP_PER + 1.0))
734 #define BUCK_PGD (uint16_t)(((float)BUCK_POWER_GOOD_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
735  // end of group startup-timing-macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
737 
738 
759 #define BUCK_UVLO_TRIP_DELAY (float) 5e-3
760 #define BUCK_UVLO_RECOVERY_DELAY (float) 500e-3
761 #define BUCK_OVLO_TRIP_DELAY (float) 5e-3
762 #define BUCK_OVLO_RECOVERY_DELAY (float) 500e-3
763 #define BUCK_REGERR_TRIP_DELAY (float) 25e-3
764 #define BUCK_REGERR_RECOVERY_DELAY (float) 500e-3
765 #define BUCK_OCP_TRIP_DELAY (float) 2e-3
766 #define BUCK_OCP_RECOVERY_DELAY (float) 500e-3
767 
768  // end of group fault-response-settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
769 
770 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
781 #define BUCK_UVLO_TDLY (uint16_t)(((float) BUCK_UVLO_TRIP_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
782 #define BUCK_UVLO_RDLY (uint16_t)(((float) BUCK_UVLO_RECOVERY_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
783 #define BUCK_OVLO_TDLY (uint16_t)(((float) BUCK_OVLO_TRIP_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
784 #define BUCK_OVLO_RDLY (uint16_t)(((float) BUCK_OVLO_RECOVERY_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
785 #define BUCK_REGERR_TDLY (uint16_t)(((float) BUCK_REGERR_TRIP_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
786 #define BUCK_REGERR_RDLY (uint16_t)(((float)BUCK_REGERR_RECOVERY_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
787 #define BUCK_OCP_TDLY (uint16_t)(((float) BUCK_OCP_TRIP_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
788 #define BUCK_OCP_RDLY (uint16_t)(((float) BUCK_OCP_RECOVERY_DELAY / (float)MAIN_EXECUTION_PERIOD)-1.0)
789 
790  // end of group fault-response-macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
791 
792 
805 // Hardware-dependent defines
806 #define BUCK_VOUT_TRIG_PWM 0
807 #define BUCK_VOUT_TRIG_ADC 1
808 
809 #define BUCK_VOUT_TRIGGER_MODE BUCK_VOUT_TRIG_PWM
810 #define BUCK_VOUT_ISR_PRIORITY 5
811 
812 #if (BUCK_VOUT_TRIGGER_MODE == BUCK_VOUT_TRIG_ADC)
813  #define _BUCK_VLOOP_Interrupt _ADCAN0Interrupt
814  #define _BUCK_VLOOP_ISR_IP _ADCAN0IP
815  #define _BUCK_VLOOP_ISR_IF _ADCAN0IF
816  #define _BUCK_VLOOP_ISR_IE _ADCAN0IE
817 #elif (BUCK_VOUT_TRIGGER_MODE == BUCK_VOUT_TRIG_PWM)
818  #define _BUCK_VLOOP_Interrupt _PWM2Interrupt
819  #define _BUCK_VLOOP_ISR_IP _PWM2IP
820  #define _BUCK_VLOOP_ISR_IF _PWM2IF
821  #define _BUCK_VLOOP_ISR_IE _PWM2IE
822 #endif
823  // end of group
824 
825 #endif /* EPC9143_R40_HARDWARE_DESCRIPTOR_H */