Tuesday, February 25, 2025

AeroIndia 2025, contacts

 1) Nalwa.aero

2) enlite helicopters, mohanakanna@enlitehelicopters.com

3) NBC CK Birla group

4) Ethereal machines, A K Mishra

5) Hical motors, flywheels, interesting , doing for ISRO




 




Books I am reading / read

  1.  2025 feb 26 : Murderbot diary: fugitive telemetry, short novella, sarcastic humour, human  behavour observation 
  2. Murderbot diary: all systems red: Good sarcasm, short to read, perfect for trains.
  3. 2025 feb 22,23: The man who could see seconds: Good fast paced book. Huge stakes like nuclear war, kidnaps president, reads like a movie.
  4. Daemon: May be a little too powerful a daemon? that too made by a man who is already dead? If creator is dead, then there are no updates to the software to account for changes in the present.
  5. Dark matter: Very surprising plot. Cannot predict the plot before hand. Once you start, you understand it half way through. Its all family. Very good science fiction with strong family love. Though you can sort of tell where it is all going towards...
  6. Seveneves, one of the best I have read. its a journey from the way it starts to the point where it ends. Lost interest towards the end after the repopulation story starts. Became very sad in the scene where the weld the mine entrance shut.. Good book. Must have been shortened.
  7. Hail mary: one of the best I have read. Science fiction from ANdy weir. Highly recommend.
  8. Liftoff: Elon Musk and the Desperate Early Days That Launched SpaceX: Fun to read,. Curious about Elon musk. Now he is doing bad things for others and very good things for himself.
  9. The martian: One of the early books I read on the phone in a small screen till eyes watered. Amazing book. Read with the map of mars in an other tab so that you can follow his journey. Its worth doing. There is an other book about moon. I forgot its name. Same theme.
  10. Sapiens: A Brief History of Humankind: Listened as an MP3. Amazing insights. Asks many questions and answers himself. Surprising that he is a jew, in israel, against Israel , a professor in  a govt college and is very assertive.  

Sunday, December 29, 2024

Oil debris monitoring system notes

  1.  MS4110 is an example of an oil debris monitoring system
  2. OODM cannot predict failure 
  3. Only gives data on wear particle generation rate
  4. Correlating wear particle generation to failure is system-specific
  5. Metalscan system can isolate ferrous and non-ferrous
  6. Chipcheck system can also identify alloys of the metal using spectroscopy
  7. M50 is bearing grade steel
  8. If detected, don't use the machine
  9. Silver is used as coatings for the bearings
  10. Silver in oil indicates superficial damage
  11. Ferrous particles are detected using eddy current 
  12. Nonferrous particles are detected using permeability-based detection
  13. Usually, opposite phase signals are obtained for ferrous and non-ferrous
  14. The only parameter on the sensor is the phase angle
  15. The interquartile demodulation technique is used to detect the chips.
  16. Data communication is through Modbus or TCP protocol

Saturday, December 21, 2024

Things he did last week

  1.  When going to udupi to eat big poori (chole bhatture), he asked for money to use the weighing machine, . First time he has asked for money was only the previous day with outstretched hands, "Appa kaasu kodu.
  2. Went to udupi to celebrate priya getting regularised in Mistral after probation period in November end.
  3. Priya gave cake , chocolate cake , with congratulations Dr Balaji on Dec 3rd. 
  4. Dec 21, he told "Appa should not sleep near me". 

Sunday, November 24, 2024

Things he did last week

  1.  2024 Novemeber last week

  1. Asked first time a question regarding languages.. What is house in hindhi? Ghar.
  2. He has understood Hindhi, Tamil and ENglish, Kannada are different languages and are the identity of people. Pointed to 4 children in dance class and told he is kannada and he is hindhi. Not sure he meant "He speaks hindhi or he is hindhi"
  3. Took my hand for cracking. Till date he hates me cracking his knuckles.
  4. He tried to cheat by starting for his present square in snakes and ladders game so that he will end up in a square with ladder.
  5. When I refused to buy cake piece in bakery, saying my tummy is big, he told he wants me to buy only 2 and those are for priya and himself.
  6. He mentioned his keral friend in creche has both car and bike and we have only bike. we should also buy car, in the most longing way possible. material desire is not programmed by advertising companies. it is innate.

