Finite State Machine
The program will be controlled through the use of a Finite State Machine to ensure that inputs can only be serviced at the appropriate periods. The states defined are defined as follows:
State | Description |
---|---|
Off | The vehicle is not receiving power |
Idle | The car is on, but no pedals are pressed |
Driving | The gas pedal is pressed car is in motion. |
Brake | The brakes are engaged and the car is not moving |
Each input can only be serviced during certain states. Certain inputs can also cause transitions when serviced during certain states.
Input Device | Off | Idle | Driving | Braking | Notes |
---|---|---|---|---|---|
Horn | |||||
Power Switch | Transitions between the "off" state to the "idle" state | ||||
Emergency Switch | Driver needs to be able to always access this | ||||
Push-to-talk | |||||
Direction Selector | Need to be holding the brakes to change gears | ||||
Headlights | |||||
Turn Signals | Direction indicator lights must flash at a rate of 90±30 flashes per minute (between 1 and 2 Hz) | ||||
Hazard Lights | |||||
Cruise Control ON/OFF | Needs to turn off automatically once the program transitions to "idle" | ||||
Cruise Control Inc/Dec | |||||
Regen Strength | |||||
Gas Pedal | Triggers a transition from the "idle" state to the "driving" state when pressed, and a transition from "driving" to "idle" when released | ||||
Brake Pedal | If anti-lock brakes are used, the front wheels must be stopped before the back wheels |
ADC Driver
On the STM32 is a 12-bit analog-to-digital converter (ADC). The role of an ADC is to take an analog signal as an input and give as output a digital number proportional to the magnitude of the input signal. The following formula can be used to determine the ADC reading:
The ADC has 19 multiplexed channels, with 16 of them being mapped to analog input pins. The 16 external pin mappings for the STM32 are as follows:
ADC Channel | Pin Name |
---|---|
ADC_IN0 | PA0 |
ADC_IN1 | PA1 |
ADC_IN2 | PA2 |
ADC_IN3 | PA3 |
ADC_IN4 | PA4 |
ADC_IN5 | PA5 |
ADC_IN6 | PA6 |
ADC_IN7 | PA7 |
ADC_IN8 | PB0 |
ADC_IN9 | PB1 |
ADC_IN10 | PC0 |
ADC_IN11 | PC1 |
ADC_IN12 | PC2 |
ADC_IN13 | PC3 |
ADC_IN14 | PC4 |
ADC_IN15 | PC5 |
In addition, the ADC has two different modes for converting analog signals:
Single Conversion Mode: The ADC performs the conversion for a channel and stops after the conversion for that channel has been completed
Continuous Conversion Mode: The ADC will convert a channel indefinitely at regular intervals