You will need dedicated hardware for that. I personally use a TJA1050 chip on a breakout board. This needs to be paired with MCU that has a CAN driver on it. You connect the can H/L pins of the mcu to the xceiver board, and that board handles voltages and the CAN voltages, while the mcu driver handles signaling etc. Again, you could just use my code... I use an STMF103 but it will run on any modern STM with CAN. Ironically that's exactly the same chip that's in the votol controllers...I sent your command through the terminal program as to the serial port, but I don't know how to send it as for the can bus yet.
Yeah and that switch, based on my experimentation, does pretty much nothing.I also looked at the commands that the native program sends, and saw that the packages for the can bus and without are the same.
But you are getting one packet back after the initial ping, no? It was in your screenshot. BTW how many pins does your votol cable have on the controller side?many failed attempts, and I still haven't received a response from votol. The rx port must have burned out in the controller processor.
If it's RX and TX then it's not CAN. CAN has CANH and CANL.Yes. I get the package when loading the controller, but it happens randomly, and does not cancel the version about the burned-out rx. on the 2x8 controller pad itself, all the wires are there, and I'm glad that two self-learning wires are available and programmed. to connect the laptop cable, there is a 4-pin chip on the controller, which uses the common minus, rx and tx. Today I also tried connecting via the bluetooth module via my phone and laptop. there is also no result......
rx/tx are used for serial. lin uses the separate extra digital output single wire.
endless-sphere.com
The only decent way of getting SOC is directly from the BMS if you have a SMART BMS and are communicating with it. Otherwise I suppose you could do some estimations on the esp32. If you know the cell types your battery has you could use the discharge graph to help with more accurate results. And you could probably update the SOC only once per minute or so and keep track of voltage sag to normalize it while riding. I am pretty sure chatGpt could really help you with that.Hi everyone,
I’m trying to extract a linear SOC% (battery state-of-charge) from my Votol controller. At the moment, the SOC shown by the Votol is instantaneous/voltage-based, which is not linear and not very accurate.
My questions are:
- Is there any serial data bit/parameter in the Votol protocol that provides a true linear SOC or battery percentage?
Something like coulomb-counted SOC directly from the controller?- If the Votol does not provide this, what is the recommended way to get an accurate linear SOC% externally?
What I am doing currently
I am reading voltage, current, and energy from the Votol via serial, and I use that to calculate SOC by coulomb counting on my ESP32. This works while riding.
BUT the problem is:
The Votol does not send any data when the bike is off and charging. So if the charger is removed at (for example) 52% battery, my ESP32 has no idea what the SOC is after charging, because it could not track the current during charging.
What I want
If the Votol already has a serial bit that outputs linear SOC / battery%, that would solve everything
If not, then I need advice on how people usually handle this:
- Should I build an external current-sensing circuit for estimating SOC during charging?
- Has anyone already done this with Votol controllers?
- Any recommended circuitry or methods?
I would really appreciate any help or suggestions.
Thanks!
endless-sphere.com
I am interfacing an ESP32 with a Votol motor controller using serial communication (TX, RX, and GND). The ESP32 is powered from the vehicle’s 12V line, which goes through a DC-DC converter and then a buck converter to provide 5V to the ESP32, with a common ground shared with the Votol controller. The issue I am facing is that when I check with a multimeter, the 12V and GND show continuity (beep), which appears like a short circuit, but the entire system is working perfectly, including the headlight, horn, indicators, backlight, Votol controller, and ESP32 communication. Suspecting a faulty converter, I completely disconnected both the DC-DC and buck converters, but the continuity between 12V and GND is still present, which makes me think this could be due to internal circuitry or grounding behavior rather than a real short. However, due to this issue, I am getting garbage values on the serial data from the Votol, even though I have deployed the same ESP32 code on another bike and it works perfectly there, so I believe this problem is specific to this bike’s electrical system. I would like to know whether this 12V-to-GND continuity is normal in Votol or e-bike systems, whether internal components such as DC-DC converters, lighting drivers, protection diodes, or capacitors can cause this behavior, and how I can properly diagnose whether this is an actual fault or an expected condition.
there is a workaround to solve this issue if no shunt involved in the charging/discharging circuit. you have to assume the battery is fully charged which is the start point. you accumulate the current in a fixed short period (say for example every 200ms), and converting it to Ah, then you get the real time Ah consumption. it is quite accurate for data from serial port (I would say less than 5% in full range) but I observe a quite big non-leaner error ( around 10%) from the SIF or LIN protocol compared with the serial port data even by curve-fitting.Hi everyone,
I’m trying to extract a linear SOC% (battery state-of-charge) from my Votol controller. At the moment, the SOC shown by the Votol is instantaneous/voltage-based, which is not linear and not very accurate.
My questions are:
- Is there any serial data bit/parameter in the Votol protocol that provides a true linear SOC or battery percentage?
Something like coulomb-counted SOC directly from the controller?- If the Votol does not provide this, what is the recommended way to get an accurate linear SOC% externally?
What I am doing currently
I am reading voltage, current, and energy from the Votol via serial, and I use that to calculate SOC by coulomb counting on my ESP32. This works while riding.
BUT the problem is:
The Votol does not send any data when the bike is off and charging. So if the charger is removed at (for example) 52% battery, my ESP32 has no idea what the SOC is after charging, because it could not track the current during charging.
What I want
If the Votol already has a serial bit that outputs linear SOC / battery%, that would solve everything
If not, then I need advice on how people usually handle this:
- Should I build an external current-sensing circuit for estimating SOC during charging?
- Has anyone already done this with Votol controllers?
- Any recommended circuitry or methods?
I would really appreciate any help or suggestions.
Thanks!
Where can I find this application?
votol
That looks like a custom application.Where can I find this application?
I've put all of my files, code and findings on my GitHub. Feel free to contribute there. GitHub - bananu7/votol: Reverse engineering notes for Votol EM controllerWe should really consolidate on a shared public library for this.
I'm in, as I need to deal with this.
May the skills and experience unite, instedad of everyone writing 98% the same code.