Monday, November 11, 2024

Lua automation script for simulation of radial magnetic bearings

 -- Using manual4.2 pdf document to write this script

-- Run command:

-- Home Gaming laptop

--runCommand       = C:\femm42\bin\femm.exe -lua-script=C:\06_NAL\2024_RC_AMB\02_elecDesign\2024oct30_radialActuator\2024oct30_FEMMsimulation\2024nov12a_radialAMB.lua

mydir              = "C:\\06_NAL\\2024_RC_AMB\\02_elecDesign\\2024oct30_radialActuator\\2024oct30_FEMMsimulation\\"

outputFemmFilePath = "2024nov12a_ramb.fem";

--mydir = "C:\\Users\\vigne\\OneDrive\\Desktop\\2024nov03_femm\\"

--mydir = "F:\\2024_RC_amb\\02_elecDesign\\02_radialActuator\\2024oct30_FEMMsimulation\\"


-- Vicky computer

-- C:\femm42\bin\femm.exe -lua-script=C:\Users\vigne\OneDrive\Desktop\2024nov03_femm\2024nov07b_radialAMB.lua

-- Office workstation

-- C:\femm42\bin\femm.exe -lua-script=F:\2024_RC_amb\02_elecDesign\02_radialActuator\2024oct30_FEMMsimulation\2024nov07b_radialAMB.lua


-- Reading from manual 4.2.pdf in Vikki house, arcot;

-- Hints from manual

-- block labels denote what material properties and  mesh size are associated with each solution region

-- group mode, is meant to glue different objects together into parts so that entire parts can  be manipulated more easily

-- Prescribed A  boundary condition, the vector potential, A, is prescribed  along a given boundary, can be made zero on the outer od of the ramb stator to make flux not leave the bearing stator.

-- Lua variables are global, unless you specify explicitly that they are local!

-- https://www.codecademy.com/resources/docs/lua/variables


function mirrorAbt_67p5(inp_x1_x2,inp_y1_y2)

-- Get the mirrored point, by rotating to align the mirror line to x axis, getting reflection, and rotating back.

-- First rotate to align the mirror line to x axis

local temp_x1_x2 = inp_x1_x2 * cos(rad(-67.5 )) - inp_y1_y2  * sin(rad(-67.5 ));

local temp_y1_y2 = inp_x1_x2 * sin(rad(-67.5 )) + inp_y1_y2  * cos(rad(-67.5 ));

-- Flip the y axis for mirroring about x axis

temp_y1_y2 = -temp_y1_y2;

-- Rotate back to the original mirror line

local return_x1_x2= temp_x1_x2 * cos(rad(67.5 )) - temp_y1_y2  * sin(rad(67.5 ));

local return_y1_y2= temp_x1_x2 * sin(rad(67.5 )) + temp_y1_y2  * cos(rad(67.5 ));

-- return

return return_x1_x2,return_y1_y2;

end

function createGeometry()

--Create the shaft circle

local angle_increment = 360 / numSegs_noUni;

for i=0,numSegs_noUni-1 do

-- Calculate angles in radians for the start and end points of each segment

local angle1 = i * angle_increment * (pi / 180)

local angle2 = (i + 1) * angle_increment * (pi / 180)

-- Calculate the (x, y) coordinates for the start and end points

local x1 = 0.5*shaftOD_m * cos(angle1)

local y1 = 0.5*shaftOD_m  * sin(angle1)

local x2 = 0.5*shaftOD_m  * cos(angle2)

local y2 = 0.5*shaftOD_m  * sin(angle2)

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, angle_increment, numSegs_noUni)

end

mi_zoomnatural();


--Create the  outer radius of the stator OD

angle_increment = 360 / 2;

for i=0,numSegs_noUni-1 do

-- Calculate angles in radians for the start and end points of each segment

