The Low Level Controller is based on the ATmega2560 microcontroller. Its sole purpose is to act as the interface between the physical and the digital world.
The LLC / ATmega2560 acts as a SPI slave to the MLC / Raspberry Pi. See Mid Level Controller, SPI for details.
The ADC measures the battery voltage and the motor current. These are only used for monitoring, not control.
The yaw rate and acceleration vector are read from the IMU via I2C. The yaw rate is summed, to give an estimate of the yaw angle.
The odometer has 3 digital outputs. Each signal change (rising or falling) is handled by an interrupt. The signal change indicates a motor rotation of approx. 60 degrees. The rotation count and motor speed are derived from those signals.
The servo is controlled through a standard 50 Hz PWM signal, where the signal is encoded in the ON-time, from 1000 us to 2000 us.
The motor is controlled by a PWM H-bridge at 20 kHz.
The four LEDs are individually controlled through GPIO pins.
Should the communication with the MLC fail repeatedly, the LLC will enter a safe mode. The motor is commanded to brake. The safe mode is indicated by flashing all LEDs.