View Full Version : CONVERSION: Hacking a Roland CAMM3 PNC-3000

Robin Hewitt
30-01-2011, 01:17 PM
Hacking a Roland CAMM3 PNC-3000 just about sums it up...

I got it for the look and it has passed wife inspection for home office use (provided it doesn't make a mess). Good idea for cold weather if you can get away with it :smile:

It's a small 3 axis mill with ball screws resolving 5um, round linear rails and a robust cast aluminium frame of average section about 1cm. It's also a bit of a dinosaur :naughty:

Good thing is you can download all the circuit diagrams, meaning you can copy it's EPROM's and make sense of them with a Zilog disassembler. It's got a Z80 :smile:

I have a new proto BIOS written so I can upload new code and run it in RAM. Much easier than blowing zillions of EPROMS. All looks pretty straight forwards. Have you discovered Dosbox? It's a freeby that lets you run antique software under XP, Win7 and, amazingly, it all works. Nominate a directory containing all your DOS favourites, mount it as a disk drive under Dosbox and away you go. Google for dosbox if you want it.

Mechanically I need splash guards to comply with wifely edict. I also want to hush it up a bit. The brushed AC motor isn't too bad but DC would be quieter and I could slow it down a lot, it's much to fast. I'm fitting an ER16 spindle at the same time because Roland collets leave a bit to be desired.

Pic 1: Spindle out, motor out, new ER16 spindle waiting to go in.

blackburn mark
30-01-2011, 01:47 PM
i do like the look of that machine, i can see why the wife has passed it for indoor use :)
im looking farward to seeing this one develop

Robin Hewitt
05-02-2011, 02:15 PM
I replaced the EPROM so it now comes up and wants to communicate, lets me upload programs and run them.

Just did "reading the buttons". I can see the XYZ positioning encoder knobs on the front panel are going to be tricky.

To read the panel buttons and encoders I have to clock the data out serially by reading two dedicated port addresses. No problem except for the encoders which are odd. I get a direction and a brief pulse to say it's moving. Blink and you've missed it. They are not making this easy. Resisting the temptation to rewire it so I read the encoders raw :naughty:

Worry about that later, they've probably fine tuned the pulse to one step in crawl mode so I just read once per interrupt.

Next, lighting the LED's and setting the XYZ co-ordinate displays. Then I'll fire up the interrupts and get her moving again.

Still waiting for bits to do the new spindle. Bought the Ampflow E-150 DC motor and it looks delighful. Slightly concerned about how much heat it can dump into the metalwork without overheating, may need an extra fan. It's rather apart at the moment, you can see the 35mm round rails supporting the head. Feels fairly solid :smile:

Robin Hewitt
13-02-2011, 02:26 PM
I got in a couple of days on the new firmware. I now have control of the knobs, buttons, motors and displays.

About 25% of that couple of days was persuading the XYZ position displays to behave themselves. Instead of TTL 7 seg display drivers they use some cack-a-mamy processor that needs to be interrupted when the direction line changes. It needs a delay after a direction change before it is prepared to start counting. No delay and it counts the wrong way. Get the delay wrong and it can go truly bananas.

No goto xyz yet, written but not tested. OTOH it does move because the Home button works. For Home I sidle up to the limit switches at 5mm/s until they are all shut. Then I back off at 2.5mm/s until they are all open. Then I wind into them again at 1mm/s. They aren't exactly brilliant, worst case repeatability is 35um out, need to think about that.

All stop now while I invent a command protocol. I want the host computer to do the sums but there is a limit on how fast i can pump information down the serial line. I need a compromise comms platform, a CCP :naughty:

13-02-2011, 04:42 PM
i like the look of this machine, whats the total working area?

Robin Hewitt
13-02-2011, 08:29 PM
i like the look of this machine, whats the total working area?

Not a lot :naughty: X 180, Y 150, Z 150

I just found a blown ball bushing. Nil problemo because I can replace all 4 XY rails and all 8 XY bearings for around 50 from Gary and it will be like new. They are all 20mm :smile:


13-02-2011, 11:12 PM
Ah nice one, im looking for something like that but a bit bigger, looks uber retro

Robin Hewitt
18-02-2011, 12:07 AM
It's been driving me spotty, but I think I am now convinced that it's the X,Y,Z position display that is wrong not the steppers. Time to give up on the displays and do some CNC type moving.

With my harum-scarum step sequence the counter stays 100% in synch with the steppers.

With my everyone moves together routine the displays are out one count per shift.

Makes not a lick of sense to me.