local angle1 = i * angle_increment * (pi / 180)

local angle2 = (i + 1) * angle_increment * (pi / 180)

-- Calculate the (x, y) coordinates for the start and end points

local x1 = 0.5*odOuter_m * cos(angle1)

local y1 = 0.5*odOuter_m * sin(angle1)

local x2 = 0.5*odOuter_m * cos(angle2)

local y2 = 0.5*odOuter_m * sin(angle2)

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, angle_increment, numSegs_noUni)

end

mi_zoomnatural();


--Create the inner radius of the stator  OD

local odInnAngArr_deg={   -22.5+thetaLegSubtOdInner_deg/2, 22.5-thetaLegSubtOdInner_deg/2, 22.5+thetaLegSubtOdInner_deg/2, 67.5-thetaLegSubtOdInner_deg/2, 67.5+thetaLegSubtOdInner_deg/2, 112.5-thetaLegSubtOdInner_deg/2, 112.5+thetaLegSubtOdInner_deg/2, 157.5-thetaLegSubtOdInner_deg/2, 157.5+thetaLegSubtOdInner_deg/2, 202.5-thetaLegSubtOdInner_deg/2, 202.5+thetaLegSubtOdInner_deg/2, 247.5-thetaLegSubtOdInner_deg/2, 247.5+thetaLegSubtOdInner_deg/2, 292.5-thetaLegSubtOdInner_deg/2, 292.5+thetaLegSubtOdInner_deg/2, 337.5-thetaLegSubtOdInner_deg/2, 337.5+thetaLegSubtOdInner_deg/2}

-- Draw the arc segments between legs

for i=1,16,2 do

local x1 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i])

local y1 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i])

local x2 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i+1])

local y2 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i+1])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, (odInnAngArr_deg[i+1]-odInnAngArr_deg[i]), numSegs_noUni)

end


--Create the inner radius of the OD

local idInnAngArr_deg={

   -22.5+thetaLegSubtIdInner_deg/2,

22.5-thetaLegSubtIdInner_deg/2,

22.5+thetaLegSubtIdInner_deg/2,

67.5-thetaLegSubtIdInner_deg/2,

67.5+thetaLegSubtIdInner_deg/2,

   112.5-thetaLegSubtIdInner_deg/2,

   112.5+thetaLegSubtIdInner_deg/2,

   157.5-thetaLegSubtIdInner_deg/2,

   157.5+thetaLegSubtIdInner_deg/2,

   202.5-thetaLegSubtIdInner_deg/2,

   202.5+thetaLegSubtIdInner_deg/2,

   247.5-thetaLegSubtIdInner_deg/2,

   247.5+thetaLegSubtIdInner_deg/2,

   292.5-thetaLegSubtIdInner_deg/2,

   292.5+thetaLegSubtIdInner_deg/2,

   337.5-thetaLegSubtIdInner_deg/2,

   337.5+thetaLegSubtIdInner_deg/2

   }

-- Draw the arc segments at the tips of the legs

for i=2,17,2 do

local x1 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i])

local y1 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i])

local x2 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i+1])

local y2 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i+1])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, (idInnAngArr_deg[i+1]-idInnAngArr_deg[i]), numSegs_noUni)

end


-- Draw the parallel lines of  the legs

for i=1,16,1 do

local x1 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i])

local y1 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i])

local x2 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i])

local y2 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addsegment(x1, y1, x2, y2)

end


-- Create the top quadrant, right leg, left side coil manually first.

local x1coil_TopQuad_RightLeg_LeftSide = 0.01531; local y1coil_TopQuad_RightLeg_LeftSide = 0.07484;

local x2coil_TopQuad_RightLeg_LeftSide = 0.02039; local y2coil_TopQuad_RightLeg_LeftSide = 0.07274;

local x3coil_TopQuad_RightLeg_LeftSide = 0.00642; local y3coil_TopQuad_RightLeg_LeftSide = 0.03901;

local x4coil_TopQuad_RightLeg_LeftSide = 0.00134; local y4coil_TopQuad_RightLeg_LeftSide = 0.04112;

