lars bldc parameter

This commit is contained in:
Nils Schulte 2025-08-14 13:08:14 +02:00
parent 8af848b01b
commit dee14242cd

View File

@ -68,7 +68,7 @@ USBCDC usbserial;
#endif #endif
const int voltage_lpf = 50; const int voltage_lpf = 50;
const float max_voltage_limit = 6; const float max_voltage_limit = 2.3;
#ifdef ESPHWENC #ifdef ESPHWENC
@ -90,9 +90,13 @@ CalibratedSensor encoder_calibrated(abs_inc_sensor, sizeof(encoder_calibration_l
#ifdef MOTOR #ifdef MOTOR
struct drv8323s_foc_driver drv8323s; struct drv8323s_foc_driver drv8323s;
// BLDCMotor motor = BLDCMotor(100); // 24N22P // BLDCMotor motor = BLDCMotor(100); // 24N22P
HybridStepperMotor motor = HybridStepperMotor(50); //, 3.7, 10, 4.5 / 1000); //HybridStepperMotor motor = HybridStepperMotor(50); //, 3.7, 10, 4.5 / 1000);
#endif
BLDCMotor motor = BLDCMotor(7, 0.7, 360, 0.15);
// BLDCMotor motor = BLDCMotor(7);
//BLDCDriver3PWM driver = BLDCDriver3PWM(16, 5, 17, 4);
#endif
void read_i2c(uint8_t addr, uint8_t reg, uint8_t *buf, uint8_t len) { void read_i2c(uint8_t addr, uint8_t reg, uint8_t *buf, uint8_t len) {
Wire.beginTransmission(addr); Wire.beginTransmission(addr);
Wire.write(reg); // MAN:0x2E Wire.write(reg); // MAN:0x2E
@ -225,12 +229,13 @@ void setup() {
digitalWrite(INLABC, 1); // enable digitalWrite(INLABC, 1); // enable
// driver.init(&SPI); // driver.init(&SPI);
// status(); // status();
motor.linkSensor(&encoder_calibrated); motor.linkSensor(&encoder_absolute);
//motor.linkSensor(&encoder_calibrated);
motor.linkDriver(drv8323s.focdriver); motor.linkDriver(drv8323s.focdriver);
// motor.foc_modulation = FOCModulationType::SinePWM; // motor.foc_modulation = FOCModulationType::SinePWM;
motor.foc_modulation = FOCModulationType::SpaceVectorPWM; motor.foc_modulation = FOCModulationType::SpaceVectorPWM;
motor.voltage_sensor_align = 4; motor.voltage_sensor_align = 1.5;
motor.voltage_limit = max_voltage_limit; motor.voltage_limit = max_voltage_limit;
// motor.controller = MotionControlType::velocity_openloop; // motor.controller = MotionControlType::velocity_openloop;
// motor.controller = MotionControlType::velocity; // motor.controller = MotionControlType::velocity;
@ -252,7 +257,7 @@ void setup() {
const char *zero_electric_angle_str = "zero_el_angle"; const char *zero_electric_angle_str = "zero_el_angle";
const char *sensor_direction_str = "enc_dir_str"; const char *sensor_direction_str = "enc_dir_str";
const int settle_time_ms = 150; const int settle_time_ms = 150;
if (!pref.isKey(encoder_calibration_lut_str) || pref.getBytesLength(encoder_calibration_lut_str) != sizeof(encoder_calibration_lut)) { if (motor.sensor == &encoder_calibrated && (!pref.isKey(encoder_calibration_lut_str) || pref.getBytesLength(encoder_calibration_lut_str) != sizeof(encoder_calibration_lut))) {
encoder_calibrated.calibrate(motor, settle_time_ms); encoder_calibrated.calibrate(motor, settle_time_ms);
pref.putBytes(encoder_calibration_lut_str, &encoder_calibration_lut[0], sizeof(encoder_calibration_lut)); pref.putBytes(encoder_calibration_lut_str, &encoder_calibration_lut[0], sizeof(encoder_calibration_lut));
pref.putFloat(zero_electric_angle_str, motor.zero_electric_angle); pref.putFloat(zero_electric_angle_str, motor.zero_electric_angle);
@ -263,7 +268,7 @@ void setup() {
Serial.println("Skipping calibration"); Serial.println("Skipping calibration");
} }
if (!pref.isKey(zero_electric_angle_str)) { if (!pref.isKey(zero_electric_angle_str) || motor.sensor != &encoder_calibrated) {
motor.initFOC(); motor.initFOC();
pref.putFloat(zero_electric_angle_str, motor.zero_electric_angle); pref.putFloat(zero_electric_angle_str, motor.zero_electric_angle);
pref.putInt(sensor_direction_str, (int)motor.sensor_direction); pref.putInt(sensor_direction_str, (int)motor.sensor_direction);
@ -354,7 +359,7 @@ void foc_task_loop() {
servo_state.controller_temperature = curr_pcb_temp_kelvin; servo_state.controller_temperature = curr_pcb_temp_kelvin;
servo_state.motor_temperature = NAN; servo_state.motor_temperature = NAN;
float curr_angle = encoder_calibrated.getAngle(); float curr_angle = motor.sensor->getAngle();
servo_state.curr_position = curr_angle; servo_state.curr_position = curr_angle;
servo_state.curr_force = motor.voltage.d; servo_state.curr_force = motor.voltage.d;