Skip to content

Conversation

thomasfla
Copy link

Current Sense for RP2350

warning Work in progress

Implementation of current sensing on RP2350 using the PIO to read SPI based ADCs.
Wiring:

  • SCK_PIN -> Clock pin shared with 3 ADCs
  • CSB_PIN -> Chip Select pin shared with 3 ADCs
  • D0, D1 D2 -> The 3 data output from the ADCs. Needs to be contigus (D1=D0+1 D2=D1+1)

Temporarly, for this to work, we need to add a PWM chanell in Arduino-FOC rp2040 hardware specific files. The duty cyctle needs to be computed to trigger the ADC at the right-time.

TODO:

  • Init a the DMA or IRQ to read samples from PIO.
  • Activate the push of adc data in PIO program (disabled for tests)
  • Find a way to setup the trigger PWM from the driver, or change the arduino-foc lib.

@runger1101001 runger1101001 marked this pull request as draft September 3, 2025 14:52
@runger1101001
Copy link
Member

I changed it into draft mode - that way it can’t be merged by accident…

Copy link

github-actions bot commented Sep 3, 2025

Memory usage change @ 4aa83b6

Board flash % RAM for global variables %
rp2040:rp2040:rpipico 🔺 +20 - +20 0.0 - 0.0 🔺 +16 - +24 +0.01 - +0.01
Click for full report table
Board examples/drivers/drv8316/drv8316_3pwm
flash
% examples/drivers/drv8316/drv8316_3pwm
RAM for global variables
% examples/drivers/drv8316/drv8316_6pwm
flash
% examples/drivers/drv8316/drv8316_6pwm
RAM for global variables
% examples/encoders/calibrated_sensor/calibration_save
flash
% examples/encoders/calibrated_sensor/calibration_save
RAM for global variables
% examples/encoders/linearhall
flash
% examples/encoders/linearhall
RAM for global variables
% examples/encoders/mt6816/mt6816_spi
flash
% examples/encoders/mt6816/mt6816_spi
RAM for global variables
%
rp2040:rp2040:rpipico 20 0.0 16 0.01 20 0.0 16 0.01 20 0.0 16 0.01 20 0.0 24 0.01 20 0.0 24 0.01
Click for full report CSV
Board,examples/drivers/drv8316/drv8316_3pwm<br>flash,%,examples/drivers/drv8316/drv8316_3pwm<br>RAM for global variables,%,examples/drivers/drv8316/drv8316_6pwm<br>flash,%,examples/drivers/drv8316/drv8316_6pwm<br>RAM for global variables,%,examples/encoders/calibrated_sensor/calibration_save<br>flash,%,examples/encoders/calibrated_sensor/calibration_save<br>RAM for global variables,%,examples/encoders/linearhall<br>flash,%,examples/encoders/linearhall<br>RAM for global variables,%,examples/encoders/mt6816/mt6816_spi<br>flash,%,examples/encoders/mt6816/mt6816_spi<br>RAM for global variables,%
rp2040:rp2040:rpipico,20,0.0,16,0.01,20,0.0,16,0.01,20,0.0,16,0.01,20,0.0,24,0.01,20,0.0,24,0.01

…sing the same PIO with different state machine, ans also be compatible with other library that uses other PIOs (encoder for example)
Copy link

Memory usage change @ ff1108c

Board flash % RAM for global variables %
rp2040:rp2040:rpipico 🔺 +20 - +20 0.0 - 0.0 🔺 +16 - +24 +0.01 - +0.01
Click for full report table
Board examples/drivers/drv8316/drv8316_3pwm
flash
% examples/drivers/drv8316/drv8316_3pwm
RAM for global variables
% examples/drivers/drv8316/drv8316_6pwm
flash
% examples/drivers/drv8316/drv8316_6pwm
RAM for global variables
% examples/encoders/calibrated_sensor/calibration_save
flash
% examples/encoders/calibrated_sensor/calibration_save
RAM for global variables
% examples/encoders/linearhall
flash
% examples/encoders/linearhall
RAM for global variables
% examples/encoders/mt6816/mt6816_spi
flash
% examples/encoders/mt6816/mt6816_spi
RAM for global variables
%
rp2040:rp2040:rpipico 20 0.0 16 0.01 20 0.0 16 0.01 20 0.0 24 0.01 20 0.0 16 0.01 20 0.0 16 0.01
Click for full report CSV
Board,examples/drivers/drv8316/drv8316_3pwm<br>flash,%,examples/drivers/drv8316/drv8316_3pwm<br>RAM for global variables,%,examples/drivers/drv8316/drv8316_6pwm<br>flash,%,examples/drivers/drv8316/drv8316_6pwm<br>RAM for global variables,%,examples/encoders/calibrated_sensor/calibration_save<br>flash,%,examples/encoders/calibrated_sensor/calibration_save<br>RAM for global variables,%,examples/encoders/linearhall<br>flash,%,examples/encoders/linearhall<br>RAM for global variables,%,examples/encoders/mt6816/mt6816_spi<br>flash,%,examples/encoders/mt6816/mt6816_spi<br>RAM for global variables,%
rp2040:rp2040:rpipico,20,0.0,16,0.01,20,0.0,16,0.01,20,0.0,24,0.01,20,0.0,16,0.01,20,0.0,16,0.01

