Need help understanding how the driver drv8301 work

Hi, i’m Matteo, i’m a student form Italy.
I’m building up a 6 axis robot and i need help on controlling some brushless motor. I was undecided on what type of motor i need to use, because the 2 first axis need a geardown reduction (that i alredy have), initially i thought about using some stepper motor but they are too slow for this application. So while i was searching online i found this open-source project. As a Automation Student i was trying to understand how the Driver DRV8301 can control the position of the motor, even without an encoder. Could someone help me understanding how it works ?
What type of wave do you have to send to the 3 or 6 PWM control on the driver ?
My idea is to have an arduino instead of the STM32F405RGT6 Microcontroller.
Thanks for the help.

Actually you need an encoder.

ODrive uses the 6-signal type. I would suggest that you read about Space Vector Modulation in this thesis..

I would strongly advice against that. I would suggest that you broaden your horizons outside the world of Arduino instead. STM32’s are quite popular, and it’s a good investment to learn.

1 Like

thanks for answrering me, i’m here because i want to learn, so i wiil follow your suggestion.
STM32 is a 32 bit microcontroler just like the Microchip one’s, am i right ? Because i’m used to use those ones.
Another question, is the board using the BFEM methos to find the current position ? What kind of PWM wave are u generating for the driver ?
Thanks for the help

Yes it’s a 32 bit microcontroller. No the controller doesn’t use back-emf to find the position, it uses the encoder. We do have a sensorless implementation also, but that can’t do position control through zero speed. The waveform is called Space Vector Modulation, the one I was suggesting to go read about before.

Ok, i’ve read and also searched on other book about SVM. after i spent a lot of time reading,I think that i understood how it works.
So, then, how the control position interact with the motor control ? I read the pulse from the encoder and i stop powering the motor when i’m in position ? or you keep the motor sequence under control and you calculate where to stop during the sequence ?
Thanks again

Next thing to read about is PID control ;D There are many good resources you can find.
The motor current is proportional to torque, which is the output of the PID controller.

ok, now i understand what kind of controll is used on this board. I’ll search for some more info.
Thanks for the support :wink:

wait, the torque is the output of the pid ? so what i’ve got at the entrance of my closed loop system ?
I know the current motor position and where i need to go, and then ?

Where you need to go is the “reference signal” aka input. Current motor position is the “feedback signal” and the current/torque is the output of the controller, which feeds to the motor.

Another question, Don’t you need to know in wich position the rotor is to start the switch sequence in the correct way ?

Yes, you do. This is actually automatically measured using a calibration routine. It needs the motor to be free to turn, then drives a large current and sees where the motor goes on the encoder.

https://github.com/madcowswe/ODrive/blob/master/Firmware/MotorControl/low_level.c#L768