Under Construction

Laser Marking

Improvements to the laser marking project as it was in EE488 will focus on marking a two dimensional image on various materials. At the end of EE488 marking and control of the laser's marking intensity had been sucessful. Marking a rastered image was attempted, but the image drifted significantly with every pass. The table reversed properly at the right position and since the addressing was based on the same set of counters and timing outputs the image drift was most likely due to extra 'garbage' tacked onto the image while it was transfered. The image was first created on a Mac, then transfered to the Unix machines, then to a PC where it was downloaded onto an EPROM programmer. The transfer from the PC to the EPROM programmer was one very likely spot for the addition of 'garbage' to the image. The image seemed as though it may have 'grown' at this point, possibly from interpreting transfer protocol as more data.

Advancing the stepper motor for the second dimension also proved problematic the sample of 2-D etching that was done had to be advanced each time the first dimension motor reversed by pressing a switch to start the timer and advance it about one revolution. A many (8 or more) input AND gate would provide timing pulse at the right time and short enough to prevent retriggering it once the single turn was over, but I would like to find a less 'brute force', more 'graceful' method of accomplishing this.

When the table is connected to power it immeadiately starts, assuming its at the correct starting point. To set it to the correct starting point takes a fair amount of messing with the circuit. Either providing a 'reset' switch or command, or adding positioning controls will make it easier to operate. A microswitch mounted at the appropriate position on each slider would accomplish automatic reseting well.

The driving transistors for the second stepper motor spend most of their time holding the motor in one position. While the current used by the stepper motors when they are turning is about 0.25 amps total, the holding currect is about one amp for each leg turned on. The current controller leaves two coils turend on at all times so when the motor is waiting for a pass to be completed for its next advance the transisitors are the largest current draw in the circuit (not including the laser) and the transistors run very hot. by programming a PLD to handle the stepper motor control rather than the discrete 4000 series logic currently used the controller could be reduced to one chip and since no holding force is needed for the table turn of all the coils when not turning.


New Stepper Motor Controller

The new stepper motor controller is designed to turn all the coils off after a step if no new step has been triggered. The controller uses an eight state, state machine to decide what coils should be triggered. The first four states are for each of the four step positions. The second four states are keep track of what position (which of the four steps) the motor is currently at, but turn of the drive to all the coils. When a step signal arrives the state machine jumps to the next 'on' state as indicated by the current position and direction. A zero to seven counter is used to determine when to switch to the 'off' states. If the counter reaches seven with no new step signal having occured it changes to the corresponing off state.

Below is the pinout and abel file of the new controller


ABEL 4.30  -  Device Utilization Chart         Fri Apr 19 12:28:16 1996

