Item 0145
DESIGN:
ElectrotorPlus ~ MRGA - Gyro - DatabaseELECTROTOR - Gyro ~ Database Supporting Information
![]()
FORMS:

![]()
The following is not on the forms; at present.
The maximum Processional Frequency [OmegaZ] = [Max Sector at 15º teeter] / [Interval] = 0.004614 rad / 0.00278 sec = 1.66 rad/sec.
The maximum Processional Frequency [OmegaZ] = Precession [OmegaY] @ Max Torque [QX] / [JmZ] = 460 / 277 = 1.66 rad/sec.
Note that only half the torque generated by the rotorhub will go to the gyro. The other half will go directly to the mast.
![]()
Coding:
Module for Gyro form:
Option Compare Database
Option Explicit
Private Sub Calculate_Gyro_Data_Click()
On Error GoTo Err_Calculate_Gyro_Data_Click
Dim Sector As Integer 'To step through Sectors in 90-deg about Z-axis.
Dim DegR As Single 'Rotorhub asimuth on Z-axis in degrees.
Dim RadR As Single 'Rotorhub asimuth on Z-axis in radians.
'### Dim DegX As Single 'Teeter on X-axis in degrees.
'### Dim RadX As Single 'Teeter on X-axis in radians.
Dim QX As Single 'Torque about X-axis at each sector.
Dim StartTime As Single 'Accumulative time at start of Sector.
Dim EndTime As Single 'Accumulative time end of Sector.
Dim MidSectorTime As Single 'Time at mid location in a Sector.
Dim PreviousBeta As Single 'Blade flap (in radians) at start of time interval.
Dim StartBeta As Single 'Blade flap (in radians) at time interval.
Dim EndBeta As Single 'Blade flap (in radians) at time interval.
Dim MidSectorBeta As Single 'Blade flap (in radians) at time interval.
Dim BetaDeg2 As Single 'Blade flap (in degrees) at time interval. '### Because BetaDeg is used in form.
Dim OmegaX As Single 'Angular speed about X-axis.
Dim OmegaY As Single 'Angular speed about Y-axis.
Dim AlphaX As Single 'Angular acceleration of precession.
Dim AlphaY As Single 'Angular acceleration of precession.
Dim QY As Single 'Torque about Y-axis at each sector.
Dim LX As Single 'Angular momentum about X-axis at each sector.
Dim LY As Single 'Angular momentum about Y-axis at each sector.
Dim DeltaY As Single 'Incremental change in pitch/roll about Y-axis for 1 rotoation (360-deg) of the rotorhub.
Dim dbs As Database
StartTime = 0 'Set initial accumulative time value to zero.
EndTime = 0 'Set initial accumulative time value to zero.
StartBeta = 0 'Set initial teeter angle to zero.
EndBeta = 0 'Set initial teeter angle to zero.
Set dbs = CurrentDb
For Sector = 1 To (SectorsR / 4) Step 1 'Loop through sectors.
EndTime = StartTime + Me!Interval 'Set to the time at the end of the current sector.
MidSectorTime = StartTime + (Me!Interval / 2) 'Set the azimuth of bladeA to the mid position in the current sector.
'Post data to [Gyro] table.
'----------- ~ Z-axis ~ -----------------
RadR = (MidSectorTime / 1) * Me!OmegaR
dbs.Execute "UPDATE Gyro SET PsiRrad = " & RadR _
& " WHERE Sector = " & Sector & ";" 'Mid Azimuth of bladeA in current Sector, in degrees.
DegR = convert((RadR), "Radian", "Degree") 'Get angle in first quadrant.
dbs.Execute "UPDATE Gyro SET PsiRdeg = " & DegR _
& " WHERE Sector = " & Sector & ";" 'Mid Azimuth of bladeA in current Sector, in radians.
'----------- ~ X-axis ~ -----------------
MidSectorBeta = Me!BetaRad * Sin(OmegaR * MidSectorTime) 'Agorithim from Wikipedia [Sine wave],The amount of teeter (in radian) in the middle of the current sector.
dbs.Execute "UPDATE Gyro SET Beta = " & MidSectorBeta _
& " WHERE Sector = " & Sector & ";"
BetaDeg2 = MidSectorBeta * 57.278195 'Convert teeter from radians to degrees at the current sector
dbs.Execute "UPDATE Gyro SET BetaDeg = " & BetaDeg2 _
& " WHERE Sector = " & Sector & ";"
QX = Me![CF] * 2 * Sin(-[MidSectorBeta]) * Me![ee] 'Torque from teetering rotorhub.
dbs.Execute "UPDATE Gyro SET QX = " & QX _
& " WHERE Sector = " & Sector & ";"
StartBeta = Me!BetaRad * Sin(OmegaR * StartTime) 'Work out the amount of teeter (in radian) in the middle of the current sector
EndBeta = Me!BetaRad * Sin(OmegaR * EndTime) 'Work out the amount of teeter (in radian) in the middle of the current sector
OmegaX = (EndBeta - StartBeta) / Me!Interval 'Angular velocity about the X-azis.
dbs.Execute "UPDATE Gyro SET OmegaX = " & OmegaX _
& " WHERE Sector = " & Sector & ";"
LX = Me!JmXY * OmegaX 'Angular momentum.
dbs.Execute "UPDATE Gyro SET LX = " & LX _
& " WHERE Sector = " & Sector & ";"
AlphaX = (EndBeta - StartBeta) * Me!Interval ^ 2 'Angular Acceleration.
dbs.Execute "UPDATE Gyro SET AlphaX = " & AlphaX _
& " WHERE Sector = " & Sector & ";"
'----------- ~ Y-axis ~ -----------------
OmegaY = (QX * (Me!SplitQR / 100)) / (Me!JmXY * OmegaX) 'Angular velocity about the Y-axis.
dbs.Execute "UPDATE Gyro SET OmegaY = " & OmegaY _
& " WHERE Sector = " & Sector & ";"
QY = QX '##### THIS IS PROBABLY WRONG. 'Torque.
dbs.Execute "UPDATE Gyro SET QY = " & QY _
& " WHERE Sector = " & Sector & ";"
LY = Me!JmXY * OmegaY 'Angular momentum.
dbs.Execute "UPDATE Gyro SET LY = " & LY _
& " WHERE Sector = " & Sector & ";"
AlphaY = 1234 'Angular Acceleration. '#### THIS HAS NOT YET BEEN CALCULATED
dbs.Execute "UPDATE Gyro SET AlphaY = " & AlphaY _
& " WHERE Sector = " & Sector & ";"
DeltaY = 0.1234 '#### THIS HAS NOT YET BEEN CALCULATED
dbs.Execute "UPDATE Gyro SET DeltaY = " & DeltaY _
& " WHERE Sector = " & Sector & ";"
'----------------------------------------
StartBeta = EndBeta
StartTime = StartTime + Me!Interval
Next Sector
Set dbs = Nothing
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Gyro Data"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms![Gyro Data].Refresh
Exit_Calculate_Gyro_Data_Click:
Exit Sub
Err_Calculate_Gyro_Data_Click:
MsgBox Err.Description
Resume Exit_Calculate_Gyro_Data_Click
End Sub
Private Sub View_Gyro_Data_Click()
On Error GoTo Err_View_Gyro_Data_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Gyro Data"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms![Gyro Data].Refresh
Exit_View_Gyro_Data_Click:
Exit Sub
Err_View_Gyro_Data_Click:
MsgBox Err.Description
Resume Exit_View_Gyro_Data_Click
End Sub
'## This is for later use if there is the desire to vary the number of SectorsR
Public Sub PRELIMINARY()
'This function is for loading table with records
Dim Sector As Integer 'ID of local Sector.
Dim dbs As Database
Dim rst As Recordset
Dim strSQL As String
Dim MomentOfInertia As Single 'Local moment of inertia of blade about flapping hinge (or ctr of rotation). [slug ft2].
Dim FormerRadius As Single 'The radius of the previous Sector.
FormerRadius = 0 'Set to center of mast.
On Error GoTo PRELIMINARY_Err
Set dbs = CurrentDb
For Sector = 1 To SectorsR Step 1 'Loop through SectorsR
'Construct SQL string.
strSQL = "SELECT mm, rr FROM Sector WHERE Sector = " & Sector & ";"
'Open snapshot-type Recordset object.
Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
If (Sector < SectorsR) Then
'Set radius to mid point in Sector.
MomentOfInertia = rst.Fields!mm * ((FormerRadius + rst.Fields!rr) / 2) ^ 2
Else
'Set last Sector to very end since cap and tip weight are large part
'of the weight at this Sector.
MomentOfInertia = rst.Fields!mm * rst.Fields!rr ^ 2
End If
'Post data to [Sector] table.
dbs.Execute "UPDATE Sector SET Ib = " & MomentOfInertia _
& " WHERE Sector = " & Sector & ";"
FormerRadius = rst.Fields!rr 'Move current radius to former radius.
Next Sector
rst.Close
Set dbs = Nothing
PRELIMINARY_Exit:
Exit Sub
PRELIMINARY_Err:
MsgBox Err.Description
Resume PRELIMINARY_Exit
End Sub
![]()
Symbols:
Sine is opposite over hypotenuse. sin(90º) = 1
Cosine is adjacent over hypotenuse. cos(90º) = 0
Blue is symbol in Web text.
Green is symbol in Access database.![]()
Symbols:
To be later merged with the above.Blue is symbol in Web text.
Green is symbol in Access database.
Precession of Gyroscope:
Forget the below two and use
[Source ~ RW p.117] ???![]()
I have asked on Eng-Tips
Mechanical engineering other topicsI have a situation where the Angular Momentum of a rotor is known and I wish to apply a sinusoidal force, parallel to the primary axis of rotation, on this ring. The frequency of this force is constant, however the amplitude may vary. The unusual aspect is that the gyroscopic is not allowed to precess. The gyro is to act as a damper on the oscillating force.
Could someone provide the Algorithm or information that is required to calculate the force?
Thanks.
Dave
___________________________
rb1957
the gyro precesses (if that's a word) because the spin imparts an angular momentum on the gyro. Iw would be the moment caused, and the moment to be reacted
____________________________
From zekeman
You will have to explain this better. How is the rotor restrained and where is the sinusoidal force applied relative to the axis of the ring? And what is the rotational axis for the existing angular momentum?
Knowing that,, the moment applied to the ring is equal to the rate of change of angular momentum. Or if the angular momentum vector is changed by the motion then the rate of change of that vector is the induced torque from the motion.
So, a rotation at right angles to the spin axis will induce a torque about the axis normal to the spin axis.
____________________________
To zekeman,
The ring will be turning in the XY-plane. This ring is contained by a 2-axis gimbal. The ring will rotate about the Z-axis. An external oscillating torque will rock the ring about the X-axis, by approximately 30-degrees. However, the ring cannot rock about the Y-axis.
The desire is for the 'frame' to experience, at the Y-axis, the same value of oscillating torque as that which is being applied at X-axis.
I assume (or hope) that a fixed optimal angular momentum of the ring can be calculated and this will allow the 'transfer' of the varying torque and the fixed frequency from about the X-axis to about the non-moving Y-axis. Of course, the amplitude will not be transmitted.
I also hope that this makes sense.
____________________________
From zekeman,
Gyro restrained in the y axis:
From the sinusodial input around x axis, I get
@x=Asin(Wxt) Distance about X-axis = Radius of Motor's rotor's mass * sin(X-axis angular velocity * time)
@x'=AWxcos(Wxt) Velocity about X-axis = Radius of Motor's rotor's mass * X-axis angular velocity * cos(X-axis angular velocity * time)
@x"=-A(Wx)^2sin(Wxt) Acceleration about X-axis = Radius of Motor's rotor's mass * X-axis angular velocity^2 * cos(X-axis angular velocity * time)
The torque around the x axis
Tx=Ix@x"=-IxA(Wx)^2sin(Wxt) Torque about X-axis = -X-axis angular momentum * Radius of Motor's rotor's mass * X-axis angular velocity^2 * sin(X-axis angular velocity * time)
The torque in the y axis, since motion there is restrained is:
Ty=IzWz@x'=IzWzAWxcos(Wxt) Torque about Y-axis = Z-axis angular momentum * X-axis angular velocity * Radius of Motor's rotor's mass * X-axis angular velocity * cos(X-axis angular velocity * time)
Wx,Wz =angular velocities x,z axes
Iz,Ix = angular momenta x, z axes
Unfortunately,it looks like the torques are 90 degrees out of phase.
A = k0
_____________________________
Calculations based on zekeman's algorithms
Calculations using zekeman's algorithms for Maximum teeter use 10º = 0.1745 radian and 9th Sector
Distance;
@x=Asin(Wxt) = 0.2235 m * sin(0.955 rad/sec * 0.00275 sec) = 0.2235 m * 0.0000458 = 0.00001 m = 0.000403"Velocity;
@x'=AWxcos(Wxt) = 0.2235 m * 0.955 rad/sec * cos(0.955 rad/sec * 0.00275 sec) = 0.2134 m/sAcceleration;
@x"=-A(Wx)^2sin(Wxt) = -0.2235 m * (0.955 rad/sec)2 * sin(0.955 rad/sec * 0.00275 sec) = - 0.0000091 m/s2The torque around the x axis;
Tx=Ix@x"=-IxA(Wx)^2sin(Wxt)
= - 0.245 * 0.2235 m * (0.955 rad/sec)2 * sin(0.955 rad/sec * 0.00275 sec) = 0.000002234 Nm The torque in the y axis, since motion there is restrained is:
Ty=IzWz@x'=IzWzAWxcos(Wxt) = LZ * ωZ @x' = LZ * ωZ * A * ωX * cos(WX * t) =| LZ * ωZ * 0.2235 m * 0.955 rad/sec * cos(0.955 rad/sec * 0.00275 sec) How can this be done when LZ and ωZ are unknown.
![]()
Calculations based upon article 'How a Gyroscope Works'.
In metric SI units where force is in Newtons and mass is in kilograms.![]()
Moments on Craft from Teetered Rotors:
![]()
The [Gyro Data] form shows that at 15º of rotor teeter the angular distance on the Y-axis is 1.528º in 90ºazimuth about the Z-axis.
Dose this mean that in 2-1/2 revolutions of the rotor the craft will have tipped 15º. ????? I don't think so. Reassess.
![]()
Back to top | SynchroLite Home Page | Electrotor Home Page | Dragonfly Home Page | UniCopter Home Page | Nemesis Home Page
Last Revised: May 13, 2007