- Kalman state of charge algorithm
- Improved panel SMPS stability
- Refactored state machine logic
- Stability improvements
Kalman state of charge algorithm
As lithium has become the prominent battery choice going forward and we started requiring a highly reliable state of charge value in advanced power sharing logic, we needed something more robust than the mvp coulomb counting calculation we built initially. Building, tuning, and validating the Kalman SoC algorithm and integrating it into our firmware has been a massively complex project (stay tuned for a blog post coming soon!) and it is already having promising results. Kalman SoC paves the way for better battery monitoring and optimized power algorithms in the future.
Improved panel SMPS stability
As we pushed the pods to new power limits, we unfortunately experienced an increase in pod failures, primarily due to voltage spikes on the panel switch node. Any time we experience failures, we look for ways to solve the problem in firmware (because we can deploy changes quickly) and then, if needed, integrate longer term fixes into hardware. In this case, we have added a number of improvements into our next iteration of the hardware, kicking off manufacturing in a couple weeks, and discovered we could use firmware to at least lessen the frequency of the problem. We reduced the switching frequency from 100Hz down to 50Hz, which required retuning and validating all the panel algorithms, but ultimately reduced the scale and occurrence of the switching spikes, improving the performance of the pod.
Refactored state machine logic
Each input/output to the pod requires complex logic to determine when to enable, disable, and what control algorithms should be running. To handle this logic, we’ve built a state machine to independently manage the appropriate state that each component (grid, panel, battery, load) should be at. However, there are complexities because these state machines don’t operate independently, and information from some machines drive logic in the others. This entanglement led to some confusing codependency and code that wasn’t as robust as it could have been, which also resulted in uncaught edge cases in the field. In this release, we have completely cleaned up and made consistent, the structure of these machines, which results in greater reliability.
Bug fixes in this release included:
- Support for larger binaries
- Fix how onboard storage is reset to a clean state after an update