Torque-free precession of the symmetric top

Here we make a coin object, complete with principal vectors attached.

osulogo=; (* Paste in any images you like *)
cornell = ;coinWidth=.1;coinRadius=.8; faceHeads=ParametricPlot3D[{r Cos[θ],r Sin[θ],coinWidth/2},{θ,-π,π},{r,0,coinRadius},Mesh->None,
PlotStyle->{Opacity[1],Texture[cornell]},TextureCoordinateFunction->({#1,#2}&)][[1]];
faceTails=ParametricPlot3D[{r Cos[θ],r Sin[θ],-coinWidth/2},{θ,-π,π},{r,0,coinRadius},Mesh->None,
PlotStyle->{Opacity[1],Texture[osulogo]},TextureCoordinateFunction->({-#1,#2}&)][[1]];
coinBody=Cylinder[{{0,0,-coinWidth/2.01},{0,0,coinWidth/2.01}},coinRadius];
coin={coinBody,faceHeads,faceTails};
zero={0,0,0};e1hat = {1,0,0};e2hat = {0,1,0};e3hat = {0,0,1};
frame={Thick,Arrow[{zero,e1hat}],Arrow[{zero,e2hat}],Blue,Arrow[{zero,e3hat}]};
Graphics3D[{coin,frame},Boxed->False,PlotRange->1]

Choose an (OverVector[L]) and from that obtain (OverVector[ω]) by dividing by moments of inertia. 
Then decompose (OverVector[ω]) as a sum of something along (Subscript[(OverHat[e]), 3]) and along (OverVector[L]).
i.e. determine Ω and (OverTilde[ω])  (ω-tilde), which then gives the rotation.
For reference we leave the starting frame in place.

Lvec = {0,.2,1}; (* change the L here *)
ωvec = Inverse[DiagonalMatrix[{1,1,2}]].Lvec;  
Lhat = Lvec/Norm[Lvec];
ωhat = ωvec/Norm[ωvec];
soln=Solve[ωvec==a e3hat + b Lhat,{a,b}][[1]];
Ω=a/.soln;ωtilde=b/.soln;
path=ParametricPlot3D[RotationMatrix[θ,Lvec].e3hat,{θ,0,2π},PlotStyle->{Thick,Dashed,Blue},Axes->False,Boxed->False]; 
objects[t_]:= {path[[1]],{Thick,Red,Arrow[{zero,Lhat}]},{Gray,Opacity[.3],frame},{Thick,Green,Arrow[{zero,RotationMatrix[ωtilde t,Lvec].ωhat}]},{Rotate[Rotate[{coin,frame},Ω t,e3hat],ωtilde t,Lhat]}}
draw[t_] := 
Graphics3D[objects[t],Boxed->False,PlotRange->1.1,ViewPoint->{1,1/4,1}]
Tf=8π/ωtilde;
Animate[draw[t],{t,0,Tf}]

It is also instructive to draw the picture from the body-fixed frame, in which (OverVector[L]) and (OverVector[ω]) precess about (Subscript[(OverHat[e]), 3]).

drawBF[t_] := 
Graphics3D[{Rotate[Rotate[objects[t],-ωtilde t,Lhat],-Ω t,e3hat]},Boxed->False,PlotRange->1.1,ViewPoint->{1,1/4,1}]
Animate[drawBF[t],{t,0,Tf}]