Thread: Hacking a Roland CAMM3 PNC-3000
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:
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:
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.
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.Sherline lathe, Chester DB11V lathe, Myford/ Rodney mill, CNC mill Isel/ home made, Sealy Hack Saw, Meddings Pillar drill.
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.
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.
TomSherline lathe, Chester DB11V lathe, Myford/ Rodney mill, CNC mill Isel/ home made, Sealy Hack Saw, Meddings Pillar drill.
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.
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!Sherline lathe, Chester DB11V lathe, Myford/ Rodney mill, CNC mill Isel/ home made, Sealy Hack Saw, Meddings Pillar drill.
By dynamis_dk in forum New Member IntroductionsReplies: 8Last Post: 27-02-2014, 10:03 PM
FOR SALE: Roland CAMM3 PNC-3000 Desktop MillBy danielbriggs in forum Items For SaleReplies: 4Last Post: 25-01-2012, 05:14 PM
By fidia in forum Items For SaleReplies: 19Last Post: 26-07-2011, 09:07 PM
NEW MEMBER: Hi From Oxfordshire - with Roland CAMM3 machineBy rowifi in forum New Member IntroductionsReplies: 1Last Post: 15-02-2011, 04:04 AM
By Robin Hewitt in forum General DiscussionReplies: 12Last Post: 21-11-2008, 12:30 PM