Arduino-FOC icon indicating copy to clipboard operation
Arduino-FOC copied to clipboard

Update teensy4_mcu.cpp _writeDutyCycle6PWM to handle phase_state to allow disabling the motor

Open Ragiton opened this issue 2 months ago • 1 comments

Handles phase_state on Teensy 4.1 so that PWM pins will be disabled when motor.disable() is called.

Description

This is only for Teensy 4. This enables coasting the motor on drivers where the enable pin does not fully disable the driver and all 6 PWM pins must be disabled. Without this, the motor would lock up when calling motor.disable() due to PWM pins still being active when using driver board: https://www.sparkfun.com/sparkfun-brushless-motor-driver-3-phase-tmc6300.html

Type of change

Bug fix (non-breaking change which fixes an issue)

How Has This Been Tested?

Motor spins freely when calling motor.disable()

Test Configuration/Setup:

  • Hardware: https://www.sparkfun.com/sparkfun-brushless-motor-driver-3-phase-tmc6300.html
  • IDE: Platformio
  • MCU package version: Teensy 4.1

Ragiton avatar Nov 05 '25 21:11 Ragiton

Very nice, thank you for this contribution!

Do you know when the phase-state setting takes effect? Is it right away, or is it also related to the line in write_pwm_pair():

flexpwm->MCTRL |= FLEXPWM_MCTRL_LDOK (1<<submodule) ; // signal new values

If its immediate I would have said its better to pre-compute the changes for all three phases and set them at the same time?

runger1101001 avatar Dec 03 '25 21:12 runger1101001

This could probably be optimised further as @runger1101001 said, but I think its ok for the moment I think. It is already a very nice addition.

askuric avatar Dec 18 '25 18:12 askuric