Hi all,
I have an ESP32 Board (Deng FOC, see Deng FOC Board - Easy to use!) with an AS5600 magnetic sensor, which I’d like to use in PWM mode. Unfortunately, there is no sample code in the GIT repo pointed to by the above mentioned post). The sensors are connected to the ports I0 and I1 of the driver. However, my code always prints out 0 for the angle.
Code:
#include <SimpleFOC.h>
MagneticSensorPWM sensor = MagneticSensorPWM(I0, 4, 904);
MagneticSensorPWM sensor1 = MagneticSensorPWM(1, 4, 904);
BLDCMotor motor = BLDCMotor(14);
BLDCDriver3PWM driver = BLDCDriver3PWM(32,33,25,22);
BLDCMotor motor1 = BLDCMotor(14);
BLDCDriver3PWM driver1 = BLDCDriver3PWM(26,27,14,12);
float target_velocity = 0;
Commander command = Commander(Serial);
void doTarget(char* cmd) { command.scalar(&target_velocity, cmd); }
void setup() {
sensor.init();
sensor1.init();
motor.linkSensor(&sensor);
motor1.linkSensor(&sensor1);
driver.voltage_power_supply = 16.8;
driver.init();
driver1.voltage_power_supply = 16.8;
driver1.init();
motor.linkDriver(&driver);
motor1.linkDriver(&driver1);
motor.foc_modulation = FOCModulationType::SpaceVectorPWM;
motor1.foc_modulation = FOCModulationType::SpaceVectorPWM;
motor.controller = MotionControlType::angle;
motor1.controller = MotionControlType::angle;
motor.PID_velocity.P = 0.2;
motor1.PID_velocity.P = 0.2;
motor.PID_velocity.I = 20;
motor1.PID_velocity.I = 20;
motor.P_angle.P = 20;
motor1.P_angle.P = 20;
motor.voltage_limit = 12;
motor1.voltage_limit = 12;
motor.LPF_velocity.Tf = 0.01;
motor1.LPF_velocity.Tf = 0.01;
motor.velocity_limit = 40;
motor1.velocity_limit = 40;
Serial.begin(115200);
motor.useMonitoring(Serial);
motor1.useMonitoring(Serial);
motor.init();
motor1.init();
command.add(‘T’, doTarget, “target velocity”);
Serial.println(F(“Motor ready.”));
Serial.println(F(“Set the target velocity using serial terminal:”));
}
void loop() {
Serial.print(sensor.getAngle());
Serial.print(" - ");
Serial.print(sensor1.getAngle());
Serial.println();
motor.loopFOC();
motor1.loopFOC();
motor.move(target_velocity);
motor1.move(target_velocity);
command.run();
}
Does anyone has an idea where the problem is? Using I2C, I have no problems obtaining the angle (in radians) from the matnetic sensor. However, I have to make it work in PWM mode (don’t ask why pls).
Thanks.