102 lines
2.0 KiB
Markdown
102 lines
2.0 KiB
Markdown
# B-G474E-DPOW1 DCDC Code Map
|
|
|
|
## Runtime knobs
|
|
|
|
The live configuration object is:
|
|
|
|
```c
|
|
g_dcdc_config
|
|
```
|
|
|
|
Edit it in Keil **Watch** while the target is running.
|
|
|
|
Useful fields:
|
|
|
|
```c
|
|
g_dcdc_config.mode
|
|
g_dcdc_config.pwm.frequency_hz
|
|
g_dcdc_config.pwm.test_duty_permille
|
|
g_dcdc_config.pwm.deadtime_enable
|
|
g_dcdc_config.pwm.deadtime_rising_ticks
|
|
g_dcdc_config.pwm.deadtime_falling_ticks
|
|
g_dcdc_config.limits.target_vout_mv
|
|
g_dcdc_config.limits.current_limit_ma
|
|
```
|
|
|
|
Modes:
|
|
|
|
```c
|
|
0 = DCDC_MODE_MONITOR
|
|
1 = DCDC_MODE_PWM_TEST
|
|
2 = DCDC_MODE_CLOSED_LOOP
|
|
```
|
|
|
|
## Startup path
|
|
|
|
`main.c`:
|
|
|
|
1. `Board_Init()` starts clocks, SysTick, GPIO basics.
|
|
2. `Retarget_Init()` enables `printf()` through `USART3`.
|
|
3. `DCDC_Init()` prepares ADC and HRTIM Timer C.
|
|
4. `DCDC_Service1ms()` runs every 1 ms and applies live runtime edits.
|
|
|
|
## HRTIM PWM path
|
|
|
|
`dcdc.c`:
|
|
|
|
- `hrtim1_timer_c_init()` configures HRTIM1 Timer C.
|
|
- `DCDC_StartPwmTest()` starts open-loop analyzer PWM.
|
|
- `hrtim1_apply_pwm_config()` applies live frequency and dead-time edits.
|
|
- `hrtim1_set_duty()` updates `CMP1`, which sets the PB12/PB13 split point.
|
|
|
|
Current complementary test routing:
|
|
|
|
```c
|
|
PB12 / CHC1: set at period, reset at CMP1
|
|
PB13 / CHC2: set at CMP1, reset at period
|
|
```
|
|
|
|
Dead-time is enabled by:
|
|
|
|
```c
|
|
timer->OUTxR |= HRTIM_OUTR_DTEN;
|
|
```
|
|
|
|
## ADC path
|
|
|
|
`DCDC_ReadMeasurements()` reads:
|
|
|
|
```c
|
|
PA1 / ADC1_IN2 = VIN
|
|
PA2 / ADC1_IN3 = input current average
|
|
PA3 / ADC1_IN4 = VOUT
|
|
```
|
|
|
|
Raw ADC values are converted through:
|
|
|
|
```c
|
|
adc_raw_to_mv()
|
|
sense_mv_to_voltage_mv()
|
|
sense_mv_to_current_ma()
|
|
```
|
|
|
|
## Safety path
|
|
|
|
The closed-loop mode checks:
|
|
|
|
```c
|
|
g_dcdc_config.limits.min_vin_mv
|
|
g_dcdc_config.limits.max_vout_mv
|
|
g_dcdc_config.limits.hard_current_ma
|
|
```
|
|
|
|
If a limit trips, `latch_fault()` disables HRTIM outputs, clears duty, opens
|
|
the USB-PD/VIN switch, and moves the state to `DCDC_STATE_FAULT`.
|
|
|
|
## Current safe workflow
|
|
|
|
1. Keep `g_dcdc_config.mode = 1`.
|
|
2. Tune `g_dcdc_config.pwm.deadtime_*_ticks`.
|
|
3. Verify PB12/PB13 on the logic analyzer.
|
|
4. Only after clean waveforms, move toward closed-loop testing.
|