IMU as position sensor


I am interested in developing a 3 axis gimbal firmware with SimpleFOC.
While most gimbals use encoders and IMUs I have noticed some manage to get a reasonable performance with using IMUs only.

This made me think about the following idea:
Assuming a simple case of 1 axis gimbal.
The IMU’s pitch angle is used as an error input to the PID controller which calculates a command to the open loop velocity control. this will always drive the motor in order to achieve a 0 angular error and thus have a stabilized gimbal.

While it is not ideal, after some tunning it might work, does it makes sense?

It makes sense - and it could work. You may need to do some smoothing and hysteresis on the IMU values to keep the gimbal from “jerking around”. You would have to write this outer control loop in any case, regardless of whether the motor has sensors or not…

But in this kind of configuration the gimbal motors are running in open-loop mode. Since most of the time they are “holding position” they might get quite hot - you’ll have to experiment. The advantage of adding the sensors on the motor shaft is that you can use closed-loop mode on the motor driving, which will use much less energy and therefore the motors will not heat as much…

thanks for the replay.

The heating issue is a good point.
By using the IMU I was hoping to create a closed loop control (maybe I used the wrong terminology).
If I get the angle and angular velocity from the IMU and implement this: Generic sensor | Arduino-FOC.
I guess it should work as closed loop and thus avoid the motor heating up?

You can try it, but I am guessing it won’t work well - the precision required for FOC control is very high, and I don’t think the IMU will be sufficiently precise, and probably also not fast enough in terms of bandwidth/response times.
Typically people use 12-14bit precision encoders - they have low latency and high precision.

But if you decide to try it, please let us know about your experiences!