@runger1101001
Copy link
Member

I was just about to ask you for the #if conditional compilation :-) thanks so much!

Thanks for all your amazing effort on this!

Copy link

Memory usage change @ 488eff6

Board flash % RAM for global variables %
adafruit:samd:adafruit_metro_m4 0 - 0 0.0 - 0.0 N/A N/A
arduino:avr:nano 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
rp2040:rp2040:rpipico 🔺 +20 - +20 0.0 - 0.0 🔺 +16 - +24 +0.01 - +0.01
arduino:sam:arduino_due_x 0 - 0 0.0 - 0.0 N/A N/A
arduino:samd:nano_33_iot 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
esp32:esp32:esp32 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
esp32:esp32:esp32s2 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F411RE 0 - 0 0.0 - 0.0 0 - 0 0.0 - 0.0
Click for full report table
Board examples/drivers/drv8316/drv8316_3pwm
flash
% examples/drivers/drv8316/drv8316_3pwm
RAM for global variables
% examples/drivers/drv8316/drv8316_6pwm
flash
% examples/drivers/drv8316/drv8316_6pwm
RAM for global variables
% examples/encoders/calibrated_sensor/calibration_save
flash
% examples/encoders/calibrated_sensor/calibration_save
RAM for global variables
% examples/encoders/linearhall
flash
% examples/encoders/linearhall
RAM for global variables
% examples/encoders/mt6816/mt6816_spi
flash
% examples/encoders/mt6816/mt6816_spi
RAM for global variables
% examples/drivers/simplefocnano/simplefocnano_atmega
flash
% examples/drivers/simplefocnano/simplefocnano_atmega
RAM for global variables
% examples/encoders/calibrated_sensor/calibrated
flash
% examples/encoders/calibrated_sensor/calibrated
RAM for global variables
%
adafruit:samd:adafruit_metro_m4 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A
arduino:avr:nano 0 0.0 0 0.0 0 0.0 0 0.0
rp2040:rp2040:rpipico 20 0.0 16 0.01 20 0.0 16 0.01 20 0.0 24 0.01 20 0.0 16 0.01 20 0.0 16 0.01
arduino:sam:arduino_due_x 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A 0 0.0 N/A N/A
arduino:samd:nano_33_iot 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0
esp32:esp32:esp32 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0
esp32:esp32:esp32s2 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0
STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0
STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F411RE 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0
Click for full report CSV
Board,examples/drivers/drv8316/drv8316_3pwm<br>flash,%,examples/drivers/drv8316/drv8316_3pwm<br>RAM for global variables,%,examples/drivers/drv8316/drv8316_6pwm<br>flash,%,examples/drivers/drv8316/drv8316_6pwm<br>RAM for global variables,%,examples/encoders/calibrated_sensor/calibration_save<br>flash,%,examples/encoders/calibrated_sensor/calibration_save<br>RAM for global variables,%,examples/encoders/linearhall<br>flash,%,examples/encoders/linearhall<br>RAM for global variables,%,examples/encoders/mt6816/mt6816_spi<br>flash,%,examples/encoders/mt6816/mt6816_spi<br>RAM for global variables,%,examples/drivers/simplefocnano/simplefocnano_atmega<br>flash,%,examples/drivers/simplefocnano/simplefocnano_atmega<br>RAM for global variables,%,examples/encoders/calibrated_sensor/calibrated<br>flash,%,examples/encoders/calibrated_sensor/calibrated<br>RAM for global variables,%
adafruit:samd:adafruit_metro_m4,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A
arduino:avr:nano,,,,,,,,,,,,,0,0.0,0,0.0,,,,,0,0.0,0,0.0
rp2040:rp2040:rpipico,20,0.0,16,0.01,20,0.0,16,0.01,20,0.0,24,0.01,20,0.0,16,0.01,20,0.0,16,0.01,,,,
arduino:sam:arduino_due_x,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A,0,0.0,N/A,N/A,,,,
arduino:samd:nano_33_iot,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,,,,
esp32:esp32:esp32,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,,,,,0,0.0,0,0.0,,,,
esp32:esp32:esp32s2,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,,,,
STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,,,,,,,,
STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F411RE,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,,,,,0,0.0,0,0.0

@runger1101001 runger1101001 self-assigned this Sep 24, 2025
@runger1101001 runger1101001 added the enhancement New feature or request label Sep 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants