![]() | |
| Home Page | Mark Forums Read | Today's Posts | My Replies | Classifieds | Reviews | Photo Gallery | Web Links | Share Files | Advertise With Us | Ad List |
| |||||||
| G-Code Programing Discuss G-code programing and problems here! |
| This forum is sponsored by: |
![]() |
| | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
| |||
| |||
I am looking at building a 2 axis system for a specific application, where I will drive the motor drivers with a processor that receives coordinates that come from a custom PC app that supplies X and Y. The main app will send positions to the processor, which will output step and dir to the driver IC. The processor needs to determine the rates at which each axis moves depending on distance, where overall speed is set in the main application as FeedRate. Here is my thinking out loud on the problem: Arrive at X,Y at the same time, max speed set by GUI Move Y at speed Ydist ( Ydist = pulses per inch to arrive at Y new position) Move X at speed Xdist ( Xdist = pulses per inch to arrive at X new position) 200 pulses per revolution full step as reference 28 tpi threaded rod = 5600 pulses per inch Example move: Distance Y=1" X=2" So that X distance = 2" (11200 pulses), Y distance 1" (5600 pulses) FeedRate is Set at GUI, ex = 1 IPS - 5600 pulses a sec which equates to a relative pause between pulses setting the pulses per sec. To arrive at the same point at the same time, example code in the processor below: GetPosition 'receive X, and Y new position Xdist = 11200 'pulses Ydist = 5600 'pulses If Xdist > Ydist then X speed = Xdist/Ydist 'Xdist = 11200 X speed = 11200 / 5600 '= 2 X speed = (5600 / 2) pulses per sec 'Ydist = Feedrate Y speed = FeedRate 'output Y pulses at 5600 pulses per sec RunXMotor(Xdist, Xspeed) RunYMotor(Ydist, Yspeed) I know this is not right yet, but I am hoping someone can give some pointers on if this is in a workable direction. What I am thinking is to let the longer distance be the Max Speed at FeedRate, let the shorter distance be a ration of speed based on the distances. Thanks for any tips. |
|
#2
| ||||
| ||||
| Unless you're moving very slowly, you'll need to accelerate and decelerate.
__________________ Gerry Mach3 2010 Screenset http://home.comcast.net/~cncwoodworker/2010.html (Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management) |
|
#3
| ||||
| ||||
| I think you'll need to consider that the commanded feedrate is the vector feedrate along the line joining the two points. On a two axis move, this vector represents the hypotenuse of a triangle composed of the X component and the Y components which parallel each machine axis. So then resolve the component vectors by whatever mathematical function computes them in the fastest way. You could use the Pythagorean forumula or sine or cosine functions to determine the component feedrates.
__________________ First you get good, then you get fast. Then grouchiness sets in. (Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management) |
|
#4
| |||
| |||
| The question that comes to mind is how to keep things in sync, maybe move X steps during the accel/decel phase. Or, maybe move X percent of total travel per each axis during accel/decel. I think this is trial and error, since it is not clear as to how to accel both axis' and keep the moves proportional. Thanks for the input guys, it seems like a real task to do this from scratch. |
|
#5
| |||
| |||
| Wait til you start the routine to maintain constant velocity while moving in a circle ![]() It sounds like your vector function will need a rounding method as well as an "aliasing" routine. It's relatively easy to determine how many pulses to send to each axis when the vector is a simple integer ratio i.e. 1 to 2. But how do you handle a ratio of 1 pulse to 2.5 pulses? In this case it wouldn't be that hard. Over two "steps" you would have a ratio of 2 pulses to 5. So your first step you would send 1 pulse to 3, then 1 pulse to 2, then keep alternating that pattern until you reach the end of the move. Then when you hit the end you must determine your error, if any. Maybe you already know all this, maybe that sort of accuracy isn't important, but it sounds like a fun project! |
| Sponsored Links |
|
#6
| ||||
| ||||
| If you don't wat to spend your life at designing and proving out a workable system, look at getting a Galil motion control card, galilmc.com. The cards come up on eBay for reasonable prices. There's very nice VB and other software interfaces to use this card with your app. Karl |
|
#7
| |||
| |||
| Why reinvent the wheel?? You can get the source code for EMC2 for the cost of the download, and TurboCNC for just $60. If all you do is read thru the code to see how it has been done and then right your own version it will save countless hours. http://www.linuxcnc.org/ http://www.dakeng.com/turbo.html |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | Search this Thread |
| Display Modes | |
| |
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Help with gcode | sunlight | Mach Mill | 5 | 11-12-2007 06:49 PM |
| DXF to Gcode | Clik! | G-Code Programing | 6 | 09-14-2006 04:08 PM |
| I have a problem with my gcode or my conversion to gcode , everything is tiny? | NickLatech | G-Code Programing | 0 | 03-10-2005 12:46 PM |
| GCode | rogerbureau | Carken Products (Deskam, DeskCNC etc) | 1 | 02-07-2005 07:36 AM |
| gcode to gcode converter | july_favre | General CAM Discussion | 4 | 05-24-2004 06:51 PM |