To keep a detailed log of the Bolt EV's battery status, I've been using a Bluetooth OBD-II adapter that connects to a smartphone for the past two years. While it worked well, I wanted to have a permanent display showing the data and installing an iPhone to do so seemed to be an overkill. So I searched for dedicated "gauge" units that allowed for customization and narrowed the selection down to ScanGauge 2 and UltraGauge MX. The former allowed for more custom data (25 PIDs vs. 8), while the latter had a bigger screen (8 lines vs. 2). I ended up with the bigger screen.
With the device at hand, I had to find a way to program it to display Bolt EV-specific data using the existing custom PID information, and then install it on a place where it is both easily visible and properly shaded. After a bit of work, I was able to fulfill all of the objectives, as you can see in the photo above. The first page shows the actual vehicle speed, accelerator pedal position, various battery information including State of Charge (both raw and displayed), usable capacity, and temperature, as well as current trip distance and 12V battery voltage. Let's see how this was done.
Initially, UltraGauge detects how many of the 60 standard OBD-II PIDs (Parameter Identifications) and 28 self-calculated data it supports are available on the car. Because Bolt EV does not have an internal combustion engine, most of these are irrelevant and unsurprisingly unsupported. Of the 20 said to be usable as shown here, only 7 of them are standard PIDs and none are related to monitoring the high-voltage propulsion battery.
So I had to devote all of the eight custom PID slots available for this purpose. The problem is that the screen for configuring them (MENU - Gauge/Page Menu - Select Gauge/Page - M Gauge Setup) looks like this:
|0121||Distance driven with CEL (Check Engine Light) on||km|
|0130||Warm-ups since TC (Trouble Code) was cleared||Count|
|0131||Distance driven since TC was cleared||km|
|0142||ECM (Engine Control Module) 12V Battery Voltage||V|
|0146||Ambient Air Temperature||°C|
|0149||Accelerator Pedal Position 1||%|
And it's not easy to make sense of it at first. I needed to translate the information found in an unofficial list of custom PIDs for Bolt EV into this format. After reading the UltraGauge MX programming supplement and researching the CAN Bus protocol, I was able to do just that. For these PIDs...
I programmed UltraGauge like this:
|228334||State of Charge (Displayed)||%||A × 100 / 255 + 0|
|015B||State of Charge (Raw)||%||A × 100 / 255 + 0|
|2241A3||Battery Capacity (for 2017-18 Bolt)||kWh||A × 999 / 31250 + 0|
|22434F||Battery Temperature||°C||A × 1 / 1 - 40|
|22436B||HV Charger Voltage||V||A × 1 / 2 + 0|
|22436C||HV Charger Current||A||A × 1 / 20 + 0|
|22437D||Last Charge Amount||kWh||A × 1 / 100 + 0|
|2241B6||Battery Heater Power||kW||A × 1 / 1000 + 0|
You can see that TData is composed of the header and the PID. The header specifies which ECM the data should be coming from and there are at least eight of them (E0 to E7) on Bolt. The numbers used in the formula are entered in hexadecimal, as with other inputs. After making sure that the programmed PIDs were working as intended, I went ahead with the permanent installation of the device.