About the project

  1. about this documentation in HTML
  2. License

Development tools

  1. Linux
    1. Step-by-step tutorial development tools
      1. Hardware tools to flash and debug the firmware
      2. Tools to build the firmware
        1. stm8-binutils-gdb
      3. Tools to flash the firmware
        1. How to unlock protected read memory
      4. (optional) Tools do flash and debug the firmware
      5. (optional) Tools to debug using serial port
      6. (optional) Tools to see diffs on the source code
  2. Windows
  3. C library
  4. Various resources
    1. Printf example

Motor controllers

  1. BMSBattery S series
    1. BMSBattery S06S
      1. S06ST (torque sensor version)
      2. S06S-BL (Bluetooth version)
      3. PWM signals
        1. very low speed - 6 steps
        2. low speed up to max speed - sineware
      4. Phase B current signal
      5. Throttle
    2. BMSBattery S12S
      1. Programming header
      2. PWM signal at max speed - sineware
      3. Phase B and motor total current signals
    3. BMSBattery bottle battery controller
    4. LCD control panel
      1. LCD protocol
    5. Bluetooh
      1. DIY Bluetooth module
    6. Hardware mods
  2. Other controllers
    1. BMSBattery S06P
      1. various info
        1. 01
        2. 02
    2. Kunteng 18 mosfets motor controller
    3. Lishui motor controllers
      1. LSW-675
        1. Datasheets
        2. PWM signals
    4. JinHui motor controllers
  3. GreenEBikeKit


  1. BMSBattery Q75
  2. BMSBattery Q85
  3. BMSBattery Q100
  4. BMSBattery Q100C

Torque sensors

  1. BMSBattery torque sensor

Datasheets and application notes

  1. STM8S105C6T6
    1. Interrupts

Motor control

  1. Motor control scheme of S06S controller
  2. BLDC 6 steps
  3. PWM schemes
    1. So, Which PWM Technique is Best? (Part 1)
    2. So, Which PWM Technique is Best? (Part 2)
    3. So, Which PWM Technique is Best? (Part 3)
    4. So, Which PWM Technique is Best? (Part 4)
    5. So, Which PWM Technique is Best? (Part 5)
    6. So, Which PWM Technique is Best? (Part 6)
    7. So, Which PWM Technique is Best? (Part 7)
  4. PWM control and Dead Time Insertion
  5. Low inductance motors
  6. Throttle Control Modes
  7. Phase angle FOC
  8. PWM frequency VS motor eRPM
    1. Max motor speed using FOC
    2. Kelly controllers ultra high speed
  9. Sinusoidal Control of BLDCM with Hall Sensors Based
  10. Self-Learn Hall Sensor Calibration Mode
  11. STM8S105 Alternatives
  12. Regeneration
    1. Regen in SimonK firmware


  1. forum messages
    1. 2017.04.25 - Initial forum message
    2. 2017.05.08 - First flash and debug on a dev board
    3. 2017.05.18 - First code flashing and running
    4. 2017.05.20 - more new information
    5. 2017.08.23 - SxxP versus SxxS versus LSW-675
    6. 2017.09.01 - Trying to figure out an algorithm to automatically adjust ui8_position_correction_value
    7. 2017.09.02 - How to do FOC on the BMSBattery S06S/Kunteng STM8 motor controllers
    8. 2017.09.03 - more ideas about zero crossing for FOC
    9. 2017.09.05 - measuring IQ current and manually adjusting position_correction_value
    10. 2017.09.15 - our OpenSource firmware efficiency compared to Lishui 12 FET FOC
    11. 2017.09.19 - measuring motor current
    12. 2017.10.23 - FOC and no FOC comparison
  2. STM8S003 board
  3. 2017.12.01 - Regen ebrake like coast brakes


  1. 2017.05.22 - Hackaday Links: May 21, 2017

Smart BMS with bluetooth

2017.09.19 - measuring motor current

The next tests were done with firmware running the very low resolution FOC and the motors were running with the best efficiency possible up to date.

Schematic of the part to measure motor current:

Over current (OC)
LM358D U2A seems to be configured as a comparator, comparing the voltage on the shunt.

On pin 3, the voltage is defined by the voltage divider R9 and R7:
R7/(R7+R9) * Vin = Vout; 2.2 / (2.2 + 20) * 5V = 0.099 * 5V = 0.5v
If R6 = 0.001R; OC signal will be active low when current I = U / R; I = 0.5 / 0.001 = 500 amps (??)

Opamp as diferential amplifier (motor current)

LM358D U2B seems to be configured as a differential comparator and the output is the amplified signal of motor current (ISHUNT). This signal is after sent through the low pass filter formed by the R21 and C6, resulting in the signal AN8.

Diferential amplifer gain:
Gain = (R3/R1) * (V2-V1) = 10/1.8 * (V R6 - 0) --> gain = 5.56

Vout = 1.59V, measured with motor stopped. For each 1A, Vout will increase:
V R6 = 0.001 * 1 = 0.001V; 0.001 * 5.56 (gain) = 5.6mV (??)

Oscillocope screenshot showing with yellow the ISHUNT signal and blue the AN8 signal. Note that both signal values with the motor stopped were 1.59V.

Now with the motor running and the lab power supply were showing a current value of 1.1A.

As we can see, for a current of 1.1A, the AN8 signal is about 48mV higher (lab power supply measures 0.2A with motor stopped). Each 1A should increase the signal about 53mV.

EUC2 motor (direct drive motor)
Motor running slow and without load. Yellow is the ISHUNT signal, blue is hall sensor signal. Power supply current measuring 0.2A:

Motor running slow and now with a load. Power supply current measuring 1A. 80mV peak current:

Q85 motor (geared motor)
Motor running slow and without load. Power supply current measuring 0.5A. 80mV peak current:

Motor running at medium/high speed and without load. 320mV peak current:

Motor running at high speed and without load but here the motor makes a lot of noise and vibration. The lab power supply were indicating “short-circuit” protection so motor should not run like this.
500mV at least peak current including negative peak currents:
images/85-8.png images/85-9.png