Pic is the encoder output. When you turn the dial one click you get a 1.25mS pulse. If direction changes you see the direction line (yellow) go 1.25mS before the pulse. This is surprisingly convenient when you are sampling at 1KHz to get 5mm/s at 200steps/mm. The motor will happily slam in to reverse at 5mm/s. Another clue that their 500Hz double step was a ghastly bodge to overcome a problem with the display :naughty:

Robin Hewitt
20-02-2011, 07:18 PM
New motor and ER-16 chuck fitted. Used cheap bearings which are running noisy and a tadge warm, I'll give them a few hours and if they don't settle down and start behaving I'll have to shell out for something more up-market :whistling:

21-02-2011, 09:00 AM
I love this machine, just wish it was a little bigger. looks sturdy tho, what materials you gonna be cutting on it?

Robin Hewitt
22-02-2011, 12:03 AM
I love this machine, just wish it was a little bigger. looks sturdy tho, what materials you gonna be cutting on it?

Aluminiglum :smile: so it has to sprout splashguards and suds before I can try it out.

MSC/J&L are having a 35% off catalogue sale and I think I just bought 3-4-5 & 6mm super precision ER16 collets for 12.51 a pop plus tax. Apparently, as I just gleaned, ER16 collet precision is measured at a hypothetical tool tip 10mm in front of the collet. Standard ebay precision, DIN 6499, is .013mm (half a thou) but this ETM bunch do standard precision at .010mm and super precision at .005mm.

In the old days before resistors were laser trimmed, if you bought a 10k 5% then you knew it would never be exactly 10k because that would have dropped in the 1% tray on test.

Wonder if collets are the same :naughty:

Robin Hewitt
16-03-2011, 10:06 PM
Lengthy pause while I took a crash course in C#/XAML programming so I could do the Roland controller.

So far I have read in a G code, smashed the arcs into a zillion straight lines so that the .005mm resolution is never compromised, saved it as 32bit relative and read it back to the screen to see if it looks right. Screen shot in the pic is Windows 7.

Next, talking to it... :naughty:


Robin Hewitt
24-03-2011, 10:52 AM
Well it now seems to be cutting. I really like this WIndows programming malarky paticularly the practically unlimited memory. I'm going to have to change my Warco over to Windows next, I can see it coming, I could do wonderful things if I wasn't struggling not to timeout on a 4MHz Z80.

With a 1024 line buffer in the Roland I am immune to the odd Windows delay, I can shrink it down and do other stuff while it's cutting.

I added a little picture of a Roland drawn in 3 parts so I can move the bed and head around to reflect the actual machine positions. Windows sorts it all out, no flicker at all, it is strangely fascinating to watch.

Next the tool position cursors, I think perhaps a pointy tool image in ISO mode rather than recreating the actual tool. Make it easy to see exactly where it is on the tool path. In plan view something akin to a Moire point perhaps.



01-04-2011, 11:33 PM
Your having fun! RE RS232, in my home brew software I have to calculate the estimated time of a move before it's sent. It's a servo machine that'll do 5m/s if you let it but the reality is you have to wait till the machine card is ready to accept another move instead of hammer it wth commands.
Anyway, these used to run on CAMGL, a sort of HPGL for routers. Sturdy little devils though, good stiff construction, big bearings and proper ballscrew I think. At the end of the day you could just pulse the steppers down the parrallel. Re homing, sounds like are there endcoders on it, real acurate would be crossing the home switches, then stepping going back to a rising edge. Very repeatable.

Robin Hewitt
02-04-2011, 10:34 AM
Hi Black

Glad to know I'm not the only geek hereabouts, I can now do tech speak :o)

I'm writing a sort of package, a new EPROM for the Roland and a Windows program to drive it on a modern, 64 bit machine without parallel and serial ports, which seem to have been consigned to the dustbin of history.

Windows isn't designed for CNC so you need a seperate processor to do the step timing, the Roland processor is an easy choice. If you look at the Roland circuit diagram you will see a maskable interrupt for the comms and a non-maskable interrupt for the step timing. Using the serial port at 9600 restricts the data flow to manageable levels without handshaking, makes it easy. I vector the NMI interrupt to different service routines for Idle, Jog, Move, Brake, Home and CNC. The service routines never kill the comms interrupt long enough to get overrun errors so I can use a USB to serial adaptor without trying to configure it. The CNC interrupt pulls data out of the command buffer, the serial interrupt keeps the buffer topped up. The main body of the program just sits in an idle loop, fiddling with the LED's, looking to see if a button has been pressed, wondering if it should send anything to the host.

I send it pre-digested straight line cuts, it sends me status data, basically where it is, current feed rate and how full the command buffer is. If the command buffer drops below 800 I send it another 10 lines to cut. I haven't done error handling yet because it hasn't thrown any comms errors, (although I do check).

