Actions

Difference between revisions of "SX firmware to control 3 stepper motors"

From Just in Time

m (18 revisions: copying content from old site)
 
(6 intermediate revisions by 2 users not shown)
Line 5: Line 5:
 
* serial port VP has been integrated
 
* serial port VP has been integrated
 
* keyboard and switch driver has been implemented
 
* keyboard and switch driver has been implemented
* "emergency stop" and end-keys are not implemented yet
+
* "emergency stop" and end-keys have been implemented in a way. Currently movement just stops if one of these keys is pressed.
  
 
You can view the source [[3d stepper source|here]].
 
You can view the source [[3d stepper source|here]].
Line 18: Line 18:
 
The firmware communicates through the serial port and assumes a 9600bps 8N1 connection (this is configurable, but must be tuned with the clock frequencies, because some some bitrates are not possible with some clock speeds).
 
The firmware communicates through the serial port and assumes a 9600bps 8N1 connection (this is configurable, but must be tuned with the clock frequencies, because some some bitrates are not possible with some clock speeds).
  
At boot, the SX will send a welcome message and a prompt. The other end of the communciations line (the driver) is supposed to send ascii commands over the serial line, separated by newlines. The ultimate command is the 'move' command:
+
At boot, the SX will send a welcome message and a prompt. The other end of the communciations line (the driver) is supposed to send ascii commands over the serial line, separated by newlines (ascii code 13). The SX will only accept commands when it has sent a prompt charachter ('>'). The driver should therefore always wait for a prompt before sending a command. Internally, there is one command buffer, so that the SX can execute one command and receive the next command at the same time.
 +
 
 +
The ultimate (and currently the only-) command is the 'move' command:
  
 
  m shhhh,shhhh,shhhh
 
  m shhhh,shhhh,shhhh
  
'm' denotes the 'move' command and directs the controller to move a number of half-steps on each axis. 's' stands for an optional sign character, 'h' means an optional hex digit. Instead of comma's, any non-hex character can be used. There is no need for whitespace after the command, or in fact at any location at all.Examples of move commands are:
+
'm' denotes the 'move' command and directs the controller to perform a number of half-steps on each axis. 's' stands for an optional sign character, 'h' means an optional hex digit. Instead of comma's, any non-hex character can be used. There is no need for whitespace after the command, or in fact at any location at all. Examples of valid move commands are:
  
 
  m0,ff,c0
 
  m0,ff,c0
Line 30: Line 32:
  
  
Movement is relative to the current position. In fact, the controller does not maintain an absolute position at all, except in a very limited way to keep the 'state' of the stepper motors.
+
Movement is specified in half-steps, relative to the current position.

Latest revision as of 22:07, 12 July 2010

Status so far:

  • 3D Bresenham line drawing algorithm has been programmed on-chip.
  • text parser has been implemented
  • serial port VP has been integrated
  • keyboard and switch driver has been implemented
  • "emergency stop" and end-keys have been implemented in a way. Currently movement just stops if one of these keys is pressed.

You can view the source here.


So What Does It Do

The firmware assumes the following:

  • Three stepper motors connected to rc (x and y) and rb.4-7 (z)
  • Some serial communications device attached to ra.3 (SX sending) and rb.0 (SX receiving). The software is configurable to work either through a MAX232 ic or by connecting the pins directly to some rs-232 device. In the latter case, out- and input actions become active-low.

The firmware communicates through the serial port and assumes a 9600bps 8N1 connection (this is configurable, but must be tuned with the clock frequencies, because some some bitrates are not possible with some clock speeds).

At boot, the SX will send a welcome message and a prompt. The other end of the communciations line (the driver) is supposed to send ascii commands over the serial line, separated by newlines (ascii code 13). The SX will only accept commands when it has sent a prompt charachter ('>'). The driver should therefore always wait for a prompt before sending a command. Internally, there is one command buffer, so that the SX can execute one command and receive the next command at the same time.

The ultimate (and currently the only-) command is the 'move' command:

m shhhh,shhhh,shhhh

'm' denotes the 'move' command and directs the controller to perform a number of half-steps on each axis. 's' stands for an optional sign character, 'h' means an optional hex digit. Instead of comma's, any non-hex character can be used. There is no need for whitespace after the command, or in fact at any location at all. Examples of valid move commands are:

m0,ff,c0
M1FX2fX3f
m   de,-10,-ff
mde-10-ff


Movement is specified in half-steps, relative to the current position.