mi_addnode(x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide,x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide,x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide,x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide,x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide);

-- Get mid points of the coil to select the segments later for rotating.

midPnt_x1_x2 = 0.5*(x1coil_TopQuad_RightLeg_LeftSide+x2coil_TopQuad_RightLeg_LeftSide);

midPnt_x2_x3 = 0.5*(x2coil_TopQuad_RightLeg_LeftSide+x3coil_TopQuad_RightLeg_LeftSide);

midPnt_x3_x4 = 0.5*(x3coil_TopQuad_RightLeg_LeftSide+x4coil_TopQuad_RightLeg_LeftSide);

midPnt_x4_x1 = 0.5*(x4coil_TopQuad_RightLeg_LeftSide+x1coil_TopQuad_RightLeg_LeftSide);

midPnt_y1_y2 = 0.5*(y1coil_TopQuad_RightLeg_LeftSide+y2coil_TopQuad_RightLeg_LeftSide);

midPnt_y2_y3 = 0.5*(y2coil_TopQuad_RightLeg_LeftSide+y3coil_TopQuad_RightLeg_LeftSide);

midPnt_y3_y4 = 0.5*(y3coil_TopQuad_RightLeg_LeftSide+y4coil_TopQuad_RightLeg_LeftSide);

midPnt_y4_y1 = 0.5*(y4coil_TopQuad_RightLeg_LeftSide+y1coil_TopQuad_RightLeg_LeftSide);

-- Mirror left side to get the right side of the top quadrant right leg to make the other side of the top right coil

    mi_clearselected();

mi_selectsegment(midPnt_x1_x2,midPnt_y1_y2);

mi_selectsegment(midPnt_x2_x3,midPnt_y2_y3);

mi_selectsegment(midPnt_x3_x4,midPnt_y3_y4);

mi_selectsegment(midPnt_x4_x1,midPnt_y4_y1);

local mirrorLineSegments = 1;

    mi_mirror(0,0,cos(rad(67.5)),sin(rad(67.5)),mirrorLineSegments )

    

-- Rotate the left side coil 8 times

    mi_clearselected();

mi_selectsegment(midPnt_x1_x2,midPnt_y1_y2);

mi_selectsegment(midPnt_x2_x3,midPnt_y2_y3);

mi_selectsegment(midPnt_x3_x4,midPnt_y3_y4);

mi_selectsegment(midPnt_x4_x1,midPnt_y4_y1);

mi_copyrotate(0,0,45,8,1)

mi_clearselected();

    -- Create the mid point of top quad, right leg, left coil, required for assigning material.

    avg_x_TopQuad_RightLeg_LeftSide  = 0.25*(x1coil_TopQuad_RightLeg_LeftSide+x2coil_TopQuad_RightLeg_LeftSide+x3coil_TopQuad_RightLeg_LeftSide+x4coil_TopQuad_RightLeg_LeftSide);

    avg_y_TopQuad_RightLeg_LeftSide  = 0.25*(y1coil_TopQuad_RightLeg_LeftSide+y2coil_TopQuad_RightLeg_LeftSide+y3coil_TopQuad_RightLeg_LeftSide+y4coil_TopQuad_RightLeg_LeftSide);

-- Rotate to get the mid point of the top quad, right leg, right coil.

    local rotAngleInsideSameCoil_rad = -2*(atan(avg_y_TopQuad_RightLeg_LeftSide/avg_x_TopQuad_RightLeg_LeftSide)-rad(67.5));

    avg_x_TopQuad_RightLeg_RightSide = avg_x_TopQuad_RightLeg_LeftSide * cos((rotAngleInsideSameCoil_rad )) - avg_y_TopQuad_RightLeg_LeftSide * sin((rotAngleInsideSameCoil_rad ));

avg_y_TopQuad_RightLeg_RightSide = avg_x_TopQuad_RightLeg_LeftSide * sin((rotAngleInsideSameCoil_rad )) + avg_y_TopQuad_RightLeg_LeftSide * cos((rotAngleInsideSameCoil_rad ));

