Kelvin, each stepper is driven by a controller.· The Y and Z
axis controllers are IB463s, the X axis and Gecko that was given to me.· Here is a sample of how I drive the motors:
yd··· con· $144D
f······ var word····· 'distance to travel in mils
goout:
HIGH diry······ 'drive stepper CCW
LOW enabley· 'enable Y controller
IF yy = 1 THEN GOSUB stepO··· 'backlash compensation
yy = 2
WRITE 5, yy······ 'stores last direction moved
DEBUG "Going out ", DEC f, " - ", DEC eePntr, cr
FOR x = 1 TO f*/yd
PULSOUT stpy, 10
NEXT
PAUSE 100
HIGH enabley
posy = posy - f······ 'calculates new Y position
RETURN
I spent a couple of hours yesterday trying to modify the gcode I had in Excell but I got nowhere.· I really hope you can come up with a way to covert gcode to Stamp instructions - what a godsend that would be!
Newzed, you said you were entering the control information as DATA, why don't you try this serially? Maybe I misunderstood what you are trying to do, but I would figure it would be more easy to control the steppers by serial and have the stamp do simple translation serial-to-steps. You'd have to either write a program (or find one already online) to do that so you can easily paste your g-code and have your computer spit out the numbers, line-by-line and after the stamp has completed a task. It would ask the computer for the next command on the list. Again, I'm new to CNC, but the routing pcb aspects sounds simliar to a plotter.
Newzed, what I was trying to say is that if you are designing the routing paths using a CAD software to generate the code, you can have your stamp read the code serially, line-by-line, as it completes each line of command. It is basically software flowcontrol so that the Stamp can be busy doing what it is doing, complete the task, and then ask for the next task.
(Stamp to PC): ready for first line
(PC to Stamp): Move spindle Down
[noparse][[/noparse]stamp moves spindle]
(Stamp to PC): ready for next line
(PC to Stamp): X34 Y34 Z0
[noparse][[/noparse]stamp moves each stepper accordingly]
etc...
Ktekx has the right idea, it is something i touched on before. I think you misunderstood what he suggested, it's serial input only. The idea is to have a serial communication from your pc to the stamp to load the data as the stamp is running, rather than loading all the data at once. This would be the optimal solution, rather than trying to find a way to decode /cram all the data into the eeprom. But, it is still theory right now, and i have never done serial com between a stamp and pc, so i don't know what problems could be encountered. The main flow would be like this:
1. serin data string of gcode / xy
2. if gcode = something then determine data input / goto motor subroutine
3. sub will set motor speed / translate x and y positions to steps / drive motors and wait for finish
4. return to serin
Say, if the gcode was a G01( transverse at mill cutting feed rate ) , it would pull in 2 lines of data, in gcode for a straight line there are 2 lines. The first is the xy start, and second the xy end. If it is on the x axis, the y value will differ for the positions of the path, from the first to second. So, y data 2 minus y data 1, ( x will be same on both lines ) will be the path length, then length times steps for the motor control. eg. Y path is 1.5 in. times 200 steps per in. = 300 steps to move motor. Now it is just a simple matter of running a sub to run the y axis motor 300 steps from the start position, and go back and get the next move. Of course the z axis will have to be taken into account, but that can be interpereted by the gcode as well. A G00 would be used to move to the start position and control the z movement.
This is just a basic explanation, the actual stamp program would not be that difficult to put together ( don't quote me on that ). I am not sure if the serial speed would cause a problem, obviously, it will be slower than the eeprom. I guess if the cutter had to sit there for some extra time before a new command is sent, it really won't matter. I understand your setup may be a little different than what i have proposed here right now, but i want to get something basic started, and will modify it later. Anyway, i am going to start trying to put a rough program together, minus the data stuff, and just debug it to see if it can work. It may take a bit.
They have a 3-Axis kit for drilling PC boards that is controlled by a BASIC STAMP. You can download the firmware (*.BS2 code) for their machine and some PC apps from their web site.
This might give you some ideas for your Micro-Mill
Mike, I hve noproblem drilling the boards or running the etch pattern.· It takes a sometimes very long DATA list to accomplish this but it works just fine.· What I am trying to do is find a way to convert gcode - which I can derive with out much effort - into DATA statements.· It must be done by a program because if I manually change the gcode and then copy it I introduce error probabilities, which I want to avoid.
Kelvin, I' making progress.· I copied the gcode I got into Excel and deleted all the Z axis instructions.· I wound up with this[noparse]:([/noparse]only a partial)
I then rearranged the Excel data to look like this:
This puts it in the proper format for DATA statements.· The I ran it through my little program and wound up with this:
DATA WORD 0, L
DATA WORD 2500, I
DATA WORD 2800, L
DATA WORD 2500, I
DATA WORD 2800, L
DATA WORD 0, I
DATA WORD 0, L
DATA WORD 0, I
DATA WORD 0, L
DATA WORD 2500, I
DATA WORD 0, L
You will note all the directions are L(eft) or I(n).· When the mill starts out it is set at 0,0 so the only way it can travel on the first X move
is L.· The only way it can travel on the first Y move is I.· What I have to do now is figure out how to change the direction to accomplish the etching.· For instance, the gcode says "Go to coordinates X, Y."· My code has to translate that to "If the new X is less than the old X then
direction is changed from L to R.· If new R is greater than old R the direction remains L".· And the same for the·Y Axis.
Did I explain that so you can understand it?· This is where I really need help.· I have attached my program as far as I've gotten so you can take a look at it.
hello,
i found this thread an i have to say first than i'm not imediately interested for this kind of tool.
But because it's look as a community entousiast job i would to propose my help.
I was working several years as development engineers in to a factory to develop automatisation an robot as cnc machine, robotic arm and automatized paletization.
Due of this experience and regarding at your project i would to submit these sugestion:
1) You are looking to drive x and y axle by stepper motor;ok but just only if you use your stepper motor to drive something like a screw axle because if you use a stepper motor directly to drive the load he don't have torque enough to maintain it(see for screw ball bearing axle at: www.skf.com)
2) If i follow your project, Z axle must be bang-bang (up and down with a solenoid)!!!!!!!!!!
Wath about the adjustment of the cutting deep?
No i'm sure than Z axle must be controled same as X and Y.
3)due of the accuracy you need i suggest you to use linear encoder like something than heidenhain produce(see at:www.heidenhain.com). Its easy and cheaper to do it self when you understand the use of binary counting in to a measurement aplication.
4) personally i use for some prototyp linear beam(or rod?) from old drawing table.It's easy to find them at a very cheapper price due of the use of computer to solve industrial drawing to day.They don't have lash , are very stable, 2 axle and are fitted with roll bearing and lash adjustment.
For info i've buy 5 full piece(X-Y) for 5 €(+/- 5 dollars) I've canibalised them and now i'm the owner of a big table(A3 size) whos support 1 x axle, 2 Y axle and 2 z axle. Each Z axle are fitted with speed adjusting motor with radial bearing and axial bearing (due of the axial pressure when i use it to drill).It's able to drill 50 hole in to a 6 mm glass panel in to 5minutes 37 sec, using a diamond drill tool and refreshed with water.
I hope these text helpfull an don't hesitate to contact for more info.
Actually i'm in to a rolling chair for a couple of week due of a accident so i have time to discuss about.
Sorry if i don't send you some drawing but i don't have cad programm at home and it's impossible for me to go to the office right now so maybe you now a web site where i can download a little cad software?
Also i woud to excuse me for my bad acknowledment of your langage, normally i speak french and i'm sure than technology enthusiast don't have bordier.
For immediate contact:michel.dechief@skynet.be, otherwise, this forum.
Hope many chance to your project,
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
Sorry if i come back again but i forgot something.......
If you are looking to use some drawing table beam, you have to install to x beam, the first(orignal) is motorised and the second (free) support the end of the y axle otherwize the beam lift when you ad pressure onto the z axle.Be very carrefull to respect paralelism bethween the two x axle.
A good think to create a low cost linear sensor is to use two resistor film for each axle.Each resistor film develloping the whole lenght of the axle and are connected on opposite side.Its means like x is at zero, first resistor signal is +/- 5Volt and second resistor signal is +/- 0 volt . So, when travelling the x axle you have the opportunity to take two measurement and so have more accurracy.
Personaly i have a accurracy of 0,01 mm at 20°C tested with a hp laser tool and using normal dc motor whos drive SKF ball bearing screw transmission.
If you need some info's i'm still at your disposition.
Regard's
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
I am in the middle of doing some reno work here, so my time to try and write some code has been nill. I figured the best i could do right now is just give you an idea to play with. I am not necessarily applying this to your setup, but you should get the jist of what i am doing here.
In reality, you only need one data xy coordinate to position the mill at the start point and drop the cutter to the board for the mill start. After that, it is only motor steps on a certain axis, and then retract and home the mill. So, the clutter in the data has to be removed. Analysing the gcode by stepping through pairs of lines with some logic should take care of that. Then a new data sequence would be compiled for the xy moves.
The format of the excel to look at direction: comparing position, first 2 lines
DATA Word 0 , X , Word 2500 , Y ' starting xy position
DATA Word 2800 , X , Word 2500 , Y ' ending xy position
The operation would start at 0x, 2500y and move the mill 2800 along the x, through 2500 y. We could say this is a " right " move direction. What needs to be done is to compare the 2 lines of data to determine if movement is along x or y. The y value is the same, so the y is not needed for the move, the x value is different, it is greater on the second then the first. It shows a distance of 2800 in a positive direction, so in theory the second line could be translated (output to new data) to DATA Word 2800, X, R ( r for positive direction on x axis ) . Now comparing the third and 2nd line for move no.2 :
DATA Word 2800 , X , Word 2500 , Y
DATA Word 2800 , X , Word 0 , Y ' difference of negitive 2500 on y axis, x the same
X is equal, or at same position, so data can be eliminated. The translated data line would be DATA Word 2500, Y, L ( L for negitive direction on y axis ). Now the 4th line is compared to the 3rd, and so on.
For the basic code, i am a little stumped here, because i don't know if you can compare the values in the seperate lines when they are brought in for analysis, without assigning different variables to the x and y values. Anyway, this is what i thought of.
' 2 lines to read from data locations and xy values to be placed in alternate variables
x0 'x1 var ' first line x set to x1
y2500 'y1var ' first line y set to y1
x2800 'x2var ' second line x set to x2
y2500 'y2var ' second line y set to y2
Once the variables are loaded, now to look at the values and determine step and direction. The translated lines are stored to another data area as the step sequence.
if x2 > x1
then x2 - x1 = x ( load to new / data word 2800,R ) 2800 - 0 = 2800 steps right on x motor
elseif x2 < x1
then x1 - x2 = x ( load to new / data word x,L ) false condition
elseif x1 = x2
then x = 0 ( no move. no data write ) false condition
elsif y2 > y1
then y2 - y1 = y ( load to new / data word y,R ) false condition
elseif y2 < y1
then y1 - y2 = y ( load to new / data word y, L ) false condition
elseif y1 = y2
then y = 0 ( no move. no data write ) 2500 = 2500 no movement on y motor
endif
As you can see, out of this, only one data line is written to the new sequence which gives the steps and direction for the x motor.
I am lost as figuring out the data pointer stuff to step through the pairs of lines, i have not had time to look into it. You seem to have a pretty good handle on that, so maybe it won't be hard for you to code.
I hope this helps, it looks like it should work if the data locations can be stepped through properly.
That is a great idea of using an old drafting table for parts, never even considered that one. What kind of cad software are you looking for? You might be able to find something on www.download.com.
Hello Kelvin,
Thank's for web site tips ,I find a lot cad soft this night on www.freebyte.com,they have many free downloadable cad soft including a lot to generate PCB.Very interresting.
For mechanical aplication i've coise personnaly ALIBE who's a full 2D/3D soft, very great for this price!!
So if my hel is needed for mechanical drawing, i'm ready.
Regards,
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
Kelvin, I have been trying for days to convert the gcode but could just not make it work.· One of the reasons is that to cover every possibility I ran out of variable space.· So...........I snuck upon them from behind - I changed by etching program to work on a coordinate systems instead of the point travel sysem I had been using.· Now it can read the gcode directly, travelling to a coordinate.· I wrote:
X CON "L"
Y CON "I"
X1 CON "R"
Y1 CON "O"
so that now the gcode listing is read as L, I, R or O instead of X, Y, X1 and Y1.· I have to manually change X to X1 or Y to Y1 to tell the program which direction it wants to go but I have an idea about working around that.· When the program runs it uses the following debug statement:
DEBUG· "DATA WORD ", DEC f,",", 34,dir, 34,cr···
and the debug screen displays:
DATA WORD 2500,"I"
DATA WORD 2800,"L"
DATA WORD 2500,"O"
DATA WORD 2800,"R"
which I can copy and paste directly into Excel for safekeeping, thence to my etch program.· I coiuld use Hyperterminal and capture the file to Excel but in this case I think it is easier to just copy and paste it.· I don't know how many lines of text the debug screen can display - I'm sure there is a limit - but if the DATA list is too long I may have to go the Hyper/Capture route.
I figured out a way for the program to change direction based on the coordinate.· Now I can use the gcode in its original form - no mods required.· The X and Y are changed to L and I by the CONs so the debug screen now says:
··········· DATA WORD 200,· "L" ··········· DATA WORD 1200,· "I" ··········· DATA WORD 100,· "L" ··········· DATA WORD 1400,· "I"··
I said no mods to the original gcode - that is not quite true.· I still have to delete all the Z lines because the Stamp would not recognize them, but other than that, no changes.
Now I will have to try in out for real to see if the resultant etch pattern is correct.· If this works I think my trouble are over.· The only part I don't like is that I have to draw the etch lines with the silkscreen layer.· If you overshoot with a silkscreen line, you know you have to grab the line by·its very end to change its length.
Yes.· When you export the .dxf file from Express, the .dxf files·copy only silkscreen layer information.·· I don't really care about the traces at this point because the traces are what is left when you finish etching.· As soon as I get proficient with the procedure it will save a tremendous time by not having to manually write the DATA list for the Stamp.· In addition, I don't have to jot down the etch path data - I just draw the pattern and it is all stored in the .dxf file.· I guess Super Mill is just about a CNC mill now, sort of.· Maybe I'll rename it Super CNC Mill [noparse]:)[/noparse]).
That's great to hear, i was starting to get a little frusrated myself, but i was trying to go another route.
There is some pcb software that will let you select different layers for export, that might be worth looking into. As far as the gcode for the z axis goes, no big deal, your own mill program can take care of those routines. Sorry i wasn't much help. I am still going to pursue building a system in the near future, and this has been a good insight into making it " cad compatible ". I know the stamp is not capable of doing a complete translation of the gcode, maybe the propeller will be the ticket. I suppose the easiest way would be to write a program in Vbasic to do all the real work for the decoding. Maybe someone will take that on in the future. I made up a little program to output steps and direction from 2 lines of xy coordinates from gcode that produce a line. Not much good to you now, but might help later for sorting some coordinates. The data stuff is very basic, I just wanted to show the logic behind it.
Gentlemen, I ran into an un expected problem.· G Code origin - 0. 0 - is at lower left while Express origin is at upper left.· The has no effect on X coordinates but it wreaks havoc with the Y coordinates.· To compensate I set the Express origin at lower left.· The .dxf file therefore had all negative corrdinates for Y.· During the reformat in Excel· I multiplied all the Y value by 1000, then by -1.· The resultant etch pattern was exactly what I had drawn in Express except the it was flipped vertically - no good.
So......I made another drawing in Express and left the origin where it belonged, at upper right, and exported the .dxf file.· When I converted the .dxf file with gcode with ACE all the Y coordintes were negative again.· When I did the reformat in Excel I again multiplied the Y figures by 1000 and then -1.· I did my thing and this time the resultant pattern I got was exactly what I had drawn in Express with the proper orientation.
I hope this is the end of these little problems.· Maybe now I have really got it right.·
Made a couple of dry runs at my desk and everything seemed OK so I transferred the program out to the shop via my handy dandy little
LINKSYS.· Put a new piece of PC board on the table, got everything set and ran the program.· The pattern was a perfect duplicate of what I had drawn in Express.· I feel like I have just invented the wheel or something
Have to be careful not to get too excited at my age·but I really feel good about the whole thing.· Only took eight days.
If you have a little mill like mine and/or you use Expresspcb, ·everything is available for the asking.
Actually, you did " re-invent the wheel". With over 17000 views of this subject, that should be proof enough. There is a pot of gold at the end of the rainbow for someone.
Awesome stuff!! It'd be nice to see a post in the "PROJECTS" forum on this!
A video would be neat too!
Newzed said...
Success at last
Made a couple of dry runs at my desk and everything seemed OK so I transferred the program out to the shop via my handy dandy little
LINKSYS. Put a new piece of PC board on the table, got everything set and ran the program. The pattern was a perfect duplicate of what I had drawn in Express. I feel like I have just invented the wheel or something
Have to be careful not to get too excited at my age but I really feel good about the whole thing. Only took eight days.
If you have a little mill like mine and/or you use Expresspcb, everything is available for the asking.
Sid
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ ·
Steve "Inside each and every one of us is our one, true authentic swing. Something we was born with. Something that's ours and ours alone. Something that can't be learned... something that's got to be remembered."
Well, I just ran the acid test.· Took an old ewtch program which I had run several times before, redrew the etch path with the silkscreen layer, and did my .dxf-gcode-convert thing and transmiited the new etch program to the shop.· The etch path had a lot of crossovers and a lot of·back and forth paths.· Ran the new program on the mill and the results were perfect.· Now I'm convinced I have a really viable procedure for etching that is truly a tremendous time saver.
There is one peculiar thing - when I drew etch path, I did the board outline first, then left-in-right-out to divide the board vertically between the lefthand paths and the righthand paths (I had resistors and capacitors connecting the left side and the right side), then I drew all the paths to isolate the traces and pads.· The .dxf file did all the litle isolation paths first, then the board outline, then the dividing path.· Strange.
However, as I have said before about computers and programs and other technical stuff, you really don't have to know how they work, just how to use them.
I have attached a picture of the etch path so you can see what I mean by the vertical dividing line.
Forgot to mention - after the .txt gcode is opened in Excel and all the Z lines are deleted, I just copy and paste it into an Excel template,where it is automatically formatted as a DATA list.· Another big time saver.
Kelvin, Intellimill sounds pretty good to me.· I think I like it.
I'm trying to expand the program by adding routines to drill holes using gcdode coordinates.· My first trial drilled four random holes and an 8-pin DIP, but it needs a lot of cleanup and simplifying.· When the program starts it goes to X and then to Y.· I want to drill only when it reached Y.· The EEPROM pointer is 1 at X and 4 at Y, which makes all X pointers odd and all Y pointers even.· So just after the travelling·subroutine I wrote:
com = pointer//2
if com = 0 then gosub drill
Haven't tried the thing yet - I just finished writing it - but I'll give it a shot as soon as I finish my coffee.· I'll post the results.
Well, I must be doing something right.· I laid out a 40-hole pattern in Express, did my fancy little bit, and transmitted the program to the shop.· Went out to the shop and ran the program on the mill.· The 40 holes turned out great.· So that takes care of the holes.· Now if I could just write a program to deburr it !!!
Well, you are cookin' now, Sid, you are starting to make it look easy. I am sure there are some more advances uses of the gcode output that can be utilized. What are you using to drill with? I have found a 2 or 3 flute end mill to work well as far as not leaving a burr. Drill bits seem to push through causing a burr, as opposed to the end mill that cuts. And another thing to look at is adding some coolant spray, it really does help to get a nice smooth cut or drill hole. Actually, you could make a program to deburr the back of the board. Get one of those flat face grinding wheels and write a program to do the area using the diameter of the wheel for the path width.
It would be better to do it with 2 passes, just take a little off with the first pass, and go to board level on the second. If you had a fine enough stone, it would polish the board also. Now, you will just have to make an auto tool changer.
Kelvin, I use two end mills.· One is .020, the other .015.· I have a .015 router coming - I want to see how it works compared to the end mill.· The fiberglas is not a problem - it's the copper.· As the·end mills·start to wear·they create more of a burr, but they are so expensive you have to use them as long as you can.
As far as the deburring is concerned, I have a flat grinding wheel about .625 diameter but the problem with grinding wheels is that they rapidly fill up with copper and become ineffective.· I have a steel brush in my Dremel kit and I'm going to try that, but I have a feeling that at high speed the steel strands will sort of flatten out and won't even touch the board - we'll see.
Wouldn't it be nice to have a turret mill like a turret drill - then you could have three tools mounted and just rotate the turret when you wanted to change tools.· However, at 20,000 RPM that may not be practical.
When you drill the hole, maybe move in the bit around slightly.... So 1step +X and -X and +Y and -Y. OR whatever 1step might be!
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ ·
Steve "Inside each and every one of us is our one, true authentic swing. Something we was born with. Something that's ours and ours alone. Something that can't be learned... something that's got to be remembered."
Comments
axis controllers are IB463s, the X axis and Gecko that was given to me.· Here is a sample of how I drive the motors:
yd··· con· $144D
f······ var word····· 'distance to travel in mils
goout:
HIGH diry······ 'drive stepper CCW
LOW enabley· 'enable Y controller
IF yy = 1 THEN GOSUB stepO··· 'backlash compensation
yy = 2
WRITE 5, yy······ 'stores last direction moved
DEBUG "Going out ", DEC f, " - ", DEC eePntr, cr
FOR x = 1 TO f*/yd
PULSOUT stpy, 10
NEXT
PAUSE 100
HIGH enabley
posy = posy - f······ 'calculates new Y position
RETURN
I spent a couple of hours yesterday trying to modify the gcode I had in Excell but I got nowhere.· I really hope you can come up with a way to covert gcode to Stamp instructions - what a godsend that would be!
Sid
f = 100
gosub goin
f = 50
gosub goleft
f = 200
gosub goout
and so on.· The last board I made had 192 etching operations.· Can you imagine writing 192 routines like the three above?
using DATA statements takes about 6 lines of code to read and execute them - a tremendous saving of programming time and memory.
Sid
(Stamp to PC): ready for first line
(PC to Stamp): Move spindle Down
[noparse][[/noparse]stamp moves spindle]
(Stamp to PC): ready for next line
(PC to Stamp): X34 Y34 Z0
[noparse][[/noparse]stamp moves each stepper accordingly]
etc...
Ktekx has the right idea, it is something i touched on before. I think you misunderstood what he suggested, it's serial input only. The idea is to have a serial communication from your pc to the stamp to load the data as the stamp is running, rather than loading all the data at once. This would be the optimal solution, rather than trying to find a way to decode /cram all the data into the eeprom. But, it is still theory right now, and i have never done serial com between a stamp and pc, so i don't know what problems could be encountered. The main flow would be like this:
1. serin data string of gcode / xy
2. if gcode = something then determine data input / goto motor subroutine
3. sub will set motor speed / translate x and y positions to steps / drive motors and wait for finish
4. return to serin
Say, if the gcode was a G01( transverse at mill cutting feed rate ) , it would pull in 2 lines of data, in gcode for a straight line there are 2 lines. The first is the xy start, and second the xy end. If it is on the x axis, the y value will differ for the positions of the path, from the first to second. So, y data 2 minus y data 1, ( x will be same on both lines ) will be the path length, then length times steps for the motor control. eg. Y path is 1.5 in. times 200 steps per in. = 300 steps to move motor. Now it is just a simple matter of running a sub to run the y axis motor 300 steps from the start position, and go back and get the next move. Of course the z axis will have to be taken into account, but that can be interpereted by the gcode as well. A G00 would be used to move to the start position and control the z movement.
This is just a basic explanation, the actual stamp program would not be that difficult to put together ( don't quote me on that ). I am not sure if the serial speed would cause a problem, obviously, it will be slower than the eeprom. I guess if the cutter had to sit there for some extra time before a new command is sent, it really won't matter. I understand your setup may be a little different than what i have proposed here right now, but i want to get something basic started, and will modify it later. Anyway, i am going to start trying to put a rough program together, minus the data stuff, and just debug it to see if it can work. It may take a bit.
kelvin
Sid,
You might want to take a look at:
http://www.milinst.com/
They have a 3-Axis kit for drilling PC boards that is controlled by a BASIC STAMP. You can download the firmware (*.BS2 code) for their machine and some PC apps from their web site.
This might give you some ideas for your Micro-Mill
Personally I use TurboCNC on my router: www.allsurplus.net/CNC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Mike
Kelvin, I' making progress.· I copied the gcode I got into Excel and deleted all the Z axis instructions.· I wound up with this[noparse]:([/noparse]only a partial)
I then rearranged the Excel data to look like this:
This puts it in the proper format for DATA statements.· The I ran it through my little program and wound up with this:
DATA WORD 0, L
DATA WORD 2500, I
DATA WORD 2800, L
DATA WORD 2500, I
DATA WORD 2800, L
DATA WORD 0, I
DATA WORD 0, L
DATA WORD 0, I
DATA WORD 0, L
DATA WORD 2500, I
DATA WORD 0, L
You will note all the directions are L(eft) or I(n).· When the mill starts out it is set at 0,0 so the only way it can travel on the first X move
is L.· The only way it can travel on the first Y move is I.· What I have to do now is figure out how to change the direction to accomplish the etching.· For instance, the gcode says "Go to coordinates X, Y."· My code has to translate that to "If the new X is less than the old X then
direction is changed from L to R.· If new R is greater than old R the direction remains L".· And the same for the·Y Axis.
Did I explain that so you can understand it?· This is where I really need help.· I have attached my program as far as I've gotten so you can take a look at it.
Sid
Post edited by Newzed
i found this thread an i have to say first than i'm not imediately interested for this kind of tool.
But because it's look as a community entousiast job i would to propose my help.
I was working several years as development engineers in to a factory to develop automatisation an robot as cnc machine, robotic arm and automatized paletization.
Due of this experience and regarding at your project i would to submit these sugestion:
1) You are looking to drive x and y axle by stepper motor;ok but just only if you use your stepper motor to drive something like a screw axle because if you use a stepper motor directly to drive the load he don't have torque enough to maintain it(see for screw ball bearing axle at: www.skf.com)
2) If i follow your project, Z axle must be bang-bang (up and down with a solenoid)!!!!!!!!!!
Wath about the adjustment of the cutting deep?
No i'm sure than Z axle must be controled same as X and Y.
3)due of the accuracy you need i suggest you to use linear encoder like something than heidenhain produce(see at:www.heidenhain.com). Its easy and cheaper to do it self when you understand the use of binary counting in to a measurement aplication.
4) personally i use for some prototyp linear beam(or rod?) from old drawing table.It's easy to find them at a very cheapper price due of the use of computer to solve industrial drawing to day.They don't have lash , are very stable, 2 axle and are fitted with roll bearing and lash adjustment.
For info i've buy 5 full piece(X-Y) for 5 €(+/- 5 dollars) I've canibalised them and now i'm the owner of a big table(A3 size) whos support 1 x axle, 2 Y axle and 2 z axle. Each Z axle are fitted with speed adjusting motor with radial bearing and axial bearing (due of the axial pressure when i use it to drill).It's able to drill 50 hole in to a 6 mm glass panel in to 5minutes 37 sec, using a diamond drill tool and refreshed with water.
I hope these text helpfull an don't hesitate to contact for more info.
Actually i'm in to a rolling chair for a couple of week due of a accident so i have time to discuss about.
Sorry if i don't send you some drawing but i don't have cad programm at home and it's impossible for me to go to the office right now so maybe you now a web site where i can download a little cad software?
Also i woud to excuse me for my bad acknowledment of your langage, normally i speak french and i'm sure than technology enthusiast don't have bordier.
For immediate contact:michel.dechief@skynet.be, otherwise, this forum.
Hope many chance to your project,
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
If you are looking to use some drawing table beam, you have to install to x beam, the first(orignal) is motorised and the second (free) support the end of the y axle otherwize the beam lift when you ad pressure onto the z axle.Be very carrefull to respect paralelism bethween the two x axle.
A good think to create a low cost linear sensor is to use two resistor film for each axle.Each resistor film develloping the whole lenght of the axle and are connected on opposite side.Its means like x is at zero, first resistor signal is +/- 5Volt and second resistor signal is +/- 0 volt . So, when travelling the x axle you have the opportunity to take two measurement and so have more accurracy.
Personaly i have a accurracy of 0,01 mm at 20°C tested with a hp laser tool and using normal dc motor whos drive SKF ball bearing screw transmission.
If you need some info's i'm still at your disposition.
Regard's
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
I am in the middle of doing some reno work here, so my time to try and write some code has been nill. I figured the best i could do right now is just give you an idea to play with. I am not necessarily applying this to your setup, but you should get the jist of what i am doing here.
In reality, you only need one data xy coordinate to position the mill at the start point and drop the cutter to the board for the mill start. After that, it is only motor steps on a certain axis, and then retract and home the mill. So, the clutter in the data has to be removed. Analysing the gcode by stepping through pairs of lines with some logic should take care of that. Then a new data sequence would be compiled for the xy moves.
The format of the excel to look at direction: comparing position, first 2 lines
DATA Word 0 , X , Word 2500 , Y ' starting xy position
DATA Word 2800 , X , Word 2500 , Y ' ending xy position
The operation would start at 0x, 2500y and move the mill 2800 along the x, through 2500 y. We could say this is a " right " move direction. What needs to be done is to compare the 2 lines of data to determine if movement is along x or y. The y value is the same, so the y is not needed for the move, the x value is different, it is greater on the second then the first. It shows a distance of 2800 in a positive direction, so in theory the second line could be translated (output to new data) to DATA Word 2800, X, R ( r for positive direction on x axis ) . Now comparing the third and 2nd line for move no.2 :
DATA Word 2800 , X , Word 2500 , Y
DATA Word 2800 , X , Word 0 , Y ' difference of negitive 2500 on y axis, x the same
X is equal, or at same position, so data can be eliminated. The translated data line would be DATA Word 2500, Y, L ( L for negitive direction on y axis ). Now the 4th line is compared to the 3rd, and so on.
For the basic code, i am a little stumped here, because i don't know if you can compare the values in the seperate lines when they are brought in for analysis, without assigning different variables to the x and y values. Anyway, this is what i thought of.
' 2 lines to read from data locations and xy values to be placed in alternate variables
x0 'x1 var ' first line x set to x1
y2500 'y1var ' first line y set to y1
x2800 'x2var ' second line x set to x2
y2500 'y2var ' second line y set to y2
Once the variables are loaded, now to look at the values and determine step and direction. The translated lines are stored to another data area as the step sequence.
if x2 > x1
then x2 - x1 = x ( load to new / data word 2800,R ) 2800 - 0 = 2800 steps right on x motor
elseif x2 < x1
then x1 - x2 = x ( load to new / data word x,L ) false condition
elseif x1 = x2
then x = 0 ( no move. no data write ) false condition
elsif y2 > y1
then y2 - y1 = y ( load to new / data word y,R ) false condition
elseif y2 < y1
then y1 - y2 = y ( load to new / data word y, L ) false condition
elseif y1 = y2
then y = 0 ( no move. no data write ) 2500 = 2500 no movement on y motor
endif
As you can see, out of this, only one data line is written to the new sequence which gives the steps and direction for the x motor.
I am lost as figuring out the data pointer stuff to step through the pairs of lines, i have not had time to look into it. You seem to have a pretty good handle on that, so maybe it won't be hard for you to code.
I hope this helps, it looks like it should work if the data locations can be stepped through properly.
kelvin
That is a great idea of using an old drafting table for parts, never even considered that one. What kind of cad software are you looking for? You might be able to find something on www.download.com.
kelvin
Thank's for web site tips ,I find a lot cad soft this night on www.freebyte.com,they have many free downloadable cad soft including a lot to generate PCB.Very interresting.
For mechanical aplication i've coise personnaly ALIBE who's a full 2D/3D soft, very great for this price!!
So if my hel is needed for mechanical drawing, i'm ready.
Regards,
Michel
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Regards from Belgium,
Michel Dechief.
Engineer and professor at Brussel's university (artificial intelligency)
X CON "L"
Y CON "I"
X1 CON "R"
Y1 CON "O"
so that now the gcode listing is read as L, I, R or O instead of X, Y, X1 and Y1.· I have to manually change X to X1 or Y to Y1 to tell the program which direction it wants to go but I have an idea about working around that.· When the program runs it uses the following debug statement:
DEBUG· "DATA WORD ", DEC f,",", 34,dir, 34,cr···
and the debug screen displays:
DATA WORD 2500,"I"
DATA WORD 2800,"L"
DATA WORD 2500,"O"
DATA WORD 2800,"R"
which I can copy and paste directly into Excel for safekeeping, thence to my etch program.· I coiuld use Hyperterminal and capture the file to Excel but in this case I think it is easier to just copy and paste it.· I don't know how many lines of text the debug screen can display - I'm sure there is a limit - but if the DATA list is too long I may have to go the Hyper/Capture route.
So that is where I am now.· What do you think?
Sid
I figured out a way for the program to change direction based on the coordinate.· Now I can use the gcode in its original form - no mods required.· The X and Y are changed to L and I by the CONs so the debug screen now says:
··········· DATA WORD 200,· "L"
··········· DATA WORD 1200,· "I"
··········· DATA WORD 100,· "L"
··········· DATA WORD 1400,· "I"··
I said no mods to the original gcode - that is not quite true.· I still have to delete all the Z lines because the Stamp would not recognize them, but other than that, no changes.
Now I will have to try in out for real to see if the resultant etch pattern is correct.· If this works I think my trouble are over.· The only part I don't like is that I have to draw the etch lines with the silkscreen layer.· If you overshoot with a silkscreen line, you know you have to grab the line by·its very end to change its length.
Sid
That is interesting. Is that because you only need the path data and not all the trace information?
Nice work. I've said this before, but very clever.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - PLJack - - -
Perfection in design is not achieved when there is nothing left to add.
It is achieved when there is nothing left to take away.
Yes.· When you export the .dxf file from Express, the .dxf files·copy only silkscreen layer information.· · I don't really care about the traces at this point because the traces are what is left when you finish etching.· As soon as I get proficient with the procedure it will save a tremendous time by not having to manually write the DATA list for the Stamp.· In addition, I don't have to jot down the etch path data - I just draw the pattern and it is all stored in the .dxf file.· I guess Super Mill is just about a CNC mill now, sort of.· Maybe I'll rename it Super CNC Mill [noparse]:)[/noparse]).
Sid
That's great to hear, i was starting to get a little frusrated myself, but i was trying to go another route.
There is some pcb software that will let you select different layers for export, that might be worth looking into. As far as the gcode for the z axis goes, no big deal, your own mill program can take care of those routines. Sorry i wasn't much help. I am still going to pursue building a system in the near future, and this has been a good insight into making it " cad compatible ". I know the stamp is not capable of doing a complete translation of the gcode, maybe the propeller will be the ticket. I suppose the easiest way would be to write a program in Vbasic to do all the real work for the decoding. Maybe someone will take that on in the future. I made up a little program to output steps and direction from 2 lines of xy coordinates from gcode that produce a line. Not much good to you now, but might help later for sorting some coordinates. The data stuff is very basic, I just wanted to show the logic behind it.
kelvin
So......I made another drawing in Express and left the origin where it belonged, at upper right, and exported the .dxf file.· When I converted the .dxf file with gcode with ACE all the Y coordintes were negative again.· When I did the reformat in Excel I again multiplied the Y figures by 1000 and then -1.· I did my thing and this time the resultant pattern I got was exactly what I had drawn in Express with the proper orientation.
I hope this is the end of these little problems.· Maybe now I have really got it right.·
Sid
·Post edited by Newzed
Made a couple of dry runs at my desk and everything seemed OK so I transferred the program out to the shop via my handy dandy little
LINKSYS.· Put a new piece of PC board on the table, got everything set and ran the program.· The pattern was a perfect duplicate of what I had drawn in Express.· I feel like I have just invented the wheel or something
Have to be careful not to get too excited at my age·but I really feel good about the whole thing.· Only took eight days.
If you have a little mill like mine and/or you use Expresspcb, ·everything is available for the asking.
Sid
kelvin
A video would be neat too!
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
·
Steve
"Inside each and every one of us is our one, true authentic swing. Something we was born with. Something that's ours and ours alone. Something that can't be learned... something that's got to be remembered."
Way to go Sid.
You are the best thing to become of this thread.
Definitely an inspiration.
Thanks.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - PLJack - - -
Perfection in design is not achieved when there is nothing left to add.
It is achieved when there is nothing left to take away.
There is one peculiar thing - when I drew etch path, I did the board outline first, then left-in-right-out to divide the board vertically between the lefthand paths and the righthand paths (I had resistors and capacitors connecting the left side and the right side), then I drew all the paths to isolate the traces and pads.· The .dxf file did all the litle isolation paths first, then the board outline, then the dividing path.· Strange.
However, as I have said before about computers and programs and other technical stuff, you really don't have to know how they work, just how to use them.
I have attached a picture of the etch path so you can see what I mean by the vertical dividing line.
Kelvin, we need a name for this new wheel!!!
Sid
Sid
I'm not too good on the name thing, but i'll give it some thought. Here is one off the top-- Cadallax Intelli-Mill
kelvin
I'm trying to expand the program by adding routines to drill holes using gcdode coordinates.· My first trial drilled four random holes and an 8-pin DIP, but it needs a lot of cleanup and simplifying.· When the program starts it goes to X and then to Y.· I want to drill only when it reached Y.· The EEPROM pointer is 1 at X and 4 at Y, which makes all X pointers odd and all Y pointers even.· So just after the travelling·subroutine I wrote:
com = pointer//2
if com = 0 then gosub drill
Haven't tried the thing yet - I just finished writing it - but I'll give it a shot as soon as I finish my coffee.· I'll post the results.
Sid
Sid
It would be better to do it with 2 passes, just take a little off with the first pass, and go to board level on the second. If you had a fine enough stone, it would polish the board also. Now, you will just have to make an auto tool changer.
kelvin
As far as the deburring is concerned, I have a flat grinding wheel about .625 diameter but the problem with grinding wheels is that they rapidly fill up with copper and become ineffective.· I have a steel brush in my Dremel kit and I'm going to try that, but I have a feeling that at high speed the steel strands will sort of flatten out and won't even touch the board - we'll see.
Wouldn't it be nice to have a turret mill like a turret drill - then you could have three tools mounted and just rotate the turret when you wanted to change tools.· However, at 20,000 RPM that may not be practical.
Sid
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
·
Steve
"Inside each and every one of us is our one, true authentic swing. Something we was born with. Something that's ours and ours alone. Something that can't be learned... something that's got to be remembered."