CNC/Laser Engraver using G120

I remember a month and a half or so ago multiple people told me that it cannot be done in managed code. :whistle:

3 Likes

@ EvoMotors - You’ve given me an idea to draw the pcb stencil by plotting directly on the sensitized board. I just have to keep strong light away from it while it’s plotting… Oh, I could also use transparencies! I’m going to do a transparent plot later. Actually, transfer paper works too.

Plotting on the sensitized board? I think it’s easier to just print directly on the ā€œInkjet Printable Transparency Filmā€ with Inkjet printer. I had a good success doing this before.

@ EvoMotors - Nah, one really needs a plotter to ensure there are no pin holes from the printing process that can cause pin holes in the copper traces afterwards. I use a photo resist film to do my artwork. It has a plastic backing that comes off only when you need to cure it. I could plot directly onto that plastic layer, if I had the correct pen ink.

@ EvoMotors - i have had a little go merging in some snippets of your code and made some huge improvements to my acceleration code. Your crazy FillArray routine has made a huge performance difference. I just need to fix a small bug with the starting speed and I will post a snippet. Many thanks.

1 Like

Very interested to see it as I don’t have acceleration implemented.

@ EvoMotors - Running on the g120. You can here the delays between the button presses and movement. It used to take seconds to create the buffers. You can see on some of the combined XY moves that the two signal generators don’t start simultaniously despite being sequential line of code. Not so easy to spot on slower moves though. Without accel it wont go anywhere near this speed without skipping steps.Differential drive pan tilt using netMF - YouTube

2 Likes
 createMotionBuffer(double maxSpeed, uint stepsToMove)
        {
            if (stepsToMove == 0) { return null; }

            uint pulseLength = 10;//microseconds;

            int arrayLength = (int)stepsToMove * 2 - 1;
            uint[] timingBuffer;
            timingBuffer = FillArray(arrayLength, pulseLength);

            double a = accel / 1000000;             //pre - scale accel to microseconds
            double c = 1000000 / conversionFactor;  //precalc this to speed things up //conversion factor depends on step angle and microstep setting
            uint period = 0;
            uint tCum = pulseLength *1000;           //This is wrong
            double currentSpeed = 0 ;      
 
            int endStart = timingBuffer.Length - 1;

            for (int i = 1; i < stepsToMove - 1; i += 2)
            {
                currentSpeed = System.Math.Min(tCum * a, maxSpeed);
                period = (uint)(c / currentSpeed);//accel control
                tCum += period;                     //cummulative time
                timingBuffer[i] = period;           //accel control
                timingBuffer[endStart - i] = period;//decel control
            }

            return timingBuffer;
        }

I still need to sort the first and last pulse spacings out. But it’s good enough.

Bit banging stepper motors. Classic.

[quote=ā€œMr. John Smithā€]Bit banging stepper motors. Classic.[/quote] How is this different to a 3D printer? Other than having to precalculate the timings up front to make use of the signal generator class.

@ hagster - that bot is awesome. I can’t figure out how the gearing works… How are you switching between the upper & lower gears on the servos? Are the files for that available somewhere?

One of the pinion gears on each stepper is just an idler. It helps keep the main gear cenered.

Not currently planning on releasing the files. Too mich work went into the mechanics to give it away for free.

Ah… So, one has an idler on top and the other has an idler on the bottom?

That’s certainly your right. You might ask yourself how much work someone else put into the next piece of open source work you use. If nothing else you may want to put the files up on one of the sites that let’s you charge for them. Regardless, I thank you for the knowledge. I’m sure I’ll find a use for this gear configuration sometime in the future.

@ ianlee74 - as a functional thing its not protected by copyright and there is prior art that would prevent a patent. So to release the files would give away the only protection I have on it. The only sites I know that charge for models(and protect the cad files) are shapeways and materialise.

As I said im not currently planning on open sourcing it, but that may change.

@ ianlee74 Here is an interesting new project for an open source robot arm that might be interesting to you. I haven’t drilled down into its capabilities yet
https://all3dp.com/bcn3d-moveo-open-source-3d-printed-robot/ but it certainly looks cool.

1 Like

That looks fantastic! I’ve been waiting for someone to create a printable robotic arm like that. That’s definitely on my short list of things to make. Thanks!

Back to the managed NETMF CNC device…
I think I’ll add automatic solder paste dispensing functionality to the list.

2 Likes

Sorry, I dragged it off topic for a bit there.

Or…Use a laser to cut the stencils out of kapton. Like https://www.oshstencils.com/ do :whistle:

Laser cutter is possible and already planned. I already got the 2.5W laser, but… The issue is that the beam is too thick in most of the hobby LED lasers. The one I got is 0.5mm.

Automatically dispensing solder paste is more fun. There are bunch of videos on YouTube where someone dispensing it using 3D printer. In a few of those videos it looks like they have a success.

@ EvoMotors - They use deposition needles for that. You will also need a peristaltic pump that is driven by stepper motor, to run the hydraulics, otherwise you won’t get tight control of the amount of paste that is being dispensed. It will be good for some components but not for all. Further, you pads may have to be slightly oversized.

I had wanted to try dispensing solder like it was 3d printer filament, but the rosin core would boil off and cause it to splatter.