print("Top quadrant right leg left coil avg  (" .. avg_x_TopQuad_RightLeg_LeftSide   .. ", " ..  avg_y_TopQuad_RightLeg_LeftSide  .. ")")

print("Rotation angle = " .. deg(rotAngleInsideSameCoil_rad));

print("Top quadrant right leg right coil avg (" .. avg_x_TopQuad_RightLeg_RightSide  .. ", " ..  avg_y_TopQuad_RightLeg_RightSide .. ")")


-- Mirror the mid points to get their coordinates to select them later

mirrored_midPnt_x1_x2,mirrored_midPnt_y1_y2 = mirrorAbt_67p5(midPnt_x1_x2,midPnt_y1_y2);

mirrored_midPnt_x2_x3,mirrored_midPnt_y2_y3 = mirrorAbt_67p5(midPnt_x2_x3,midPnt_y2_y3);

mirrored_midPnt_x3_x4,mirrored_midPnt_y3_y4 = mirrorAbt_67p5(midPnt_x3_x4,midPnt_y3_y4);

mirrored_midPnt_x4_x1,mirrored_midPnt_y4_y1 = mirrorAbt_67p5(midPnt_x4_x1,midPnt_y4_y1);

    -- Rotate the mirrored coil 8 times

    mi_clearselected();

mi_selectsegment(mirrored_midPnt_x1_x2,mirrored_midPnt_y1_y2);

mi_selectsegment(mirrored_midPnt_x2_x3,mirrored_midPnt_y2_y3);

mi_selectsegment(mirrored_midPnt_x3_x4,mirrored_midPnt_y3_y4);

mi_selectsegment(mirrored_midPnt_x4_x1,mirrored_midPnt_y4_y1);

mi_copyrotate(0,0,45,8,1)

mi_clearselected();

-- Get the mid points of the top quad, left leg, left and right coils

    rotAngle_deg = 45;

avg_x_TopQuad_LeftLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_TopQuad_LeftLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_TopQuad_LeftLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_TopQuad_LeftLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

print("Top quadrant left leg left side       (" .. avg_x_TopQuad_LeftLeg_LeftSide    .. ", " ..  avg_y_TopQuad_LeftLeg_LeftSide   .. ")")

print("Top quadrant left leg right side      (" .. avg_x_TopQuad_LeftLeg_RightSide   .. ", " ..  avg_y_TopQuad_LeftLeg_RightSide  .. ")")

rotAngle_deg = 90;

avg_x_LeftQuad_TopLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg))  - avg_y_TopQuad_RightLeg_LeftSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_TopLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg))  + avg_y_TopQuad_RightLeg_LeftSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_TopLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg))  - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_TopLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg))  + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_BotLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg))  - avg_y_TopQuad_LeftLeg_LeftSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_BotLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg))  + avg_y_TopQuad_LeftLeg_LeftSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_BotLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg))  - avg_y_TopQuad_LeftLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_BotLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg))  + avg_y_TopQuad_LeftLeg_RightSide * cos(rad(rotAngle_deg));

print("Left quadrant top    leg  left side (" .. avg_x_LeftQuad_TopLeg_LeftSide    .. ", " .. avg_y_LeftQuad_TopLeg_LeftSide  .. ")")

print("Left quadrant top    leg right side (" .. avg_x_LeftQuad_TopLeg_RightSide   .. ", " .. avg_y_LeftQuad_TopLeg_RightSide .. ")")

print("Left quadrant bottom leg  left side (" .. avg_x_LeftQuad_BotLeg_LeftSide    .. ", " .. avg_y_LeftQuad_BotLeg_LeftSide  .. ")")

print("Left quadrant bottom leg right side (" .. avg_x_LeftQuad_BotLeg_RightSide   .. ", " .. avg_y_LeftQuad_BotLeg_RightSide .. ")")

rotAngle_deg = 180;

