Field Controller - description
(Please do not quote these posts as they contain embedded images, thanks)
The following post contains technical details about how the VEX field control system works and specifically the VEXnet Field controller kit. I’m posting this as an aid to teams and event organizers who may not have experience debugging field control problems and to try and dispel certain “myths” that surround its use.
So you walk up to the field with your robot, you plug the RJ45 cable into the competition port on the joystick and hope everything works when the match starts. Lets look at the overall system that you, your alliance partner and the opposing teams have just created.
The four robots (teams) are shown as the two red and two blue blocks above, each of you have plugged into a “Driver Interface” which is also sometimes called the “alliance splitter”. This small black box looks like this.
It has connections for you and your alliance partner, four further connections for the old (now mostly unused) 75MHz controllers and single connection to the “Match controller”.
There are also three led indicators.
Disable - This slowly flashes orange when the field is disabled.
Driver - This will be solid green when in the driver controlled part of a match.
Auto - This will quickly flash green when in the autonomous part of a match.
There are two driver interfaces, one for the red alliance and one for the blue. Each driver interface is connected to the “Match Controller”, another small black box that looks like this.
The Match controller has two bi-color leds, one for each driver interface connection.
If the led is green then the driver interface is correctly connected, if the led is red then it is not.
The match controller has a USB connection to a PC that is running the tournament manager software. Tournament manager is controlling all aspects of the match, the Match controller and driver interface have no intelligence but we will get into that a little later. First lets look at the hardware in detail.
The heart of the match controller is a Silicon Labs CP2103 USB-UART bridge. This device would normally be used in a USB serial adapter, something like the old orange programming kit (although that used a different device from prolific), however, in this application it’s really being used as a sort of USB to digital IO device. The CP2103 has six output signals that are under control of the tournament manager software, two of these are traditional serial handshake lines called DTR (data terminal ready) and RTS (ready to send). The other four are specific to the CP2103 and are called GPIO signals (which stands for general purpose input/output). The six control signals are sent through a 74ACT04 hex inverter which acts to both invert and also buffer the signals. They are then split into two groups of three, each group going to one of the two driver interfaces. Here is a conceptual schematic showing this.
The three signals going to the driver interface are as follows.
Enable/disable - When this signal is low the robot is disabled, when high it is enabled.
Driver/Auton - When this signal is low the robot should run the autonomous code, when high it should run driver control code.
LED Power - This signal is used to power the leds in the driver interface, when high the leds can illuminate, when low all leds will be off.
The match controller uses a bi-color led to display the “connected” status of each driver interface. This is achieved by using a simple mechanism where the driver interface shorts pin 8 of the cable to ground, when detected by the match controller this changes the color of the led. This signal is also made available on the CP2103 on the CTS (clear to send) input for driver interface 1 and DSR (data set ready) for driver interface 2. In theory these two signals can be read by the tournament manager software but I don’t think it’s currently used.
The power for the match controller is taken from the USB 5 volt input, this is converted to 3.3V inside the CP2103 device but also used to power some other components directly.
The driver interface is far simpler than the match controller. It accepts the three control signals generated in the match controller, the two match control signals (enable/disable, driver/auton) are directly fed to the VEXnet connectors, there is no additional buffering. Logic is used to also monitor these signals and control which led illuminates. Here is a schematic of the driver interface.
The driver interface has one additional function, when you are connected to it, certain wires in the cable are shorted to ground (0 volts). One of these lines tells the joystick that you are in “competition” mode, that is, the joystick should check the two match control signals discussed above. These signals are important, if the cable to your joystick does not make a good connection then you may not be in “competition” and “match” modes, see post #3 for details on how to check the leds on your joystick to verify you connection is good.
A bad cable or a dirty connector on your joystick can make any of the control signals become intermittent, it’s important to respect these parts, treat them gently, don’t step on the end of the cable or place anything except the correct cable in the competition port.
Part 2 will cover software control (5 image limit, I need more)