48 Channel Motor Control

Task:

Design a generic platform that can support up to 48 actuators (motors, solenoids) and 60 sensor inputs of varying formats (ADC/I2C/SPI/rotary encoder/light barrier/contact /UART)

Challenge:

Since the device that was going to be controlled by this control platform was going to operate many actuators simultaneously and had to respond in real time to sensor inputs, many of the functions had to be executed autonomously and with minimal support from the host PC

Solution:

A central FPGA was used to implement semi-autonomous function blocks. For example a motor driver block contained registers for ramp up/down slope, target speed, target step count and step mode. It also had trigger inputs that could start a sequence, trigger an e-stop or switch modes. Trigger outputs reported internal states such as ramp up completed, target step count reached or stopped. The triggers of all the systems devices were put on a trigger bus and each device could be software configured to listen to any of the other devices trigger events.

Such an arrangement allows the configuration of process sequences without the intervention of the host system: Motor A is triggered by a system timer, the output of the “start of ramp down” event is the start trigger of motor B which ramps up as the object on motor A reaches its destination. When Sensor A exceeds a preset threshold it stops motor B and starts motor C which is a pump and timer A. When timer A reaches its limit it stops the pump. This whole sequence can be one way of moving a pipette arm to its destination, lower the pipette, pull in some liquid and then wait for further instructions.

Technologies used:

Xilinx Spartan 6 FPGA, Microblaze soft core, VHDL custom coding