GT Solar Racing Communication Failure Functionality
In this project, I improved the time needed to detect communication failures for battery monitoring electronics. GTSR uses boards from Manzanita Micro for resistive brick balancing and voltage monitoring, and these boards use the FTDI Communication Protocol. In-between the Manzanita Micro board and the custom high level vehicle state controller / battery monitor board (called BMS Master) is an Arduino. That Arduino is where code in this project went.
Receive and Parse from FTDI
In this part of the code, I introduced the concept of communication failures which is where the value stored in rcvd == 0. I recorded the number of times that rcvd == 0 over the course of two minutes of normal operation, and then I plotted these numbers in MATLAB. Since these cases were under nominal conditions, I set the numFailures check value to be two standard deviations above the maximum to ensure that there would never be a failure in nominal conditions. This check improved the time it took BMS Master to detect the failure from ~5s to less than 1s.
Get Voltages, Temperatures, and Heat Sync Temperatures
This code is very similar for Voltage, Temp, and Heat Sync Temp detection. In addition to looking at the communication status from the above code, we also improved data integrity in cases where extra spaces would be attached to messages. Using the strchr() function, I removed the spaces by setting result char * to the char * returned by strchr(). Now, instead of returning the voltage, we set the value to the voltage_addr memory address and then return the communication status.