Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

The purpose of lights control boards is to receive instructions from the driver controls board through a CAN message and take action accordingly. There are two lights boards on the car. One board is located at the front and one at the back. The boards will use the same software. Thus, software needs to determine which board it's being operated on. The responsibilities of each board is as follows: 

Front Board:

  1. Headlights: control the TESLA headlights.
  2. Left and Right Signals: Blink the left and right signals.
  3. Hazard: blinking signals for hazard.
  4. Horn: for activating (honking) the horn.

Rear Board:

  1. Brake Lights: Control the brake lights
  2. Strobe Light: Blink the strobe light in case of emergency.
  3. Left and Right Signals
  4. Hazard

Challenges:

DescriptionSolution
How to detect whether it's the front board or the rear board?There will possibly be a gpio address that we'll be able to read from.
How to sync both the front and the back board when blinking? The timer on both boards will not be identical so some communication needs to happen between the boards to make sure they're both blinking at the same time.Implementation of this solution should be a module that's independent from the rest of the program. 
e.g: The state machine logic for signals and hazard should simply make function calls and not worry about keeping the boards in sync. 
One board probably will need to send a can message to the other board, and both boards will reset their timers. This doesn't have to happen too frequently, probably every couple seconds.


Functional Block Diagram: 

Modules:

  1. lights_can:
    1. Its main responsibility is to solely receive can messages and raise events. 
    2. Is the only module that knows about whether software is at the front board or the back board.
    3. The only occasion where it sends a can message is a sync signal to the other board.
  2. main: This module only contains a main loop where it gets the raised events from lights_can and passes them to the next three modules: strobe, simple_peripherals, and signals_fsm. Every module checks if it owns the event that is passed to it and processes it. If the event is not related to the module, the module ignores it.
  3. simple_peripherals: Used for all the peripherals which have a simple on, or off state. These peripherals are: horn, headlights, and brake lights.
  4. strobe: Uses a blinker object to blink the strobe light.
  5. signals_fsm: Contains the FSM of the signals. Every often calls send_sync from lights_can to sync the two boards. Uses blinker for blinking the signals. 
  6. blinker: Basically handles all the overhead related to using soft timers.
  7. lights_gpio: 
    1. Is the only module that knows about all the addresses.
    2. Can be thought of the only part where the boards actually take action?!
    3. strobesignals_fsm, and simple_peripherals all call its lights_gpio_set() function to change the state of the lights.



  • No labels