avg_x_BotQuad_LeftLeg_LeftSide   = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_BotQuad_LeftLeg_LeftSide   = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_BotQuad_LeftLeg_RightSide  = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_BotQuad_LeftLeg_RightSide  = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_BotQuad_RightLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg));

avg_y_BotQuad_RightLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg));

avg_x_BotQuad_RightLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg));

avg_y_BotQuad_RightLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg));

print("Bottom quadrant  left leg  left side coil avg (" .. avg_x_BotQuad_LeftLeg_LeftSide  .. ", " .. avg_y_BotQuad_LeftLeg_LeftSide   .. ")")

print("Bottom quadrant  left leg right Side coil avg (" .. avg_x_BotQuad_LeftLeg_RightSide .. ", " .. avg_y_BotQuad_LeftLeg_RightSide  .. ")")

print("Bottom quadrant right leg  left side coil avg (" .. avg_x_BotQuad_RightLeg_LeftSide .. ", " .. avg_y_BotQuad_RightLeg_LeftSide  .. ")")

print("Bottom quadrant right leg right Side coil avg (" .. avg_x_BotQuad_RightLeg_LeftSide .. ", " .. avg_y_BotQuad_RightLeg_RightSide .. ")")

rotAngle_deg = 270;

avg_x_RightQuad_TopLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_RightQuad_TopLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_RightQuad_TopLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_RightQuad_TopLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_RightQuad_BotLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_RightQuad_BotLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_RightQuad_BotLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_RightQuad_BotLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

print("Right quadrant top    leg  left side (" .. avg_x_RightQuad_TopLeg_LeftSide      .. ", " .. avg_y_RightQuad_TopLeg_LeftSide  .. ")")

print("Right quadrant top    leg right side (" .. avg_x_RightQuad_TopLeg_RightSide     .. ", " .. avg_y_RightQuad_TopLeg_RightSide .. ")")

print("Right quadrant bottom leg  left side (" .. avg_x_RightQuad_BotLeg_LeftSide      .. ", " .. avg_y_RightQuad_BotLeg_LeftSide  .. ")")

print("Right quadrant bottom leg right side (" .. avg_x_RightQuad_BotLeg_RightSide    .. ", " .. avg_y_RightQuad_BotLeg_RightSide .. ")")


end



-- -----------------------------------------------------------------------------------------------------------

showconsole()


--clearconsole()

--hideconsole()

--quit()

newdocument(0) --magnetics problem

setcompatibilitymode(0) -- set compatability mode to FEMM 4.2, the latest.


-- Page 86/161 femm manual

mi_probdef(0,"meters","planar",1E-8,40e-3)

-- 0 Hz DC

-- 40e-3 is the depth into the plane of the paper

-- Problem type: "planar" or "axi"


messagebox("Balaji The GREATESTEST\nRadial active magnetic bearing simulation\n Nov10a\n Flux and rotor forces for a given current")


-- Geometry parameters

legWidth_m   = 12e-3;

odOuter_m    = 200e-3;

odInner_m    = 160e-3;

idInner_m    = 60e-3;

shaftOD_m    = 59e-3;

asslyHoles_m = 6e-3;

Nperleg_turns= 50;

numSegs_noUni= 8;-- number of segments in the circle, for getting smooth circles.

-- Angle of subtended by one leg 

-- legWidth_m = 2*R*sin(theta/2), From right angle triangle with hypotenuse as radius

thetaLegSubtOdInner_rad = 2*asin(legWidth_m/(odInner_m));

thetaLegSubtOdOuter_rad = 2*asin(legWidth_m/(odOuter_m));

thetaLegSubtIdInner_rad = 2*asin(legWidth_m/(idInner_m));

thetaLegSubtOdInner_deg = thetaLegSubtOdInner_rad*180/pi;

thetaLegSubtOdOuter_deg = thetaLegSubtOdOuter_rad*180/pi;

thetaLegSubtIdInner_deg = thetaLegSubtIdInner_rad*180/pi;


-- Create the Geometry

createGeometry()


-- Use the inbuilt materials

mi_getmaterial('Air')

mi_getmaterial('18 AWG')

