Need help understanding how the driver drv8301 work


#1

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.


#2

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.


#3

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


#4

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.


#5

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


#6

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.


#7

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:


#8

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 ?


#9

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.


#10

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


#11

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