Skip to content

[BUG] Core Panic when using output_ramp #520

Description

@miclol

Describe the bug
This code triggers a core panic on the ESP32-S3 when run, and works fine if the output ramp line is commented out.

#include <SimpleFOC.h>

#define ENC_A 7
#define ENC_B 5
#define ENC_C 6
#define INHA 14
#define INLA 11
#define INHB 13
#define INLB 10
#define INHC 12
#define INLC 9

BLDCMotor motor = BLDCMotor(1, 0.112, 2000);  // Assuming delta wiring, tuned to 2000 KV
BLDCDriver6PWM driver = BLDCDriver6PWM(INHA, INLA, INHB, INLB, INHC, INLC);
HallSensor sensor = HallSensor(ENC_A, ENC_B, ENC_C, 1);
Commander command = Commander(Serial);
hw_timer_t *timer = NULL;

void onPID(char* cmd){ command.pid(&motor.PID_velocity, cmd); }
void onMotion(char* cmd){command.motion(&motor, cmd); }

void doA(){sensor.handleA();}
void doB(){sensor.handleB();}
void doC(){sensor.handleC();}

void IRAM_ATTR foc_loop() {
  noInterrupts();
  motor.loopFOC();
  motor.move();
  interrupts();
}

void setup() {
  Serial.begin(115200);
  SimpleFOCDebug::enable(&Serial);
  
  driver.pwm_frequency = 16000;
  driver.voltage_power_supply = 12;
  driver.init();
  
  sensor.velocity_max = 2000;
  
  sensor.enableInterrupts(doA, doB, doC);
  sensor.init();

  motor.foc_modulation = FOCModulationType::Trapezoid_120;
  motor.torque_controller = TorqueControlType::estimated_current;
  motor.controller = MotionControlType::velocity;
  motor.updateVoltageLimit(12);
  motor.updateCurrentLimit(10);
  
  motor.target = 0.0;
  
  motor.linkDriver(&driver);
  motor.linkSensor(&sensor);

  motor.useMonitoring(Serial);

  motor.zero_electric_angle = 1.047;
  motor.sensor_direction = Direction::CW;

  motor.PID_velocity.P = 0.01;
  motor.PID_velocity.I = 0;
  motor.PID_velocity.D = 0;
  motor.PID_velocity.output_ramp = 0.001;
  motor.LPF_velocity.Tf = 0.0001;
  
  motor.init();
  motor.initFOC();

  command.add('V', onPID, "pid");
  command.add('M', onMotion, "motion");

  timer = timerBegin(1000000);
  timerAttachInterrupt(timer, &foc_loop);
  // Set alarm to call foc_loop every 50us (20kHz)
  timerAlarm(timer, 50, true, 0);
}

void loop() {
  command.run();
}

Log:

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x10 (RTCWDT_RTC_RST),boot:0xb (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x116c
load:0x403c8700,len:0xc2c
load:0x403cb700,len:0x3108
entry 0x403c88b8
ESP32-DRV: Configuring 6PWM in group: 0 on timer: 0
ESP32-DRV: Configuring 3 operators.
ESP32-DRV: Configuring 6PWM with hardware dead-time
ESP32-DRV: Configuring 3 comparators.
ESP32-DRV: Configuring 6 generators.
ESP32-DRV: Configuring Center-Aligned 6 pwm.
ESP32-DRV: Configuring dead-time.
ESP32-DRV: Enabling timer: 0
ESP32-DRV: MCPWM configured!
MOT:Monitor enabled!
MOT:Init
MOT:Enable driver.
MOT:Align sensor.
MOT:Skip dir calib.
MOT:Skip offset calib.
ERR-MOT:No current sense.
MOT:Ready.
E (1030) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1034) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1042) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1049) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1056) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1064) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1071) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1078) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1086) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1093) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1101) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1108) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1115) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
E (1123) mcpwm: mcpwm_comparator_set_compare_value(195): compare value out of range
Guru Meditation Error: Core  / panic'ed (Cache error). 
MMU entry fault error

Core  0 register dump:
Guru Meditation Error: Core  0 panic'ed (Unhandled debug exception). 
Debug exception reason: Stack canary watchpoint triggered (IDLE0) 
Core  0 register dump:
PC      : 0x4200f4cb  PS      : 0x00060836  A0      : 0x8200f2c8  A1      : 0x3fca0850  
A2      : 0x3fca09e0  A3      : 0x00000000  A4      : 0x00000000  A5      : 0x00000000  
A6      : 0x3fca09e0  A7      : 0x3fca0860  A8      : 0x00000050  A9      : 0x3fca0860  
A10     : 0x3c042b8a  A11     : 0x3c04cb9c  A12     : 0x00000060  A13     : 0x3fca08c0  
A14     : 0x3c042c50  A15     : 0x00000000  SAR     : 0x0000000c  EXCCAUSE: 0x00000001  
EXCVADDR: 0x00000000  LBEG    : 0x40056f5c  LEND    : 0x40056f72  LCOUNT  : 0x00000000  


Backtrace: 0x4200f4c8:0x3fca0850 0x4200f2c5:0x3fca08e0 0x4200f2f1:0x3fca0900 0x42032f1f:0x3fca0920 0x42008860:0x3fca0950 0x4200f289:0x3fca0970 0x40375e9d:0x3fca09c0 0x40376144:0x3fca09e0 0x00040022:0x3fca0aa0 |<-CORRUPTED