Of course everything in Windows is event driven, you have to keep passing control back or you end up in a "Program is not responding" condition. I open a seperate thread to talk to the Roland which keeps the buffer topped up, requests the Roland status and then goes to sleep for a few mS before checking to see if it has enough bytes in the receive buffer. It wakes the main thread up when it is time to repaint the screen. If Windows decides to do something more important and doesn't come back for half a second it doesn't matter. With 800 commands in it's buffer the Roland is good to go for a minute of so without contact with the PC, you can shrink my program down, check your emails, do a bit of CAD etc. I use the feed rate display on the Roland to show how full the command buffer is, it's reassuring.

I hear what you say about the home switches, they close sweetly enough, bounce like crazy when you open them. I find them, back off and then close them again at a slower feed rate. I get errors of one step on the Y, perfection on X and Z.



02-04-2011, 04:28 PM
The motion buffer is good. I'm stuck with a 2 command buffer. I'm using an ancient baldor card, just "upgrade" from the euosystem to euroserver, ie from servo x and y, stepper z to all servo. The card sold but quite good, it'll interpolate 3d moves it's self and do circular arcs in 2 axis. I've got it arcing in x and y but want to extend to the other axis. I drip feed via RS232 but it's slow. My timings showed max 100ms, the current version of software uses 70ms as the limit which all seems to be working very stabally. The problem with servos is you cant just stop them, theres a ramp to consider so the current software works this out, this is crucial for multiple points at the same velocity I find. The motion buffer is only 2 moves and the next one has to be available for smooth motion. Think I've got teh balence just about right now. You have to optimise the moves, 1000 line encoders, 4mm pitch and quadrature gives me 1000 steps per mm, so it's quite possible to send it 50 distinct positional moves and only have it move 1mm! So theres sort of a sense and reason algorythn that tries to get rid of sill small stuff and interpolate it a circluar arcs. Very short but neccessary moves are allowed to ramp up and down. But it'll do quite intricate stuff now at 30mm/s which is good enough. The data packets I am stuck with, there is a command set and a checksum to add and then you should get a reply within 10ms that all has been recieved and understood. The advantage with the card is it was free, and with the right optimisation can run pretty fast. The next version of the soft will cater for circular interpolation in y/z and x/z allowing faster parallel finishing. It runs on an old 486 on XP and seens OK, no what you mean though, event based, it doesn't do what it's told, only what it feels like doing, which is why the software takes into account the time to transmit and recieve and guesimates wether the next command will be there in time, if not, I have a special command that tells the card to not assume constant velocity so it can ramp. It also does this if the angle of motion change is too much as this upsets the controller as wel. My other option is a spare eprom that has MINT on it. I could write a load of code for it and build in a buffer, say 100 positional moves. The move buffer though would still be 2 moves and the code still has to be there if the buffer runs dry. Its really pretty annoying 2 1/2 hours through a job to get a sudden following error! I think steppers are better in this respect, they're not really bothered where they are, this card is obsessed with where it thinks it is, to 0.001 of a mm! I have set this now to 1 mm, experience has taught me it's either spot on or crashed. The code used to read simple CAMgl as a tool path but this is only 2 1/2d really so I went to APT to envisage full 3D. Working stably at the moment so, and no joke, it'll be the first time in 10 years I can confidently design something and cut it!

I have a little sherline lathe for stuff i used to do in a previous life, I bought and old (55 years) worn myford just to pat off bits to put in the sherline. Being me, I the spent more time making parts for the myford than actually doing anything productive! A project in itself! So I sold it and bought a new big lathe, that you can just switch on and use, First job, yes, make new motor mounts for the NC mill and rebuild it!

I want to rewrite the software to do circular arc in the other axis, I wwant to do it now. But I am going to be good and going to bang out some cribbage boards and stick them on ebay to demonstrate to the wife my garage and all the junk in it has a use!

If my source is any use you are welcome to have it, it's very nerdy, no commments, pascal, D7, very readable. Reads APT file from Rhinocam and posts it to my own format, (the cam gl stuff is probably still there somwhere), which can then be drip fed. I did write loads of RS232 stuff but now use a Baldor dll which also has access to good stable RS232 comms commands.

Garage bekoning!


Robin Hewitt
16-04-2011, 01:16 PM
Slow progress. It's not so much writing the code as figuring out what I am trying to achieve.

My first attempt a locating the tool to the billet was basically crap. Much too complicated. I just rewrote it to be easy.

I now have a blinky led when the billet position would exceed the Roland active area.

