After my last post I have learned alot about step motors. I have also manged to figure out the specs of the step motors found in the EMCO F1P, and as always the quality of this machine turns out to be stellar.
My sources are:
Article on oriental motor. Explains the inner workings of stepper motors beautifully.
Article on stepper motors courtesy Douglas Jones of the University of Iowa.
The step motors in the EMCO F1P have 10 wires coming out of them. The wires are connected in consecutive pairs, one pair per two oppositely facing windings inside the motor (10 windings). The motor has almost no resistance when turning the shaft in un-powered state. The stator inside the motor has 50 teeth.
From this, I have gathered that this is a bi-polar, uni-filar, 5-phase motor design with 50 * 10 = 500 steps and 360 / 500 = 0.72° rotation per step.
This kind of motor is less common, and requires a more complex/expensive driving circuit. It offers higher precision, less vibration and noise and more torque at mid to high speeds than the more traditional 2-phase designs. Also there are more ways in which the driving circuit can drive it.
This has made me determined to keep the motors and find a new controller for them during my retrofit-project.
This is the official blog about the development of OctoMY™, the robot platform for you!
2015-04-05
2015-04-03
Anatomy of a step motor
I decided in the beginning of 2015 to stop spending time on my EMCO F1P CNC machines instead of the main goal of the proejct. Ironically that made me spend more time on the CNC,because I need to get them out of the way quickly.
Long story short, I want to convert one to use a new control board but without sacrificing the step motors. So I have now carefully removed one step motor (Z-axiz) and opened it up to see what's inside it.
Based on what I have gathered from searching around and posting a question on stack exchangel, this motor is most likely a bipolar motor with 10 windings.
Some pictures:
Long story short, I want to convert one to use a new control board but without sacrificing the step motors. So I have now carefully removed one step motor (Z-axiz) and opened it up to see what's inside it.
Based on what I have gathered from searching around and posting a question on stack exchangel, this motor is most likely a bipolar motor with 10 windings.
Some pictures:
![]() |
| 10 coils |
![]() |
| Coil wiring |
![]() |
| 5 Screws |
![]() |
| Removed connector housing. |
![]() |
| 10 wires + ground. |
![]() |
| Motor removed from belt |
![]() |
| Belt drive with tacho generator |
![]() |
| Heat-sink with thermal paste. |
2015-03-04
Devol plan for 2015
Plan for Devol robot project in 2015 is the following:
- Port my existing C++ code to use Qt instead.
- Ditch native Android for Qt deployed on Android
- Discontinue the purely CNC related projects. Rationale: they take too much time and focus away from core project without actually solving any big problems. Focus on quickly getting one CNC up and running and sell off the rest.
- Continue and complete the work with the ECU.
- Continue the prototyping of one leg.
- Make a portable "vision unit" that can be dragged around to "learn" and test, for example in my car.
2014-12-18
Simple IK
I came over this link while looking for a simple IK to drive a simple 3DOF robot arm I am making for work.
There is also this youtube video.
I have shamelessly copied his code here, and I intend to improve upon it for my own project and maybe post an update.
There is also this youtube video.
I have shamelessly copied his code here, and I intend to improve upon it for my own project and maybe post an update.
const float cx=2; //coxa
const float fm=6.2; //femur
const float tb=8.3; // tibia
float L, L1;
float alpha, alpha1,alpha2,beta,gama;
void setup()
{
Serial.begin(9600);
}
void loop()
{
trigono_xyz(2, 4, 6); //contoh x,y,z
Serial.print("gama= ");
Serial.print(gama);
Serial.print(", alpha= ");
Serial.print(alpha);
Serial.print(", beta= ");
Serial.print(beta);
Serial.println();
}
void trigono_xyz(float x, float y, float z)
{
L1=sqrt(sq(x)+sq(y));
gama=atan(x/y)/PI*180;
L=sqrt(sq(L1-cx)+sq(z));
beta=acos((sq(tb)+sq(fm)-sq(L))/(2*tb*fm))/PI*180;
alpha1=acos(z/L)/PI*180;
alpha2=acos((sq(fm)+sq(L)-sq(tb))/(2*fm*L))/PI*180;
alpha=alpha1+alpha2;
}
2014-08-20
Reading Emcotronic M1 roms
I have sucessfully read the roms from the M1 mainboard using the TOP853 rom programmer.
The process was surprisingly smooth. I was prepared for all sorts of problems along the way, but it just worked. Uncanny...
I ran the TOP853 software from virtualbox to read the roms into .bin files and then i used bokken from the ubuntu repos to parse and look at the files. This is how I did it:
The plan ahead now is to buy a few replacement roms (modern variants with identical pin-out) and copy the images over and see if they work. Once they work I can start modifying the code slightly.
Figuring out what to change in the code and where might seem harder than it is. I thought about ho to do it and I came up with the idea that the strings tell me something about what the code does, so all I have to do is to follow the strings and see which code pushes the strings around. Next I just identify which strings relate to which functions (such as loading/saving MSD data) and hijack those routines by jumping to an unused location where I have some space for my own code.
Well in theory at least.
The process was surprisingly smooth. I was prepared for all sorts of problems along the way, but it just worked. Uncanny...
I ran the TOP853 software from virtualbox to read the roms into .bin files and then i used bokken from the ubuntu repos to parse and look at the files. This is how I did it:
![]() |
| Open the chip select dialog in TOP853. |
![]() |
| Type in 27256 and select EPROM. |
![]() |
| Select a long delay for reliable reading. |
![]() |
| Start reading the chip into the buffer. |
![]() |
| Save the buffer to .bin file. |
![]() |
| Open bokken and select the .bin file. |
![]() |
| You can browse the dis-assembled code. |
![]() |
| You can view the strings table. |
Figuring out what to change in the code and where might seem harder than it is. I thought about ho to do it and I came up with the idea that the strings tell me something about what the code does, so all I have to do is to follow the strings and see which code pushes the strings around. Next I just identify which strings relate to which functions (such as loading/saving MSD data) and hijack those routines by jumping to an unused location where I have some space for my own code.
Well in theory at least.
Subscribe to:
Posts (Atom)















