The World Leader in High Performance Signal Processing Solutions
Dr. Fred Martin
Assistant Professor, Computer Science
University of Massachusetts Lowell
Presentation Overview
• History/Motivations for Educational Robot Controllers
• The Blackfin Handy Board: Hardware Design
• The Blackfin Handy Board: Software Environments
• Classroom Support Materials
• Demonstration
The Original Handy Board
• Developed for MIT LEGO Robot
Competition, starting in 1991
• Goal: Give students everything they need to start building robots
• Uses 2 MHz Motorola HC11
• 32K bytes of RAM
• 4 motor outputs
• 7 analog, 9 digital sensor inputs
• Built-in battery pack & LCD screen
• “Interactive C” language
• Open-source design
• Over 10,000 in use
Helped shape a new product category:
Educational/classroom mobile robot controllers
Design Category: Robot Controllers & CPUs
• Many options, with various levels of integration
• Original Handy
Board, LEGO RCX, and XBC/Gameboy provide sensor/motor
I/O
• Blackfin HB has powerful processor and significant robotics support integrated into one design
Blackfin HB
CPU Power -->
8-bit MCU
Original HB
LEGO RCX
XBC/Gameboy
Pentium 4
PC/104
Blackfin HB
Design Goals for Blackfin Handy Board
• Highlight power and capabilities of the Blackfin DSP
• Vision
• Advanced software development
• Keep integrated, hand-held design of original HB
• Support wide range of sensor/motor I/O
The Blackfin Handy Board
Blackfin Handy Board: CPU and Memory
• 600 MHz ADI BF ’537
• 64 MB SDRAM
• 256 MB NAND flash
• 1 MB boot flash
Blackfin Handy Board: Robot Sub-System FPGA
• Xilinx Spartan 3E series FPGA
• “Board Support
Package” includes
• motor PWM, sensor sampling
• CMOS camera PPI pass-thru
• LCD driver
• end-user programmable
Blackfin Handy Board: Motor Output
DC motor output
• 4 channels bi-directional control
•
1A, 12v per motor
• locked antiphase & sign-magnitude PWM
• back-EMF velocity sensing
• motor status LEDs
Servo motor control
• 8 outputs
•
5A, +5v motor power supply
Blackfin Handy Board: Sensor Input
• three ADI 12-bit A/Ds with 8-1 mux, continuously sampling at 48 kHz
• 12 external analog inputs
• 10 digital inputs
• 8 digital outputs
• two i2c connectors
• integral 2-axis accelerometer
Blackfin Handy Board: PPI Camera Port
• Blackfin PPI port for CMOS cameras (e.g. Omnivision)
• FPGA pass-thru (or image processing)
Blackfin Handy Board: Integrated Power Sub-System
Battery/Charge
•
Built-in 12v (10 AA cell) 2000 mAh battery pack
• Smart-charge circuit (rapid, trickle, thermal cut-off)
• Charge and run simultaneously
•
Battery level sensor to Blackfin
Power Regulation
• 5A, +5v supply for servo motors & external devices
•
3.3v, 1.8v supplies for Blackfin & FPGA
• high-efficient switching regulators
Blackfin Handy Board: Communications
Debug Agent
• Built-in USB 1.1 emulator
•
JTAG connector for external emulator
RS232 Serial
10/100 BT Ethernet
Blackfin Handy Board: Human I/O
16x4 LCD screen
DAC w/amp & speaker
User knob
2 buttons & 4 LEDs
Blackfin Handy Board: Software Environments
• ADI Visual DSP++
• C/C++ IDDE
• High-performance C compiler
• VDK Kernel for threads
• LWIP TCP/IP stack
• gcc & uClinux
• Compile standalone apps with gcc
• Run uClinux kernel and compile apps that use kernel services
• uBoot monitor
• LabVIEW Embedded for ADI Blackfin
Academic Support Materials
• Freely available courseware based on use of LabVIEW
Embedded being developed; expected January 2007
• Robotic Explorations text (2001) will be updated based on new
Blackfin Handy Board design
Recap: Stuff You Can Plug Directly into the Blackfin HB
• Sensors:
• Resistive devices (photocell, switch, thermistor)
• Voltage sources (IR transistors, IR distance sensors, any 0-5v source)
• Ultrasonic ranging sensors
• Modulated sensors (e.g., 40 kHz IR)
• i2c devices
• Audio sources
• Motors
• 4 smallish DC motors (12v, 1A)
• 8 servo motors
• Big DC motors using ESCs in servo outputs (Electronic Speed
Controllers)
• Vision
• Omnivision camera modules
Demonstration
• Wall-following using infrared distance sensors
• Multithreaded control program with separate priorities for
side-mounted and front-mounted sensors
• Using VDSP++ and the VDK kernel
Wall-Following Robot VDK Code void sideSensorThread_RunFunction(void **inPtr)
{ int side_et = 0;
Void frontSensorThread_RunFunction(void **inPtr) { int FL_et = 0; // Front Left ET int FR_et = 0; // Front Right ET unsigned int loopCount = 0; priority = 3; priority = 2; while (1)
{ side_et = analog(ETSIDE); // Get distance on LEFT if (side_et > 400) // Too Close to wall
{ clear_led(1); clear_led(2); clear_led(3); set_led(1);
// Turn Away pivot_right(75, priority);
} else if (side_et < 350)
{ clear_led(1); clear_led(2); clear_led(3); set_led(3);
// Turn Toward pivot_left(75, priority);
} else // On Line
{ clear_led(1); clear_led(2); clear_led(3); set_led(2);
// Go Straight motor(2, 100, priority); motor(1, 100, priority);
}
}
} while (1) {
FL_et = analog(ETFL); FR_et = analog(ETFR);
// Detect Front Obstacle while ( (FL_et > 350) || (FR_et > 350) )
{ set_led(4);
// Left Obstacle if ( FL_et > FR_et + 50 ) {pivot_right(75, priority);}
// Right Obstacle else if ( FR_et > FL_et + 50 ) { pivot_left(75, priority); }
// Forward Obstacle else { motor(1, 0, priority); motor(2, 0, priority);
}
}
}
FL_et = analog(ETFL);
FR_et = analog(ETFR);
} clear_led(4);
More Information
• Schematic design, PCB art, FPGA code, and Blackfin software libraries to be distributed with open-source license
• Blackfin Handy Boards publicly available Q4 2006
• See http://www.cs.uml.edu/blackfin/ for latest and to sign up for mailing list
• See LabVIEW Embedded Vision Tracking demo here in the booth