The calibration is all taken care of now. I have now switched to a 3.5 inch hard drive, which is the final size that I want to use. I got the hard drive motor to calibrate successfully. The motor beeped, there were no errors, and the numbers measured were reasonable. The phase resistance is 1.335 ohms and the phase inductance is 0.000286 H now for reference. It has 6 pole pares, and the motor kv is about 500. I still want to turn the motor at 7200 rpm using sensor less control.
I took your suggestion for the parameters, and that helped.
I presume, that the sinusoid for the current, should always be 6 times the frequency as the rotation of the motor. At low speeds, below 2400 rpm, the current waveform is not synchronized with the motor, and the motor is actually turning faster. The waveform I see with the current probe is a sinusoid from the PWM added to a sinusoidal of lesser amplitude at six times the frequency of the rotation of the motor. Decreasing the current control bandwidth helps make the waveform look more like a pure sinusoid but would not force the motor to synchronize with it. The current and spinning lose synchronization during the spin up. Because I want to turn the motor at 7200 rpm, I do not care about the behavior in this region, and I can let it take minutes to spin up to that speed if I have to, so a weird operating region is not a fatal problem
If the current or velocity set point are high enough the current can increase in frequency until it is close to 6 times the rotation of the motor. Then the current synchronizes with the spinning of the motor. Every time I’ve seen this happen, t0he current set point was much higher than the current needed to maintain the motor at some steady state velocity, so velocity increases approximately linearly with time.
With that taken care of, I have not yet gotten the motor running like I would like.
Unfortunately, the controller cannot settle to a constant speed above 2400 rpm, because it appears there is a limit to the amplitude in current the ODrive can put out. I have been trying to figure out the dependence of that limit on frequency, and it appears that the limit decreases with decreasing frequency in the region around 7200 rpm. I cannot achieve a current small enough with frequency high enough to maintain a steady 7200 rpm. If the controller brings the current too low, the frequency of the PWM sinusoid suddenly drops to around 100 Hz.
I tried decreasing motor.config.requested_current_range to less than 15 and that did not seem to make any difference.
Is there a way to decrease the lowest possible current amplitude? This includes modifying the algorithms in the firmware.
my current proportional current gain is on the order of 0.001
my current integrator gain is 0
my current control bandwidth is 29 (That is small, but it seemed to be the number the where the velocity converges the best.)
Here is a screenshot from of oscilloscope showing the behavior of the current when it suddenly cuts down in frequency.
The green trace is a square wave at 120 Hz (7200 cycles per minute) from a function generator. I am not doing anything with it this instance but it is a reference for 7200 rpm. The blue brace is me using a laser, photo detector, and rough area on the hard drive pallet to observe the actual rotation speed. Comparing it to the green trace it appears the controller is converting on 7200 rpm before the frequency cuts down. The pink trace is the current picked up by a current probe. (The DC offset is an artifact of the probe.)
This is the same thing with a longer time scale.