The positioning buttons P1, P2, Z0, Z1, Z2 now move to their set position if I click them, or set themselves (and everyone else) to their current position if held down for more than 1 second. It is wonderfully intuitive.

I decided on a compulsory trip to the limit switches when switched on. I have to know where it is to make any sense of the G code limits. I follow the 'home' move with a a fast return to the starting point to make it less of a chore.

Next problem: If I press PAUSE mid cut the tool winds down through it's acceleration table to a dead stop, then rewrites the cut buffer so it will accelerate again when unPAUSED.

I now have to guess everything I might want to do when it is paused.

Having fun :beer:

25-04-2011, 10:15 PM
Hi. Did mine with x,y,z to home on startup, home to limits then forward to a rising edge, with the option of doing this again between paths. Fit the tool, first op z goes down to a depth switch which is suprisingly acurate. I have two strips to butt the billet against, the homebrew knows where these are as well, simple to measure billet thickness and type in plus an extra input for any backing. Then press cut, homebrew applies all these to the toolpath and most of the time, nothing bad happens!

26-04-2011, 12:30 AM
My cnc

Some tests during the rebuild

A long boring vid but shows the tool depth process:

Moving fast, 250mm/s

Robin Hewitt
26-04-2011, 11:17 AM
Moving fast, 250mm/s

Gosh that's quick :surprised:

Where d'you get the bellows from?

26-04-2011, 12:33 PM
Impractically quick! (and dangerous!). Usually cut wood between 5 and 20 depending how deep. Bellows came with the unit (Isel), 20 years old now. They are actuall just folded with U shaped thin plastic formers glued in the folds.


Robin Hewitt
12-08-2011, 08:20 PM
Me again

I replaced the 20mm linear shafting and it certainly tightened it up.

Replaced the X, Y ball screws and doubled up on the nuts to add a 1kN preload :naughty:

The ebay M8x.75 half nuts I bought on Monday haven't arrived. Can't thread the ballscrews 'til I have the nuts or it suddenly becomes guesswork for the length and die closure.

A very nice man at bellevillesprings.com gave me half a dozen washers to preload the thrust bearings. Their 15 minimum order translated in to 150 pcs :whistling:

The metal for the splash guards did arrive so I will probably start on that.

Pic is the bed and saddle upside down.

Robin Hewitt
14-08-2011, 10:42 PM
I've extended the table 2" forwards with a lip. Then I decided that driving my Warco mill using MSDOS was a right PITA after seeing what Windows 7 can do with this thing.

I have the new software about 80% complete so I'm going to do that before I cut the splashguards. It takes a DXF file, converts it to a cut and then drives the mill.

Back in a few weeks, if I don't get sidetracked again :whistling:


Robin Hewitt
14-11-2011, 08:13 PM
Me again

Splash guards fitted and looking a bit '70s retro.

An IP65 sealed box bolted to the right hand end is the suds tank, I'm using the Tee slot as a gutter.

Next, sealing it with gasket compound and cutting some slots in the bed so I can fit tee nuts from above and improve the drainage.


14-11-2011, 08:59 PM
i love this little machine..

What materials are you going to cut with this and what sort of things are you going to produce?

Robin Hewitt
14-11-2011, 09:29 PM
What materials are you going to cut with this and what sort of things are you going to produce?

You asked me that before, you want me to be more specific? :naughty:

Specifically, I plan to cut Alumec and make injection tooling.

Alumec is a sort of improved 7075 T6 alloy in 3 grades which can hold a deeper temper. Get it from Blackburn metals.

14-11-2011, 10:44 PM
Ah so i did.

Sounds very interesting. keep it up mate

28-10-2015, 05:13 AM
Hi Robin,

I have an old PNC3000 at home, used it few years ago but EPROMS seem to be dead now (25 years old...).
I understand you have reprogrammed yours, and I would like to give another life to my machine.
Do you know where I can find the original EPROM content?

On the longer run, I would like to replace all this venerable electronics with a Raspberry PI + some kind of controller board (the one used on 3D printers or a custom designed one, linux enabled if possible). Do you know about such initiatives?

Many thanks for your help

Kind Regards


04-08-2017, 07:18 AM
New motor and ER-16 chuck fitted. Used cheap bearings which are running noisy and a tadge warm, I'll give them a few hours and if they don't settle down and start behaving I'll have to shell out for something more up-market :whistling:

Hi Robin Hewitt - Can you please tell me the actual manufactures part numbers for the DC Motor and the ER16 spindle you placed in your Roland CAMM3 PNC-3000. Additionally, can you please provide me both pulley part numbers along with the belt you used.