This is an electric motor made from a printed circuit board, some 3D printed components, 44 magnets, 44 steel washers, and a handful of electronic components for drive circuitry.
It is similar in design to http://www.thingiverse.com/thing:802 but it is much easier to make and the performance is much better. Maximum mechanical power output is about 600 mW. Top no-load speed is about 2000 rpm. This is probably enough power to do something useful.
Also provided is an open source script that runs on Matlab or GNU Octave to generate custom motor coil patterns. The script will export CAM files in KiCad or EAGLE format, so you can fabricate coil patterns of your own liking.
While this motor used a commercially produced PCB for the coilplate, the idea is that users can produce functional motors using nothing more than their own 3D printers.
See http://reprap.org/wiki/Automated_Circuitry_Making for an overview of using Reprap-style printers to fabricate circuit boards.
Videos of the motor in operation are at
This work was presented at ASME IDETC 2011. The paper citation is DETC2011-48602, Design of an Electromagnetic Actuator Suitable for Production by Rapid Prototyping, by Matthew Moses and Gregory S. Chirikjian
If you want to make the motor you will need to print 2 of each stl file. The printer at school was on the fritz, and my friend's new Prusa Mendel was busy getting calibrated; so I ordered a set of parts from http://www.thingiverse.com/PrintTo3D and they did a nice job. Just FYI, the units of the stl files are INCHES.
You will need to get the PCB coil plate. You can send the gerber files to your board manufacturer of choice. The files are also up on BatchPCB at
You can also try fabricating the board yourself, but the trace spacing may be a little too close.
You will need 44 rare earth magnets, diameter 1/4 inch and length 1/8 inch. The magnets are arranged in alternating polarity around the disks. Since there are 11 innner holes, there are two "symmetries" the 22 magnets can take. You will need one disk of each symmetry, so that the 11 holes line up. The washers are standard 6-32 steel washers. The disks as shown in the picture have the magnets simply pressed in. A little glue may be needed depending on tolerances.
The bearing rollers are made from 1/8 inch diameter ABS filament, which is the feedstock used in many of your printers. If you are using a fancy new setup with smaller diameter filament, you will need to find 1/8 round stock somewhere else (how about nails or thick wire?).
The axles are glued to the coilplate. The magnet disks pull toward each other, so once they are installed the combination of magnets and thrust bearings allows a nice stable rotary joint.
The LEDs and phototransistors then need to be installed in the opto-mounts. You will need a driver circuit - schematic provided - and also need to wire up the opto components and the motor coils. Then get a power supply and fire it up!
This motor starts at about 9V. The maximum voltage it has run at is 12V. It runs well for long periods of time, but the coilplate gets somewhat hot after 10 to 15 minutes of continuous operation.
The driver circuit is uni-directional, but a slightly more complicated circuit can do bi-directional control and even position feedback based on counts from the opto sensors. In the future this circuitry can be placed directly on the pcb with the coil.
Running the MATLAB/OCTAVE code
To run flatcoilwind:
Unzip the *.m files into a directory that is in your MATLAB or GNU OCTAVE path.
Type 'flatcoilwind' at the command prompt.
Adjust the parameters at the top of 'flatcoilwind.m' to change coil geometry.
If you want to make files, set "outputpath" to your desired directory.
Set fileOutputEnable=1 and fileKicadEnable=0 to create a script file that can be run by EAGLE PCB.
- Set fileOutputEnable=0 and fileKicadEnable=1 to create a module that can be read by KiCad.
To import a coil pattern into EAGLE:
Start Eagle and make a new board. The uploaded screenshots follow along these steps.
Select the "Wire" button (next to the "T" for "Text") and then select the straight wire bend. We want the wires to be placed as straight lines.
Go to File -> Script and navigate to the flatcoil .scr file generated by MATLAB.
An example filename is "flatcoil_31-Aug-2011_01.02.18.scr"
Every time the "Connect Signals?" box pops up, click "OK"
- Save and edit your new board. You are on your own from here!
To import a coil pattern into KiCad:
Start KiCad and click on the "PCBnew" button to start a new board.
Click on the button called "Open module editor".
Go to File -> Load Module -> Load from File (Import)
Navigate to where MATLAB created the .emp file and click open.
An example filename is "flatcoil_31-Aug-2011_00.34.40.emp"
Select a working library and save the new coil module to the library.
- Now you can place the coil pattern as a module in a PCB layout.
You're on your own from here!