Four phase stepper motor controller Type 3 ==== P22V10 Chip Diagram ==== P22V10 +---------\ /---------+ | \ / | | ----- | CLOCK | 1 24 | Vcc | | STEP | 2 23 | NEW_STEP | | DIR | 3 22 | CB | | | 4 21 | CA | | | 5 20 | PHASE_4 | | | 6 19 | PHASE_3 | | | 7 18 | PHASE_2 | | | 8 17 | PHASE_1 | | | 9 16 | QC | | | 10 15 | QB | | | 11 14 | QA | | GND | 12 13 | | | | | `---------------------------' SIGNATURE: N/A
A picture of the state diagram will be available here... eventually

module Stepper_Controller
title 'Four phase stepper motor controller Type 3'
STEPCTRL device 'p22v10';

"Input pins
CLOCK           pin 1;
STEP            pin 2;
DIR             pin 3;

"Output pins
QA,QB,QC        pin 14,15,16 istype 'reg, buffer';
PHASE_1         pin 17;
PHASE_2         pin 18;
PHASE_3         pin 19;
PHASE_4         pin 20;
CA,CB,NEW_STEP        pin 21,22,23 istype 'reg, buffer';

"Set definitions
QSTATE = [QC,QB,QA];
STEP_0  = [0,0,0];
STEP_1  = [0,0,1];
STEP_2  = [0,1,0];
STEP_3  = [0,1,1];
WAIT_0  = [1,0,0];
WAIT_1  = [1,0,1];
WAIT_2  = [1,1,0];
WAIT_3  = [1,1,1];

COUNT = [CB,CA];
COUNT_0 = [0,0];
COUNT_1 = [0,1];
COUNT_2 = [1,0];
COUNT_3 = [1,1];

PHASE = [PHASE_4,PHASE_3,PHASE_2,PHASE_1];

state_diagram QSTATE
state STEP_0:   IF STEP & NEW_STEP & DIR THEN STEP_1
                ELSE IF STEP & NEW_STEP & !DIR THEN STEP_3
                ELSE IF (COUNT == COUNT_3) THEN WAIT_0
                ELSE STEP_0;

state STEP_1:   IF STEP & NEW_STEP & DIR THEN STEP_2
                ELSE IF STEP & NEW_STEP & !DIR THEN STEP_0
                ELSE IF (COUNT == COUNT_3) THEN WAIT_1
                ELSE STEP_1;

state STEP_2:   IF STEP & NEW_STEP & DIR THEN STEP_3
                ELSE IF STEP & NEW_STEP & !DIR THEN STEP_1
                ELSE IF (COUNT == COUNT_3) THEN WAIT_2
                ELSE STEP_2;

state STEP_3:   IF STEP & NEW_STEP & DIR THEN STEP_0
                ELSE IF STEP & NEW_STEP & !DIR THEN STEP_2^M
                ELSE IF (COUNT == COUNT_3) THEN WAIT_3^M
                ELSE STEP_3;^M

state WAIT_0:   IF STEP & DIR THEN STEP_1
                ELSE IF STEP & !DIR THEN STEP_3
                ELSE WAIT_0;

state WAIT_1:   IF STEP & DIR THEN STEP_2
                ELSE IF STEP & !DIR THEN STEP_0
                ELSE WAIT_1;

state WAIT_2:   IF STEP & DIR THEN STEP_3
                ELSE IF STEP & !DIR THEN STEP_1
                ELSE WAIT_2;

state WAIT_3:   IF STEP & DIR THEN STEP_0
                ELSE IF STEP & !DIR THEN STEP_2
                ELSE WAIT_3;



state_diagram COUNT
state COUNT_0:  IF STEP THEN COUNT_0
                ELSE COUNT_1;
state COUNT_1:  IF STEP THEN COUNT_0
                ELSE COUNT_2;
state COUNT_2:  IF STEP THEN COUNT_0
                ELSE COUNT_3;
state COUNT_3:  IF STEP THEN COUNT_0
                ELSE COUNT_3;


equations
NEW_STEP := !STEP;
A
PHASE = [0,1,0,1] & (QSTATE == STEP_0) # [0,1,1,0] & (QSTATE == STEP_1) # [1,0,1
,0] & (QSTATE == STEP_2) # [1,0,0,1] & (QSTATE == STEP_3);

[QA,QB,QC,CA,CB,NEW_STEP].clk = CLOCK;
end Stepper_Controller

Test results of the new stepper motor controller

The new stepper motor controller has reduced average operating current by about 80% and eliminated heating of the coil diver transistors. When one motor was not being stepped two coils were always left on. This resulted in about two amps current being drawn and about 10 watts being dissapated between the two coils and transistors. Power loss in the transistor was high enough to make it too hot to touch very quickly. With the new stepper motor controller the temperature of the transistor does not rise detectably above the ambient temperature.


Vector control

To reduce etching time and improve apparent image quality new controls allowing the motion table to be vectored rather than just rastered are being developed. To achieve this the data will be stored in the EPROM as an instruction followed by the data appropriate to the instruction. For a standard vector move this will consist of the instruction, the intensity, the direction (quadrant), and the rise and run. This method is less efficient for use of memory per mark, but for simple images will use less memory and time. Unlike raster imaging where a 'raw' graphic file from photoshop could be used a special program to translate an image to instructions is necessary. This program is currently be written in C and should allow generation of basic line art images. To maintain the ability to mark rastered images a 'start raster line' and 'stop raster line' instruction has been designed to allow efficient handling of rastered images. A simple program to tack the appropriate instructions on to the 'raw' graphic file to handle this is also being developed.

A state machine has been designed to handle instruction processing and overall timing. the state machine has sixteen states and allows instructions over a range of lengths. The simplest instruction is the RESET instruction which sets the table back to a starting position indicated by a set of microswitches. The standard vectoring instruction reads the next two bytes and stores them in the appropriate registers. The 'start raster line' instruction keeps reading the next intensity byte and moving until the 'end of line' command is found.

A picture of the state diagram will be available here... eventually

Vector Controler operation

The new vector controller state machine is operational. From the original design it has been reduced to three commands -- without loss of functionality. It resets the table to a preset position defined with micro switches. It loads new values to the intensity and direction register followed by the "angle" register. The third command instructs it to repeatedly load the intensity (and direction) register until the value 16 is encountered at which point it returns to "command" mode.So far testing indicates that it works properly. The next step is to develop an "assembler" to create programs for it.


New CO2 laser

The new CO2 laser has arrived from Synrad. First impressions indicate that this one will require some research into what all the new connectors and settings do. The new controller, the UC-1000 Laser Controller, has a mode selector knob on the face panel for numerous new ways to control the laser. Standby (STBY) applies a tickle pulse to the laser keeping it ionized but, laser emission is not occuring. Two closed loop modes, high and low gain, allow a portion of the beam to be split off and the reading from a thermo-pile detector (48-CL) to regulate the laser's output power. Two remote control modes, as opposed to simple TTL input on the laser used previously, are available. One mode (ANC) allows remote current control, by varying the current between 4 and 20mA the laser output is varied from zero to maximum. The second remote mode (ANV) varies the power as the input voltage varies from 0 to 10V. Manual mode is still available with duty ratio set by the other knob on the face panel -- this is the method used to control the laser used previously. Gating the laser can be accomplished by applying a signal to the gate connector (a BNC type connector-the small miniature phono jack next to it may be an alternative) the laser's on power setting is set by signal for the current mode setting.

Roy Ward
Email -- contact@roybward.net
Web -- http://roybward.net/~royward/index.shtml (HTML originated 1993)
Last Modified: Friday, 15-Nov-2013 09:07:22 PST