• Hello ES! We could use some help to get us past the finish line on building the new knowledgebase for the forum.
    Can you donate? Please see our fundraising page. Thank you!

VOTOL serial communication protocol

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.
 
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.
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 also looked at the commands that the native program sends, and saw that the packages for the can bus and without are the same.
Yeah and that switch, based on my experimentation, does pretty much nothing.
 
many failed attempts, and I still haven't received a response from votol. The rx port must have burned out in the controller processor.
 
many failed attempts, and I still haven't received a response from votol. The rx port must have burned out in the controller processor.
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?
 
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......
 
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......
If it's RX and TX then it's not CAN. CAN has CANH and CANL.

Let's take a step back.

1) Are you 100% positively sure that the controller is the CAN version? My Votols that run on CAN use a 4-pin socket but only populate 3 pins (with blue, orange and brown wires), and of those 3, only two are used for programming. The dongle has blue and orange wires that match the controller plug. There is no other indication on the controller enclosure. What did you mean by "4-pin chip"? Did you mean a 4-pin connector?

2) Are you 100% positively sure that the dongle is the CAN version? For looks outside, see above. Do you see the TJA1050 chip through the translucent enclosure? Ditto about the BT dongle.
 
I'm 99 percent sure that I don't have a can bus. since the pl2303 cable was included. now I can't see which chip is in votol. I meant that there are 4 pins in which there is a plus, minus, rx and tx, naturally the pl2303 cable does not use a plus of them. and when I connected the Bluetooth module, I connected it from votol plus. I'm already starting to think about connecting an oscilloscope.
 
Hi friends, is there anyone here who knows about decoding One Line TX-RX from a single wire of a VOTOL brand controller?

I tested it with a logic analyzer and the results are:
Baud rate: 2000 bps.
Data bit: 7 + 1 stop bit, or possibly 8 data bits with no stop bit.
No parity and LSB first.
data carrier loop: 38 byte data per loop.
Does anyone here have the data Frame formula and decoder for this?
if I know the format data decoder, frame possion, I can use Atmega or ESP to covert with anything display.

Thanks.
 

Attachments

  • moped.jpg
    moped.jpg
    287.3 KB · Views: 12
there's a lot of data in this thread; don't konw if any of it is what you're after:
 
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:
  1. 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?
  2. 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!
 
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:
  1. 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?
  2. 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!
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.
 
@rehman You would need a bidirectional coulomb counter to calculate a partial charge.
A few examples:

Fully described bidirectional shunt in chapter 9.2.

ACS773. Hall-effect shunt.


A low cost coulomb counter.

Isolated current, voltage and SOC monitor for battery banks up to 85V.
 
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.
 
My second question is that I am using different Votol controllers including EM-50-4, EM-50-S, and EM-50-6, and I want to confirm whether the same serial communication packet/protocol is supposed to work across all these models. On the EM-50-4 and EM-50-S, the serial packet works perfectly and the controller behaves normally, but when I use the same ESP32 code and serial packet on an EM-50-6, the controller immediately goes into fault status and stops responding to the throttle input, even though the hardware wiring is the same. The same firmware and packet work correctly on other bikes, so I am trying to understand whether the EM-50-6 uses a different serial protocol, packet structure, baud rate, checksum, or command set, or if certain packets can put the EM-50-6 into a protective or diagnostic mode that disables throttle input. I would appreciate clarification on whether these Votol models share a common serial protocol or if the EM-50-6 requires a different implementation.
 
The 12V DC-DC converter is good. What you are measuring is a diode connected between 12v and ground.
 

Attachments

  • Dc-to-DC-Step-Down-Buck-Converter-1301004678.jpg
    Dc-to-DC-Step-Down-Buck-Converter-1301004678.jpg
    33.8 KB · Views: 3
2 different protocol. Normally the "S" series have uart, the SP series have CAN ( uart protocol over can) also the new model em50-6 have can. If you buy from syacosys, mozt of them have can.
 
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.

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:
  1. 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?
  2. 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!
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.
 
We 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.
 
Back
Top