CEB Press/Research Development/Controller Design

Operating Cycle


The values on this cycle chart are for illustration and do not represent actual performance

(Plot generated from this Octave plotting script.)

The left of the cycle chart starts with a completed block having just been raised from the chamber, and the drawer already filled with fresh dirt. Subsequently, in sequence,
 * 1) The secondary cylinder extends to eject the block. The soil starts to fill in the drawer.
 * 2) The main cylinder retracts downward, receiving dirt from the drawer
 * 3) The shaker motor operates
 * 4) The secondary cylinder retracts to mid-position, closing the chamber
 * 5) The main cylinder rises to compress the block.
 * 6) The main cylinder retracts slightly
 * 7) The secondary cylinder retracts fully, allowing clearance for the block to be ejected
 * 8) The main cylinder raises the completed block

The progress of the cycle is controlled on the basis of The chosen approach for feedback is described under Sensors below.
 * position feedback from the main cylinder travel
 * position feedback from the secondary cylinder/drawer travel
 * preset time delays

Start-up (Initialization)
TBD

Sequence Logic
The sequence logic is implemented by a C++ program compiled in the Arduino development environment and uploaded to the controller board.

Upon power-up or reset, the first action executed by the Arduino board is to wait for a short time, inspecting to see whether it is communicating with a host computer over its USB serial port. (This capability is not used during normal operations.) After that time expires, it executes an initialization routine, then enters the operational loop.

Initialization routine
TBD Includes measuring main cylinder operating speed to establish compression/release timings used in the operational loop below.

Operational Loop
Starting from the left of the cycle diagram above,
 * 1) Begin extending secondary cylinder
 * 2) After drawer reaches midpoint, begin retracting main cylinder &bull; midpoint is detected by secondary cylinder sensor going inactive
 * 3) When main cylinder is fully retracted and secondary cylinder is fully extended, start shaker motor &bull; main cylinder retraction is detected by sensor going active (midpoint, zone 2), inactive, then active (zone 1) again
 * 4) After 2 seconds of shaker operation, begin retracting secondary cylinder to mid position
 * 5) When drawer reaches mid position start main cylinder compression stroke &bull; compression stroke time is pre-computed once during initialization routine
 * 6) After a pre-computed compression time, begin retracting the main cylinder
 * 7) After a pre-computed release time, stop the main cylinder and fully retract the secondary cylinder &bull; release time is pre-computed once during initialization routine
 * 8) When secondary cylinder is fully retracted, start raising the main cylinder &bull; secondary full retraction detected by sensor going active
 * 9) When main cylinder is fully raised, repeat cycle. &bull; main cylinder fully raised is detected by sensor going active, then inactive, then active again.

Sensors
Although an early prototype controlled machine movements on the basis of timing alone ("open loop" control), this method is not robust against variations in power source flow, fluid viscosity, soil load, and so on. It is essential to use feedback of the machine position in order to get reliable operation.

There are three important positions in the main cylinder stroke
 * The bottom position, where soil is received for compression
 * The middle position, where soil is compressed
 * The top position, where the completed brick is ejected

There are three important positions in the secondary cylinder stroke
 * The retracted position, where the finished brick is raised for ejection
 * The middle position, where the brick is compressed by the main cylinder
 * The extended position, where
 * the finished brick is ejected to the output tray, and
 * soil is loaded from the hopper into the drawer

There are many approaches to feedback, including a continuous position encoder, a fluid pressure sensor indicating "bottoming out" pressure, etc. The method chosen is simple, robust, and can be adjusted mechanically (rather than requiring a software interface) to implement the design's sequence logic. An additional feature of this approach is that the cylinders are controlled by feedback so they do not reach their mechanical travel limits (i.e. "bottom out") during normal operation; this minimizes hydraulic power consumption and eliminates unnecessary mechanical stresses on the machine and power cube.

In this approach, there is only one sensor for each cylinder, and it is activated three times over the stroke. This is shown as "sensor zone 1", sensor zone 2", and "sensor zone 3" in the cycle illustration above. There is therefore an ambiguity in the sensor output itself: it is impossible to tell which zone is occupied when the sensor signal activates. However, within the operational cycle of the machine, the ambiguity is resolved. For example, when lowering the main cylinder after brick ejection, it is clear that the sensor will first be active in zone3, then inactive, then active in zone 2, then inactive, and finally complete the stroke at zone 1.

The hardware implementation of the sensor is with a stationary Hall-effect device and three magnets on the moving part. The sensor electrical output varies from (TBD) to (TBD) volts as the magnet passes by, and whenever the signal is greater than a threshold of (TBD) volts it is considered "active". Typically each sensor zone is approximately 1 inch (TBD?) wide. Overall, this should be a maintenance-free device: it is a non-contact technique that has no wearing parts and the electrical components are completely encapsulated.

Construction of the Hall-effect sensors is shown at Sensor Unit manufacturing instructions

Alternative sensor implementations are possible, and will be compatible with the controller if they provide a signal which is greater than threshold in each of the sensing zones and less than threshold in between.

Actuators
There are three hydraulic circuits, as described at Hydraulic Design, with five solenoid coils:
 * 1) Main cylinder raise (extend) - valve 1 "A" coil
 * 2) Main cylinder lower (retract) - valve 1 "B" coil
 * 3) Secondary cylinder left (extend) - valve 2 "B" coil
 * 4) Secondary cylinder right (retract) - valve 2 "A" coil
 * 5) Shaker motor - valve 3 "A" coil

These are 12V DC solenoid coils, controlled by MOSFET drivers on the CEB interface board.

Operator Controls
The controller does not require any externally accessible operator controls for normal operation.

The interface board includes a reset switch, which is useful during setup and diagnostics.

Operator Indicators
The controller does not require any external operator indicators during normal operation.

The interface board provides 7 LEDs which are useful during setup and diagnostics:
 * 5 output monitor LEDs, one associated with each solenoid driver channel
 * 2 status LEDs, (TBD)

Control Processor
The controller is implemented using an embedded microcontroller executing a small program which executes the sequence logic.

The selected microcontroller is an Atmel AVR type on the Arduino Duemilanove circuit board.

The CEB interface board plugs directly to the Arduino controller through 0.1-inch pin headers.