Core  1 register dump:
PC      : 0x40374340  PS      : 0x00050034  A0      : 0x420067d9  A1      : 0x3fc958c0  
A2      : 0x00000000  A3      : 0x3fc958e0  A4      : 0x403776d4  A5      : 0x3fc95b90  
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x4037c906  
A10     : 0x00116e96  A11     : 0x6001e000  A12     : 0x00000001  A13     : 0x3fc95b60  
A14     : 0x3fc988a8  A15     : 0x0000abab  SAR     : 0x00000004  EXCCAUSE: 0x00000007  
EXCVADDR: 0x3fc95b90  LBEG    : 0x400570e8  LEND    : 0x400570f3  LCOUNT  : 0x00000000  


Backtrace: 0x4037433d:0x3fc958c0 0x420067d6:0x3fc95980 0x42003289:0x3fc959b0 0x40375368:0x3fc959e0 0x40377d69:0x3fc95a00 0x40377e2a:0x3fc95a20 0x403769d1:0x3fc95a50 0x403776d1:0x3fc95a70 0x420067d6:0x3fc95b30 0x42003289:0x3fc95b60 0x40375368:0x3fc95b90 0x40377d69:0x3fc95bb0 0x40377e2a:0x3fc95bd0 0x403769d1:0x3fc95c00 0x403776d1:0x3fc95c20 0x420065da:0x3fc95ce0 0x420031df:0x3fc95d10 0x42003720:0x3fc95d40 0x40375374:0x3fc95d70 0x40377d69:0x3fc95d90 0x40377e2a:0x3fc95db0 0x403769d1:0x3fc95de0 0x403776d1:0x3fc95e00 0x420067d6:0x3fc95ec0 0x42003289:0x3fc95ef0 0x40375368:0x3fc95f20 0x40377d69:0x3fc95f40 0x40377e2a:0x3fc95f60 0x403769d1:0x3fc95f90 0x403776d1:0x3fc95fb0 0x420065da:0x3fc96070 0x420031df:0x3fc960a0 0x42003720:0x3fc960d0 0x40375374:0x3fc96100 0x40377d69:0x3fc96120 0x40377e2a:0x3fc96140 0x403769d1:0x3fc96170 0x403776d1:0x3fc96190 0x420067d6:0x3fc96250 0x42003289:0x3fc96280 0x40375368:0x3fc962b0 0x40377d69:0x3fc962d0 0x40377e2a:0x3fc962f0 0x403769d1:0x3fc96320 0x403776d1:0x3fc96340 0x420065da:0x3fc96400 0x420031df:0x3fc96430 0x42003720:0x3fc96460 0x40375374:0x3fc96490 0x40377d69:0x3fc964b0 0x40377e2a:0x3fc964d0 0x403769d1:0x3fc96500 0x403776d1:0x3fc96520 0x420067d6:0x3fc965e0 0x42003289:0x3fc96610 0x40375368:0x3fc96640 0x40377d69:0x3fc96660 0x40377e2a:0x3fc96680 0x403769d1:0x3fc966b0 0x403776d1:0x3fc966d0 0x420065da:0x3fc96790 0x420031df:0x3fc967c0 0x42003720:0x3fc967f0 0x40375374:0x3fc96820 0x40377d69:0x3fc96840 0x40377e2a:0x3fc96860 0x403769d1:0x3fc96890 0x403776d1:0x3fc968b0 0x420067d6:0x3fc96970 0x42003289:0x3fc969a0 0x40375368:0x3fc969d0 0x40377d69:0x3fc969f0 0x40377e2a:0x3fc96a10 0x403769d1:0x3fc96a40 0x403776d1:0x3fc96a60 0x420065da:0x3fc96b20 0x420031df:0x3fc96b50 0x42003720:0x3fc96b80 0x40375374:0x3fc96bb0 0x40377d69:0x3fc96bd0 0x40377e2a:0x3fc96bf0 0x403769d1:0x3fc96c20 0x403776d1:0x3fc96c40 0x420067d6:0x3fc96d00 0x42003289:0x3fc96d30 0x40375368:0x3fc96d60 0x40377d69:0x3fc96d80 0x40377e2a:0x3fc96da0 0x403769d1:0x3fc96dd0 0x403776d1:0x3fc96df0 0x420065da:0x3fc96eb0 0x420031df:0x3fc96ee0 0x42003720:0x3fc96f10 0x40375374:0x3fc96f40 0x40377d69:0x3fc96f60 0x40377e2a:0x3fc96f80 0x403769d1:0x3fc96fb0 0x403776d1:0x3fc96fd0 0x420067d6:0x3fc97090 0x42003289:0x3fc970c0 0x40375368:0x3fc970f0 |<-CONTINUES




ELF file SHA256: 06fca82c2

Describe the hardware setup
For us it is very important to know what is the hardware setup you're using in order to be able to help more directly

  • Motor: Standard BLDC Motor
  • Driver: DRV8300
  • Microcontroller: ESP32-S3
  • Sensor: Hall Sensor
  • Current Sensing: None

IDE you are using

  • Arduino IDE

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions