Fejemis Teensy
(→Module structure) |
(→Unittructure) |
||
Line 58: | Line 58: | ||
} | } | ||
− | === | + | === Unit structure === |
[[File:teensy-firmware-unit.png]] | [[File:teensy-firmware-unit.png]] | ||
− | Figure: Each unit is coded in a separate file and has about the same structure. The unit is a class that holds the data from or to the device. The device is configured when the setup is called. The data from the device, or calculated from the data, is made available for subscription using a | + | Figure: Each unit is coded in a separate file and has about the same structure. The unit is a class that holds the data from or to the device. The device is configured when the setup is called. The data from the device, or calculated from the data, is made available for subscription using a subscription class called USubss. The device is accessed using a standard Arduino-type library, for e.g. a I2C or an A/D interface. The unit may have configuration that need to be saved, e.g. calibration data or device mode that can be set from the interface, but needs to be saved. |
==== Subscription ==== | ==== Subscription ==== |
Revision as of 07:09, 30 July 2022
Back to fejemis
Contents |
Drive Teensy
Block diagram with all interfaces and interface protocol
Front Teensy
Block diagram with all interfaces and interface protocol
GUI
Using USB
Using the bridge
Software structure
Figure: The Teensy software is structured with a main loop and a number of units. After reset all units are initialized in a setup function, after that the main loop is entered. The main loop services the USB and send commands to the units for decoding. At regular intervals, the sample clock tick, all units are called to execute any sample time function. Most units are interfaces to external devices such as IMU, motor drive or distance sensor. There is further support units for e.g. control.
Setup - loop overview
The setup and loop structure follows the Arduino sketch format. The file is a C++ file as the compilation is using a Makefile rather then the Arduino IDE.
The main file (main.cpp) code has this structure (shortened for clarity)
void setup() // INITIALIZATION { usb.setup(); led.setup(); imu.setup(); enc.setup(); sensor.setup(); motor.setup(); state.setup(); } void loop(void) { usb.send("# Starting main loop\n"); while ( true ) { // main loop usb.tick(); // incoming command service if ( startNewCycle ) // start of new control cycle { // mostly every 1ms imu.tick(); // for heading estimate sensor.tick(); // AD converter, e.g. battery maintenance irdist.tick(); // distance sensor enc.tick(); // wheel encoder and odometry state.tick(); // e.g. emergency stop control.tick(); // feedback control motor.tick(); // motor control } } }
Unit structure
Figure: Each unit is coded in a separate file and has about the same structure. The unit is a class that holds the data from or to the device. The device is configured when the setup is called. The data from the device, or calculated from the data, is made available for subscription using a subscription class called USubss. The device is accessed using a standard Arduino-type library, for e.g. a I2C or an A/D interface. The unit may have configuration that need to be saved, e.g. calibration data or device mode that can be set from the interface, but needs to be saved.
Subscription
Standardized setup of data subscription
Command decode
On-line help.
Configuration save
Use of configuration flash.
Update tick
Sample rate and sensor calculation