create data structure to hold TPS546 settings

This commit is contained in:
macphyter 2024-01-23 22:55:58 -07:00 committed by Georges Palauqui
parent da126941d8
commit 253a968c2f
No known key found for this signature in database
GPG Key ID: 1E45F544CE4D04A5
2 changed files with 137 additions and 30 deletions

View File

@ -199,8 +199,10 @@ void TPS546_init(void)
uint8_t data[6];
uint8_t u8_value;
uint16_t u16_value;
int i_value;
int millivolts;
int vmax;
float f_value;
float iout;
ESP_LOGI(TAG, "Initializing the core voltage regulator");
@ -212,34 +214,34 @@ void TPS546_init(void)
smb_read_byte(PMBUS_REVISION, &u8_value);
ESP_LOGI(TAG, "PMBus revision: %02x", u8_value);
/* Get temperature (SLINEAR11) */
/* Show temperature (SLINEAR11) */
ESP_LOGI(TAG, "--------------------------------");
ESP_LOGI(TAG, "Temp: %d", TPS546_get_temperature());
/* Get voltage setting (ULINEAR16) */
ESP_LOGI(TAG, "--------------------------------");
smb_read_word(PMBUS_VOUT_COMMAND, &u16_value);
ESP_LOGI(TAG, "VOUT_COMMAND: %04x", u16_value);
millivolts = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout set to: %d mV", millivolts);
u16_value = int_2_ulinear16(millivolts);
ESP_LOGI(TAG, "Converted back: %04x", u16_value);
/* Show voltage settings */
TPS546_show_voltage_settings();
/* Test changing value */
// u16_value = int_2_ulinear16(1300);
// smb_write_word(PMBUS_VOUT_MAX, u16_value);
// ESP_LOGI(TAG, "Vout Max changed to 1300");
// smb_read_word(PMBUS_VOUT_MAX, &u16_value);
// ESP_LOGI(TAG, "VOUT_MAX: %04x", u16_value);
// vmax = ulinear16_2_int(u16_value);
// ESP_LOGI(TAG, "Vout Max set to: %d mV", vmax);
ESP_LOGI(TAG, "-----------CURRENT---------------------");
/* Get output current (SLINEAR11) */
smb_read_word(PMBUS_READ_IOUT, &u16_value);
iout = slinear11_2_float(u16_value);
ESP_LOGI(TAG, "Iout measured: %2.2f", iout);
ESP_LOGI(TAG, "--------------------------------");
smb_read_word(PMBUS_VOUT_MAX, &u16_value);
ESP_LOGI(TAG, "VOUT_MAX: %04x", u16_value);
vmax = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Max set to: %d mV", vmax);
u16_value = int_2_ulinear16(1300);
smb_write_word(PMBUS_VOUT_MAX, u16_value);
ESP_LOGI(TAG, "Vout Max changed to 1300");
smb_read_word(PMBUS_VOUT_MAX, &u16_value);
ESP_LOGI(TAG, "VOUT_MAX: %04x", u16_value);
vmax = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Max set to: %d mV", vmax);
/* Get voltage output (ULINEAR16) */
// This gets a timeout, don't know why. clock stretching?
@ -248,12 +250,6 @@ void TPS546_init(void)
// millivolts = ulinear16_2_int(u16_value);
// ESP_LOGI(TAG, "Vout measured: %d mV", millivolts);
/* Get output current (SLINEAR11) */
ESP_LOGI(TAG, "--------------------------------");
smb_read_word(PMBUS_READ_IOUT, &u16_value);
iout = slinear11_2_float(u16_value);
ESP_LOGI(TAG, "Iout measured: %2.2f", iout);
}
int TPS546_get_temperature(void)
@ -275,5 +271,69 @@ void TPS546_set_vout(int millivolts)
ESP_LOGI(TAG, "Vout changed to %d mV", millivolts);
}
void TPS546_show_voltage_settings(void)
{
uint16_t u16_value;
int i_value;
float f_value;
int millivolts;
ESP_LOGI(TAG, "-----------VOLTAGE---------------------");
/* VIN_ON SLINEAR11 */
smb_read_word(PMBUS_VIN_ON, &u16_value);
f_value = slinear11_2_float(u16_value);
ESP_LOGI(TAG, "VIN ON set to: %f", f_value);
/* VIN_OFF SLINEAR11 */
smb_read_word(PMBUS_VIN_OFF, &u16_value);
f_value = slinear11_2_float(u16_value);
ESP_LOGI(TAG, "VIN OFF set to: %f", f_value);
/* VOUT_MAX */
smb_read_word(PMBUS_VOUT_MAX, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Max set to: %d mV", i_value);
/* VOUT_OV_FAULT_LIMIT */
smb_read_word(PMBUS_VOUT_OV_FAULT_LIMIT, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout OV Fault Limit: %d mV", i_value);
/* VOUT_OV_WARN_LIMIT */
smb_read_word(PMBUS_VOUT_OV_WARN_LIMIT, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout OV Warn Limit: %d mV", i_value);
/* VOUT_MARGIN_HIGH */
smb_read_word(PMBUS_VOUT_MARGIN_HIGH, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Margin HIGH: %d mV", i_value);
/* --- VOUT_COMMAND --- */
smb_read_word(PMBUS_VOUT_COMMAND, &u16_value);
millivolts = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout set to: %d mV", millivolts);
//u16_value = int_2_ulinear16(millivolts);
//ESP_LOGI(TAG, "Converted back: %04x", u16_value);
/* VOUT_MARGIN_LOW */
smb_read_word(PMBUS_VOUT_MARGIN_LOW, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Margin LOW: %d mV", i_value);
/* VOUT_UV_WARN_LIMIT */
smb_read_word(PMBUS_VOUT_UV_WARN_LIMIT, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout UV Warn Limit: %d mV", i_value);
/* VOUT_UV_FAULT_LIMIT */
smb_read_word(PMBUS_VOUT_UV_FAULT_LIMIT, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout UV Fault Limit: %d mV", i_value);
/* VOUT_MIN */
smb_read_word(PMBUS_VOUT_MIN, &u16_value);
i_value = ulinear16_2_int(u16_value);
ESP_LOGI(TAG, "Vout Min set to: %d mV", i_value);
}

View File

@ -1,13 +1,60 @@
#ifndef TPS546_H_
#define TPS546_H_
#define TPS546_I2CADDR 0x24 ///< TPS546 i2c address
#define TPS546_MANUFACTURER_ID 0xFE ///< Manufacturer ID
#define TPS546_REVISION 0xFF ///< Chip revision
#define TPS546_I2CADDR 0x24 //< TPS546 i2c address
#define TPS546_MANUFACTURER_ID 0xFE //< Manufacturer ID
#define TPS546_REVISION 0xFF //< Chip revision
struct tps546_settings_t
{
int switch_frequency;
/* vin voltage */
int vin_on; /* voltage level to start power conversion */
int vin_off; /* voltage level to stop power conversion */
int vin_uv_warn_limit;
int vin_ov_fault_limit;
int vin_ov_fault_response;
/* vout voltage */
int vout_transition_rate;
int vout_scale_loop;
int vout_trim;
int vout_max;
int vout_ov_fault_limit;
int vout_ov_warn_limit;
int vout_margin_high;
int vout_command;
int vout_margin_low;
int vout_uv_warn_limit;
int vout_uv_fault_limit;
int vout_min;
/* iout current */
int iout_oc_warn_limit;
int iout_oc_fault_limit;
int iout_oc_fault_response;
int iout_cal_gain;
int iout_cal_offset;
/* temperature */
int ot_warn_limit;
int ot_fault_limit;
int ot_fault_response;
/* timing */
int ton_delay;
int ton_rise;
int ton_max_fault_limit;
int ton_max_fault_response;
int toff_delay;
int toff_fall;
};
void TPS546_init(void);
int TPS546_get_temperature(void);
void TPS546_set_vout(int millivolts);
void TPS546_show_voltage_settings(void);
#endif /* TPS546_H_ */