We levitate the plate by controlling three vertical degrees of freedomone translational, and two tilts. Right now even without applying controls to the horizontal direction, the system is quite stable.
Here we describe the major steps for achieving levitation:
1. Move the plate close to the equilibrium point by using the DC motors and strain gauge.
We started off from the point where the magnetic force is stronger than the gravity force. Basically, the plate is touching tips of DC motors mounted on the top fixed platform. By using the strain gauge attached to the tips, we can tell how how far we are away from the equilibrium point where the strain gauges are not stretched. We slowly actuate the motors to push the plate close to the equilibrium point.
2. Lock one degree of freedom
We started from some generic PID controller. After many random trials, we end up with a controller that was barely doing the work, and the system was marginally stable. We then measured the closedloop transfer function of the system and use simulink to model this one degree of freedom: and
After tuning various parameters, we got a reasonable match between the model and the measurement. In particular, the parameters we found go as follows:
mass = 0.5 kg % mass
K = 180 N/m % negative spring constant
Vm = 250 V/m % hall effect sensitivity
Gby = 27dB % the bypass gain from the coil to the hall effect sensor
Gcomp = 39.5dB % the residue bypass gain after compensation
To obtain a better controller, we tried to use "sltunable" class in the matlab, in particular using the functions "systune" and "looptune" by specifing the target phase and gain margin. Somehow, it did not produce the desired result. We found out that the calculated phase margin and gain margin are not correct (we will explain this in more details with another elog entry). We then used "nyquist" function to design the feedback loop and we used the following parameters for the controller, which gives a reasonable phase and gain margins.
DGain = 4*pi*13; % the constant gain
Dzs = [2*pi*0.5; 2*pi*3]; % zeros for the controller
Dps = [0;2*pi*13]; % poles for the controller
After applying this new controller, we got a quite stable levitation. We redid the openloop transfer function measurement. The agreement between the model and the system is shown by the figure below (the blue line is the model and the green line is the measurement data):
The difference around 4Hz and 20Hz could arise from a simplified model for the compensation (assuming a constant compensation gain, and the reality is more complicated), and we need to refine the model.
2. Repeat the same process and tune the feedback controllers for the other two degrees of freedom.
3. Slowly ramp up the gain for the other two controllers and finally levitate all three DOFs.
We found that if we engage the controllers abruptly, the system will rapidly destabilized. Instead, we had to slowly ramp up the gain of the controllers so as to approach the final stable state softly.
The figure below shows the signal from all seven sensors (one redundant in the horizontal direction).
We can see the resonant frequency is around 2Hz (to be confirmed by future TF measurements), which is quite high. After fully characterizing the system, we will need to tune the DC magnet force with DC control coils to make the equilibrium point closer to the force maximum, where the rigidity is low.

Here is the link to the video of the levitating plate: link