mi_getmaterial('Cold rolled low carbon strip steel')

mi_getmaterial('M-43 Steel')-- EN24 is 4340 USA/ASTM in equivalent american grading chart


-- Create block labels

mi_addblocklabel(0.035,0)-- Air

mi_addblocklabel(avg_x_TopQuad_RightLeg_LeftSide   ,  avg_y_TopQuad_RightLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_TopQuad_RightLeg_RightSide  ,  avg_y_TopQuad_RightLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_TopQuad_LeftLeg_LeftSide    ,  avg_y_TopQuad_LeftLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_TopQuad_LeftLeg_RightSide   ,  avg_y_TopQuad_LeftLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_TopLeg_LeftSide    ,  avg_y_LeftQuad_TopLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_TopLeg_RightSide   ,  avg_y_LeftQuad_TopLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_BotLeg_LeftSide    ,  avg_y_LeftQuad_BotLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_BotLeg_RightSide   ,  avg_y_LeftQuad_BotLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_LeftLeg_LeftSide    ,  avg_y_BotQuad_LeftLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_BotQuad_LeftLeg_RightSide   ,  avg_y_BotQuad_LeftLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_RightLeg_LeftSide   ,  avg_y_BotQuad_RightLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_RightLeg_RightSide  ,  avg_y_BotQuad_RightLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_RightQuad_TopLeg_LeftSide   ,  avg_y_RightQuad_TopLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_RightQuad_TopLeg_RightSide  ,  avg_y_RightQuad_TopLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_RightQuad_BotLeg_LeftSide   ,  avg_y_RightQuad_BotLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_RightQuad_BotLeg_RightSide  ,  avg_y_RightQuad_BotLeg_RightSide);-- copper windings

mi_addblocklabel(0.09,0)-- Laminations stack

mi_addblocklabel(0,0)-- Steel EN24 shaft


--Add a "circuit property" so that we can calculate the properties of the

--coil as seen from the terminals.

seriesConnection   = 1;

parallelConnection = 0;

iTopAct_Ampere     = 1;

iLeftAct_Ampere    = -1;

iBottomAct_Ampere  = 1;

iRightAct_Ampere   = 1;


--iTopAct_Ampere  = tonumber(prompt("Enter current in top actuator:"));

nTurns             = 50;

mi_addcircprop('topCoil',     iTopAct_Ampere   , seriesConnection);

mi_addcircprop('leftCoil',    iLeftAct_Ampere  , seriesConnection);

mi_addcircprop('bottomCoil',  iBottomAct_Ampere, seriesConnection);

mi_addcircprop('rightCoil',   iRightAct_Ampere , seriesConnection);


-- Select block labels and apply materials

meshSize = 1000e-6;

mi_selectlabel(0.035,0)-- Air

mi_setblockprop('Air',0,meshSize,'<None>',0,0,0)

mi_clearselected();


-- Assign coil and winding direction

