Irregular engine running at very low speed with effect on engine noise

Hello!

With the closed-loop speed control “Velocity Control”, all of my tested motors make small jumps at very low speeds (approx. 0.1 to 0.3 rad/s), similar to a stepper motor, of approx. 1 to 1.5 degrees each. This causes problems when driving (direct drive with a wheel with a diameter of 120 mm).

In addition, this effect leads to a strong humming of the motor at “higher” speeds (I use up to 16 rad/s). In my opinion, this is due to the too coarse angular steps in the sine control or PID problem.

I tested this with gimbal motors with a diameter of 60 mm and 21 PP and another motor with 43 mm and 7 PP. All motors run completely silently with the gimbal electronics (tested up to 120 RPM) and linearly at an angular velocity of 5 degrees per minute (slow driving, almost at a standstill). The gimbal electronics are operated without a motor calibration table.

My software versions:

Arduino IDE 2.3.3
Simple FOC 2.3.4 (also tested with 2.1.1)
CPU: ESP32 (no current sensor)
Test program: 4_close_loop_velocity_example.ino
The same problem also occurs in open loop mode.

How can this phenomenon be eliminated?

Greetings from Bavaria
RomanF

What ia the driver board you’re using?

If the issue is both in open and closed loop operations this is probably a driver issue.
Could you show us a short video maybe?

Hallo!
Thank you very much for your answer!

I use Driver DRV8313 from Amazon.
I will send you the video in a few hours.

https://www.amazon.de/iHaospace-DRV8313-Brushless-Driver-Control/dp/B0CQ52JFY4

So it’s a mini clone.

Make sure not to connect this board as on pictures on Amazon. Connect the ground pin to the ground of your esp32 (or arduino if you are using it).
Your jumping issue could be caused by bad ground connection, for example if you use a digital pin as the ground pin.

Here are the docs where you can see how to connect the mini:


Motor 90 mm 21 PP
Velocity 0.1 rad/s
Original Test Program SimpleFOC ESP “4_close_loop_velocity_example”
No Current Sensor
12V DC

Is it also happening with velocity openloop ?

I had all +3.3V (Driver1, Driver2, ESP32) connected together (orange wire) now I disconnected this connection. Only (Driver1 +3.3V …Enable Driver1) and connection (Driver2 +3.3V …Enable Driver2) remained.

Unfortunately now everything remained unchanged. as you can see in the video the motor instead of moving steadily jumps!

open loop - exactly the same, only then it does not try to regulate the rotational speed. In a closed loop, when I brake the wheels with my fingers, it evens out the speed, but it still seems to jump. At higher speeds > 0.6 rad/s you can’t see the jumps, but the engine is loud because it probably jumps just as much.

In your video I dont see that the ground is connected. Please make sure to connect the common ground in addition to the PWM pins.

I have a common ground. I disconnected it too. Always the same.

I connected the original motor suggested in the program (YT2804) and it also does not rotate without jumps!

I have now connected the motors to the original MakerBase MKS ESP32 FOC V1.0 and it behaves exactly the same as my test hardware!

Did you test the motors at such low RPMs? Maybe the problem is somewhere in the FOC configuration. I tested them on unchanged Sources. Maybe they forgot something in the configuration? :frowning:

The libraries probably match because on the latest and on the proposed in the source Library 2.1.1 it always works the same way.

Very slow speed is hard to achieve.
Here is an example I recorded when experimenting with deadtime

It could be same issue you are facing.

Hey @RomanF,

Ok cool.

So what are the motors that you’re using?
What is their phase resistance?
Can you paste the code that you’re using?

If all these boards behave the same it might be in your code. :slight_smile:

Hello,
I use the original code from the Demo collection. item 4 _close_Loop_Velocity_example.ino. I compiled the code on many versions of simpleFOC libraries from 2.1.1 to the latest. Arduino 2.3.3 still the same problem.
I also tried on old versions of Arduino including 1.8

I use 21 pair motors 90mm with a winding resistance of 6 Ohms.
We use these motors for professional gimbals and they behave completely without making any sound.
They are also very linear, and basically do not need an angle table (We use tables because they improve linearity, which we have to control in a professional system).

I also tested on the motor that is in the description of the Demo program, but it also behaves so badly.

Best Regards

Hello,
Since I can’t find the reason for the poor operation of the engines for now, I started to identify and design the wheels for my project.

For the small engine, I found a very good and cheap tire with a diameter of 72 mm. As for my 90 mm engine, I tested a tire printed from soft material. This tire did not meet my expectations because it was relatively “slippery”. On the other hand, the tire made of a T2 RM 5.08 mm toothed belt is simply wonderful. It sticks to the ground like “glued”. It will be the best tire for moving the Robot because it will be possible to reflect its movement path very precisely. I also made the engine mounts to the vehicle frame with built-in AS5600 sensors. I am sending photos to our forum because it may interest one of the colleagues. If necessary, I will send STL files for these elements.

Regards
RomanF

1 Like

Do you have the same issue at slow velocity with trapezoidal commutation?

Unfortunately, SpaceVectorPWM and SinePWM still work best but unsatisfactorily, and TrapezodialPWM gives even worse results. For now, I don’t know what to do because I plan to use drives with 90 mm motors for a robot with a two-wheel drive and two passive omnirad wheels. In order for it to move precisely around the rooms, I would like to drive as precisely as possible with two wheels with a narrow tread. This method, together with lidar, would provide stable and linear movement.

This is very strange. It’s true that moving very slowly is difficult, but your results are far more “steppy” than mine. It depends strongly on the motor you use. I wonder where the problem is.

For example I have some eMax 4010 motors which have 11 pole pairs and very little cogging. When I drive them in velocity closed loop I can make them turn quite smoothly even at 0.1rad/s. If you look very closely you can see little “steps” to the movement, but nothing like yours. I’ll try to make a video for you.

Is it due to the cogging of the motor?

I see you’re using something like a Wemos ESP32 module? Is it using WiFi at the same time as driving the motors?

I chose the module only because of the ESP32. I don’t use radio connections yet. These jumps are also strange to me. My company uses the same engines for professional gimbals for 40 kg cameras. They work very accurately there. To me it looks like the position table has too big jumps. But it may be a problem with the PID, unfortunately I tested different settings but there was no big improvement. I also used the same engine as in DEMO 4008 and it jumps like that too!

For what it’s worth, I was just setting up a new motor and it was stepping in open loop velocity at 1 amp, but smoothed out with 2 amps. I think too high current can also cause stepping in open loop, but more snappy rather than the sluggish stepping of too low current.

DRV8313 has current sense, and I’d recommend getting that set up before worrying too much about motion tuning. The voltage-based current limiting needs fiddly tuning of the resistance, kv, and velocity lowpass, and is never as good as real current sense.

EDIT: Sorry, I was thinking of DRV8316. DRV8313 does not have current sense. So you will have to do the fiddly tuning, if you haven’t already.

1 Like

Thank you for sharing!
Your project seams to be similar to a procet i’m working since some time because you are also wondering for a drive system for very low speed.
Atm. i’m thinking abaut using stepper motors instead of regular BLDCs for the good torque at low speed. I don’t find any torque curve for Gimbal motors, so i don’t mind for it, - do you have, or know where to get, curves for the motors you use?
I share your experience with using synchronus belts to get grip to the ground, it works very well also at raw ground if one turne the tooth outside. The only prob i have is the size of the stones at the arable floor i have to drive at. At a model size crawler a stone with just 5mm diameter is a monster… :slight_smile:

Regards
Herbert