working velocitiy closed loop (but slow?)

This commit is contained in:
Nils Schulte 2025-05-15 17:16:52 +02:00
parent 6bf5371d97
commit d26f6e3478
2 changed files with 24 additions and 12 deletions

View File

@ -23,8 +23,8 @@ lib_archive = false
# ;platform_packages = espressif/toolchain-xtensa-esp32@8.4.0+2021r2-patch5
monitor_speed = 115200
lib_deps =
https://github.com/simplefoc/Arduino-FOC.git#dev
https://github.com/simplefoc/Arduino-FOC-drivers.git#dev
https://github.com/schnilz/Arduino-FOC.git#dev
https://github.com/schnilz/Arduino-FOC-drivers.git#dev
# https://github.com/handmade0octopus/ESP32-TWAI-CAN
https://github.com/tdk-invn-oss/motion.arduino.ICM42670P
; https://github.com/simplefoc/Arduino-FOC-dcmotor.git

View File

@ -11,7 +11,7 @@
#include "SimpleFOCDrivers.h"
// #include "comms/streams/BinaryIO.h"
// #include "encoders/as5600/MagneticSensorAS5600.h"
// #include "encoders/calibrated/CalibratedSensor.h"
#include "encoders/calibrated/CalibratedSensor.h"
// #include "encoders/esp32hwencoder/ESP32HWEncoder.h"
#include "DRV8323S.hpp"
@ -95,7 +95,7 @@ const int voltage_lpf = 50;
// ESP32HWEncoder encoder =
// ESP32HWEncoder(ENC_A, ENC_B, 4096 / 4); // The Index pin can be omitted
Encoder encoder = Encoder(ENC_A, ENC_B, 4096 / 4);
// CalibratedSensor encoder_calibrated = CalibratedSensor(encoder);
CalibratedSensor encoder_calibrated = CalibratedSensor(encoder);
// MagneticSensorAS5600 encoder = MagneticSensorAS5600(0x36);
#ifdef MOTOR
@ -236,30 +236,33 @@ void setup() {
digitalWrite(INLABC, 1); // enable
// driver.init(&SPI);
// status();
motor.linkDriver(drv8323s.focdriver);
motor.linkSensor(&encoder);
motor.linkDriver(drv8323s.focdriver);
// motor.foc_modulation = FOCModulationType::SinePWM;
motor.foc_modulation = FOCModulationType::SpaceVectorPWM;
motor.voltage_sensor_align = 6;
motor.voltage_limit = 3;
motor.controller = MotionControlType::velocity_openloop;
motor.voltage_sensor_align = 3;
motor.voltage_limit = 5;
// motor.controller = MotionControlType::velocity_openloop;
motor.controller = MotionControlType::velocity;
// motor.controller = MotionControlType::torque;
// motor.torque_controller = TorqueControlType::voltage;
motor.useMonitoring(SSYNCIF);
drv8323s.focdriver->voltage_power_supply = vdrive_read;
motor.init();
delay(1000);
// // set voltage to run calibration
// encoder_calibrated.voltage_calibration = 3;
encoder_calibrated.voltage_calibration = 3;
// // Running calibration
// encoder_calibrated.calibrate(motor);
encoder_calibrated.calibrate(motor);
// //Serial.println("Calibrating Sensor Done.");
// // Linking sensor to motor object
// motor.linkSensor(&encoder_calibrated);
motor.initFOC();
motor.move(1);
motor.move(0);
// sensor.init(&SPI);
// motors[i].linkSensor(&sensors[i]);
#endif
@ -393,6 +396,7 @@ void setup() {
// esp_task_wdt_add(NULL); // add current thread to WDT watch
}
int i = 0;
void loop() {
#ifdef MOTOR
// drv8323s.focdriver->voltage_power_supply = vdrive_read;
@ -404,11 +408,20 @@ void loop() {
motor.move();
#else
encoder.update(); // optional: Update manually if not using loopfoc()
#endif
if(i++ % 100 == 0) {
static float angle = 0;
static float old_angle = 0;
angle = encoder.getAngle();
SSYNCIF.print("enc: ");
SSYNCIF.print(angle * 180.0 / 3.1415);
SSYNCIF.print("mec: ");
SSYNCIF.print(encoder.getMechanicalAngle() * 180.0 / 3.1415);
SSYNCIF.print("\tcal: ");
SSYNCIF.print(encoder_calibrated.getAngle() * 180.0 / 3.1415);
SSYNCIF.println();
}
// inv_imu_sensor_event_t imu_event;
@ -435,7 +448,6 @@ void loop() {
// delay(100);
// // SSYNCIF.print("V: ");
// // SSYNCIF.println(vdrive_read);
#endif
#ifdef MOTOR
// SSYNCIF.print(" ");
// uint16_t result = 0;