I am am writing a Arduino terminal sketch for a semi-manual divider. I should think that if one has a manual mill with a DRO, then it should be a handy addition.
The only issue is: it was written for Vexta steppers, which are different in that they have a forward pulse and a reverse pulse, and not pulse and sign pins.
The code is still young, and I still need to implement an find home routine for a optical/hall sensor, I will post the code, which should be easy to modify. All the setup information is saved to EEPROM which is handy for multiple motors. Location is kept in double precision variables. Most moves are done with a sinusoidal smooth stepping routine. I was testing it last night on an old Vexta harmonic drive with 100,000 steps per revolution.
These are the commands:
Use Command
Set Pulsewidth: setpulse
Set Delay: setdelay
Set Home Delay: sethomedelay
Set Smoothing: setsmoothing
Set Smooth Length setsmoothlength
Set Speed 1/x: setspeed
Set Home: sethome
Settings? settings
Find Home: fh
Go Home: h
Divide: divide
End Division: divend
Next Division: +
Previous Division: -
Seek Division: /
Move Turn: t
Move Degree: d
Move Radian: r
Current position? @
Help ?
Two questions if possible
1. does the program as written have, or can it have Accel/Decel for the driver ?
2. can we get a pulse from the Arduino at the end of the move , to show acknowledgement or completion of the move
My very old CNC mill has no 4th axis , but can send a pulse move an external function, and requires a response before it continues code .
Thanks
Rich
It could, but it would be a fair amount of work, so I think I would need to be convinced as to why this is needed. Typically, there is so little movement as well as so little load in going from one gear tooth position to the next that the effect of using a accel/decel curve would be negligible. What's the application you have in mind?
This would be fairly easy to do - how about two parameters you specify at compile time - the pin number of the arduino to raise high when the move is complete (you'll have to choose from amongst the ones that are unused), and the number of milliseconds this pulse remains high before the program continues. Would that work?2. can we get a pulse from the Arduino at the end of the move , to show acknowledgement or completion of the move
My very old CNC mill has no 4th axis , but can send a pulse move an external function, and requires a response before it continues code .
Thanks
Rich
"72.6 per cent of all statistics are made up on the spot." - Steven Wright
Thank you revwarguy for the comments
1.
I want to run an indexing head (40:1) for making gears I will direct drive the B&S Head (coupled) with a 460 In/oz # 34 stepper at either 24 or 48 volts.
Since any over stepping would destroy my angle requirement, I thought an accel/decel would assure a non-error move in critical rotation
I thought of using 1/8th steps as well .
2.
Yes, I believe it would . As a newbie with this arduino stuff, can I ask if the arduino tells the driver to move by drip feed ?
If it does, then a pulse of some length could trigger my CNC axis driver properly . If the number of pulses is "dumped" on the stepper driver, then I would have to delay the signal somehow to prevent a CNC move before the stepper completes it's assignment ?
Thanks again for the time and expertise
Rich
Previously all my gears were manually cut. I wish to speed that process up by using a arduino
Increasing the microstepping might help a bit here due to the resulting increase in wait time, but accel/decel would not, I believe. Adding additional gearing in front of the 40:1 (like a 2:1 ratio gear that would make it 80:1) would cut any per step movement uncertainty in half. That is a very powerful motor you are specifying. Are you planning on using the holding torque of the motor to lock the material in place during milling? I imagine the 40:1 comes from a worm gear, which provides some holding within its backlash uncertainty, which is usually a lot worse that the motor's positioning error.
Most of the time when I have seen "overstepping" is when the motor being used is underpowered during rotation. In this application there should be very little torque needed during the positioning period - how hard is it to turn the indexing head? I take it your stepper has a +/- positioning error of 5%?
The arduino moves the motor one step at a time. With the cheap driver I used, if you send it 5 steps "all at once" without waiting for the motor to complete each one, you will loose 4 steps, so yes, it is "drip feed." Only after the last pulse is positioned and the motor has had time to move would the POSITION_COMPLETE pin go high. The arduino spends its life waiting on either the motor, or you, but hey - what else does it have to do? Which driver would you be planning on using?2.
Yes, I believe it would . As a newbie with this arduino stuff, can I ask if the arduino tells the driver to move by drip feed ?
If it does, then a pulse of some length could trigger my CNC axis driver properly . If the number of pulses is "dumped" on the stepper driver, then I would have to delay the signal somehow to prevent a CNC move before the stepper completes it's assignment ?
"72.6 per cent of all statistics are made up on the spot." - Steven Wright
Yes, The Dividing head has a worm drive and the backlash is zero ( adjustable)
The holding torque will be used while cutting gears. I will start with a 24 volt power supply and if the holding is not enough, then go with a 48 supply ( to be built)
It is not difficult to rotate the Dividing head. I do not know what you mean by 5 %?
Thats great news about the drip feed ....I will use a ST-M 5045 for a driver
thanks
Rich
Depending on the material (stainless would be far worse than brass or aluminum for example) or depending on the angle of the cut (a straight cut would be a bit less problematic than an angled cut) and the type of cutter (a regular gear tooth cutter would not provide much in the way of rotary forces than, say, a milling bit) the holding torque of the motor should work out well.
The -/+ 5% is a number common to the vast majority of stepper motors in use. It means that when you tell it to move a native step (this is its base step movement before microstepping) it moves to that position with an error of +/- 5%. This is why (again, for most steppers) there is a 10% window of where the end position will actually be. It is also why, for most steppers, anything more than 10 microsteps is asking the motor to move with a precision that it is simply not capable of. This all assumes that microstepping provides a reliable, evenly spaced positioning within a native step, which it does not. In general, if you are really worried about positioning accuracy, microstepping will not solve that problem. One thing you can easily do is buy a stepper with 400 steps per rev instead of 200, which will still have the +/- 5% number with it, but its error is then cut in half. The 400 step/rev motors are more expensive, and you can effect the same error reduction by using a 2:1 gear ratio on the stepper. You've already gone quite a ways by using the 40:1 head. You just have to do the math to make sure that the positioning error that results after all the gearing is smaller than your needed tolerance on the part.
You might want to use a greater microstep value to make the motor run smoothly, but in my experience when you, say, go from 1/8 stepping to 1/32 stepping the resulting measured noise drop in db is negligible, as well as the vibration, especially in a shop environment. You are, however making the processor work 4 times as hard, since it has to generate 4 times as many pulses, which can often exceed the speed of some of these $10 computers, and the top movement speed will be limited by this, so you have to watch out for that as well.
Hope this helps.
"72.6 per cent of all statistics are made up on the spot." - Steven Wright
Rich,
I have made a 2.4 version that has the changes to produce an output pulse on A3 (the analog in lines can be used as digital outputs - there are very few pins left on the Uno) for a duration (which you can change) that defaults to 10 milliseconds. There is no pulse on the non-movement commands or on the continuous run command.
I would like you to test it to make sure it is what you needed before releasing it. Please PM me with your email so we can communicate for beta testing, ok?
"72.6 per cent of all statistics are made up on the spot." - Steven Wright
This seems like an interesting project. I created an Arduino based setup using almost the exact same pieces for a rotary table. The DM site is confusing to me, so I just wanted to compare the code.
Rebuilding my Bridgeport Boss3...
Hi, I finally uploaded my smooth stepping code in serial port command-line sketch called RDL,
RDL - Serial-Port Stepper Command-Line Utility with Smooth Stepping
Hello Mr Liming,
May I please request your assistance?
I'm attempting to use your Step indexer 2.3 code to control my indexing head. I've had to change the board values at the end of the code to suit my version of keypad shield. I have not as yet been able to get movement from the stepper motor using the original code, or my modification of your code.
I'm using:
Arduino UNO
Nema23 stepper motor 4.2V DC, 2 Amp
TB6560 Stepper motor controller
Duinotech LCD keypad shield
12V 1.25 Amp transformer with Japanese Jack
I have successfully tested the stepper motor with the Arduino library stepper example: stepper_oneRevolution.ino, powered with my transformer.
Running the Stepper23 program, with power on, the stepper motor is energised and locked. The program works fine on the keypad shield, but the stepper motor won't turn.
The stepper motor is connected to the TB6560 correctly with the VIN (supplying 11.25 V) wired to the +24V input. And grounded.
EN+, CW+, CLK+, are connected to 5V output (measuring 4.9V)
CLK- connected to DO pin 2
CW- connected to DO pin 3
EN- connected to DO pin 11
I'm assuming I'm not getting a signal from the keypad shield to the stepper controller. Could be my wiring, could be a compatibility issue with the keypad shield, or could be something else, but I don't know.
Can you please give me your opinion? This is my first time experimenting with Arduino and I would really appreciate your advice.
I won't be able to reply for 4 days if you need anymore information.
Thank you for your time.
Kind regards,
Michael Macgregor (New Zealand)
I responded to Michael on the Digital Machinist forum.
However, as Michael (and others) have pointed out, sometimes the keys on the inexpensive 1602 LCD shield does not work as well as we would like.
This is often due to the fact that there are many manufacturers of those shields now, and they use resistors that are often 10% (or worse) tolerance. This means that for your particular board, the values returned by the Uno's A/D converter vary from board to board.
To mitigate this, I've written a simple program called Showkeys that loads into the Uno and displays the values of each pressed key. To get this program, go here, and about halfway down the page is a link that will download it for you. Instructions are in the zip file. Once you've run this program, just reload the Step Index program into the Uno.
"72.6 per cent of all statistics are made up on the spot." - Steven Wright