mi_selectlabel(avg_x_TopQuad_RightLeg_LeftSide   ,  avg_y_TopQuad_RightLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_RightLeg_RightSide  ,  avg_y_TopQuad_RightLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_LeftLeg_LeftSide    ,  avg_y_TopQuad_LeftLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_LeftLeg_RightSide   ,  avg_y_TopQuad_LeftLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_LeftQuad_TopLeg_LeftSide    ,  avg_y_LeftQuad_TopLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_TopLeg_RightSide   ,  avg_y_LeftQuad_TopLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_BotLeg_LeftSide    ,  avg_y_LeftQuad_BotLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_BotLeg_RightSide   ,  avg_y_LeftQuad_BotLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_BotQuad_LeftLeg_LeftSide    ,  avg_y_BotQuad_LeftLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_LeftLeg_RightSide   ,  avg_y_BotQuad_LeftLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_RightLeg_LeftSide   ,  avg_y_BotQuad_RightLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_RightLeg_RightSide  ,  avg_y_BotQuad_RightLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_RightQuad_TopLeg_LeftSide   ,  avg_y_RightQuad_TopLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_TopLeg_RightSide  ,  avg_y_RightQuad_TopLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_BotLeg_LeftSide   ,  avg_y_RightQuad_BotLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_BotLeg_RightSide  ,  avg_y_RightQuad_BotLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(0.09,0)-- Laminations stack

mi_setblockprop('Cold rolled low carbon strip steel',0,meshSize,'<None>',0,0,0)

mi_clearselected();


mi_selectlabel(0,0)-- Steel EN24 shaft

mi_setblockprop('M-43 Steel',0,meshSize,'<None>',0,0,0)

mi_clearselected();


-- Add boundary condition, dirichlet at the outer rim of the amb

mi_addboundprop("A=0",0,0,0,0,0,0,0,0,0);

mi_selectarcsegment(0,odOuter_m*0.5)

notHiddenInPostProcessor = 0;

boundaryGroupNum = 1;

mi_setarcsegmentprop(1,'A=0',notHiddenInPostProcessor,boundaryGroupNum);

mi_clearselected();


mi_selectarcsegment(0,-odOuter_m*0.5)

mi_setarcsegmentprop(1,'A=0',notHiddenInPostProcessor,boundaryGroupNum);

mi_clearselected();


-- Save before solving

mi_saveas(mydir .. outputFemmFilePath)


-- --Now,analyze the problem and load the solution when the analysis is finished

mi_analyze()

mi_loadsolution()



-- Outputplots :

----------------

-- Show the flux density plot

-- Parameters: legend (1 to show, 0 to hide), gscale (0 for color, 1 for grayscale), upper_B, lower_B, type (0 for B, 1 for H)

colour = 0;

showPlot = 0;

upperB_Tesla = 1.6;

lowerB_Tesla = 0;

fluxDensityPlot = 0;

fluxIntensityPlot = 1;

--mo_showvector(1) 

mo_showdensityplot(showPlot, colour, upperB_Tesla, lowerB_Tesla, fluxDensityPlot)

--mo_savebitmap("fluxDensity_plot.png")

pause()


--mo_showdensityplot(showPlot, colour, upperB_Tesla, lowerB_Tesla, fluxIntensityPlot)

--mo_savebitmap("fluxIntensity_plot.png")

pause()


-- Contour along the top 90 degree sector of the shaft

-- Left side of y axis

mo_seteditmode("contour")

mo_addcontour(-0.5*shaftOD_m*sin(45/57.3),0.5*shaftOD_m*cos(45/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(35/57.3),0.5*shaftOD_m*cos(35/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(25/57.3),0.5*shaftOD_m*cos(25/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(15/57.3),0.5*shaftOD_m*cos(15/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(05/57.3),0.5*shaftOD_m*cos(05/57.3))

-- Right side of y axis

mo_addcontour( 0.5*shaftOD_m*sin(45/57.3),0.5*shaftOD_m*cos(45/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(35/57.3),0.5*shaftOD_m*cos(35/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(25/57.3),0.5*shaftOD_m*cos(25/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(15/57.3),0.5*shaftOD_m*cos(15/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(05/57.3),0.5*shaftOD_m*cos(05/57.3))

mo_makeplot(2,200,mydir .. "top90degSect_shaft_Potential.emf")

-- --pause()

-- --quit()

 

----If wetop90degSect_shaft were interested in the flux density at specific positions, 

----we could inquire at specific points directly:

--b0=mo_getb(0.0114,0.0266);

--messagebox('Flux density at the tip of the top left  leg is ' .. b0[1] .. 'Tesla');

--b1=mo_getb(-0.0114,0.0266);

--messagebox('Flux density at the tip of the top right leg is ' .. b1[1] .. 'Tesla');

--

----The program will report the terminal properties of the circuit:

----current, voltage, and flux linkage 

--vals = mo_getcircuitproperties('topCoil');

----If we were interested in inductance, it could be obtained by

----dividing flux linkage by current

--L = 1000*vals[2]/vals[0];

--messagebox('The self-inductance of the coil is  ' .. L .. 'mHenry');