simplefoc / Arduino-FOC

Arduino FOC for BLDC and Stepper motors - Arduino Based Field Oriented Control Algorithm Library
https://docs.simplefoc.com
MIT License
2.06k stars 530 forks source link

Lowside current sense initialization causes ESP32 Core Panic exceptions in 2.2.2 version #188

Closed kimiolek closed 2 years ago

kimiolek commented 2 years ago

Hi, I'm playing with simplefoc lib and lowside current sense a little bit. I add a current sense oject to my code like LowsideCurrentSense cs = LowsideCurrentSense(0.015f, 20.0f, CS_A, CS_B); and in setup() call init method cs.init(); the esp32 get core panic exception, exactly in this line, when I comment it no problem exists.

Serial monitor output:

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13516
load:0x40080400,len:3604
entry 0x400805f0
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400d3d90  PS      : 0x00060830  A0      : 0x800d1500  A1      : 0x3ffb27d0  
A2      : 0x3ffc1440  A3      : 0x3ffc1480  A4      : 0x0800001c  A5      : 0x00000003  
A6      : 0x00000001  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x3ffb27a0  
A10     : 0x3ffb9115  A11     : 0x3ff5e000  A12     : 0x00000000  A13     : 0xffffcfc7  
A14     : 0x000061a8  A15     : 0x00000000  SAR     : 0x0000001d  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000020  LBEG    : 0x40085f58  LEND    : 0x40085f63  LCOUNT  : 0x00000000  

Backtrace:0x400d3d8d:0x3ffb27d00x400d14fd:0x3ffb27f0 0x400d5622:0x3ffb2820 
ELF file SHA256: 0000000000000000
Rebooting...

The problem ocurres in version 2.2.2 of simplefoc. In 2.2.1 it seems to be good, there is no core panic error.

Hardware setup:

IDE

askuric commented 2 years ago

Hey @kimiolek,

Maybe a stupid question but did you link the driver and the current sense:

cs.linkDriver(&driver);
micology-code commented 2 years ago

Same thing happen to me Simple FOC 2.2.2 PlatformIO Core 6.0.2·Home 3.4.2 Espressif 32 Platform 4.4.0

edit: Simple FOC 2.2.1 don't have this problem

platformio.ini

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = askuric/Simple FOC@^2.2.2
lib_archive = false
monitor_filters = esp32_exception_decoder
monitor_speed = 115200
build_type = debug

Code

#include <SimpleFOC.h>

InlineCurrentSense current_sense = InlineCurrentSense(0.01, 50.0, 33, 35);

void setup() {
  Serial.begin(115200);

  current_sense.init();

  Serial.println("Current sense ready.");
}

void loop() {
}

Serial output

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400d1f5d  PS      : 0x00060830  A0      : 0x800d221c  A1      : 0x3ffb27d0
A2      : 0x3ffc1448  A3      : 0x3ffbdbec  A4      : 0x0800001c  A5      : 0x00000003
A6      : 0x00000001  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x3ffb2770
A10     : 0x00000001  A11     : 0x00000021  A12     : 0x00000023  A13     : 0xffffcfc7
A14     : 0x3ffb7e48  A15     : 0x00000000  SAR     : 0x00000003  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000020  LBEG    : 0x40085e78  LEND    : 0x40085e83  LCOUNT  : 0xffffffff

Backtrace:0x400d1f5a:0x3ffb27d00x400d2219:0x3ffb27f0 0x400d3ae7:0x3ffb2820
  #0  0x400d1f5a:0x3ffb27d00 in InlineCurrentSense::init() at .pio/libdeps/esp32dev/Simple FOC/src/current_sense/InlineCurrentSense.cpp:25
askuric commented 2 years ago

@micology-code
Thanks for this you are absolutely right. This was a bug of our implementation. We've updated the library and the new release will have the fix. For now it is in the dev.