Index

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 S06SC
    3. BMSBattery S12S
      1. Programming header
      2. PWM signal at max speed - sineware
      3. Phase B and motor total current signals
    4. BMSBattery bottle battery controller
    5. LCD control panel
      1. LCD protocol
    6. Bluetooh
      1. DIY Bluetooth module
    7. How to open the controller and solder the programming header
    8. 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

Motors

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

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 erase and unlock protected read memory
      4. (optional) Tools to 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. Other tools
    1. Battery voltage boost step-up converter

Motor control

  1. Torque speed
  2. Motor control scheme of S06S controller
  3. BLDC 6 steps
  4. 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)
  5. PWM control and Dead Time Insertion
  6. Low inductance motors
  7. Throttle Control Modes
  8. Phase angle FOC
  9. PWM frequency VS motor eRPM
    1. Max motor speed using FOC
    2. Kelly controllers ultra high speed
  10. Sinusoidal Control of BLDCM with Hall Sensors Based
  11. Self-Learn Hall Sensor Calibration Mode
  12. STM8S105 Alternatives
  13. Regeneration
    1. Regen in SimonK firmware

Datasheets and application notes

  1. STM8S105C6T6
    1. Interrupts
  2. Endless-sphere.com 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
    13. 2018.01.10 - How to measure FOC_READ_ID_CURRENT_ANGLE_ADJUST

Torque sensors

  1. BMSBattery torque sensor

Various

  1. STM8S003 board
  2. 2017.12.01 - Regen ebrake like coast brakes

Clipping

  1. 2017.05.22 - Hackaday Links: May 21, 2017

Smart BMS with bluetooth

2018.01.10 - How to measure FOC_READ_ID_CURRENT_ANGLE_ADJUST


There is a parameter on the firmware that can be adjusted to optimize the motor controller efficiency to the max possible, meaning the used battery energy will be the lowest possible to run the motor.

One way to find the best value for that parameter (FOC_READ_ID_CURRENT_ANGLE_ADJUST) is by running the motor with a constant load and adjust the parameter value up to get the lowest battery energy used.
Since it is difficult to run the motor with a constant load, a new way to calculate the ideal value is proposed.

Calculate FOC_READ_ID_CURRENT_ANGLE_ADJUST by looking at hall sensor and BEMF signals

Considering that pushing by hand the motor will generate a BEMF voltage signal at his phases terminals, we can measure this signals and compare with hall sensor signals: the time difference between zero cross of each signals will let us calculate the FOC_READ_ID_CURRENT_ANGLE_ADJUST.

Example of voltage signal readings on oscilloscope (motor BMSBattery Q85 24V 328 RPM).
Blue line is hall sensor signal (B) (hall sensor green wire) and yellow line is phase B signal (motor phase B green wire):
images/25-1.png

images/25-2.png
As we can see, there is a small offset of 1.8ms between the signals.
Let's calculate FOC_READ_ID_CURRENT_ANGLE_ADJUST based on that offset:
• signal period is: 14.8 * 2 = 29,6ms (as seen on first picture).
• our firmware divides the signal period in 256 steps, so the offset of 1.8ms is: (1.8 * 256)/ 29,6 ~= 16 steps
• FOC_READ_ID_CURRENT_ANGLE_ADJUST base value is 127 steps and so we need to add 16, and the final value will be: 143.

Another example of voltage signal readings on oscilloscope (motor BMSBattery Q11 48V 370RPM).
Blue line is hall sensor signal (B) (hall sensor green wire) and yellow line is phase B signal (motor phase B green wire):

images/25-3.png

images/25-4.png
As we can see, there is a small offset of 2.8ms between the signals (on this motor, the phase voltage is behind the hall sensor signal).
Let's calculate FOC_READ_ID_CURRENT_ANGLE_ADJUST based on that offset:
• signal period is: 27 * 2 = 54ms
• our firmware divides the signal period in 256 steps, so the offset of 1.8ms is: (2.8 * 256)/ 54 ~= 13 steps
• FOC_READ_ID_CURRENT_ANGLE_ADJUST base value is 127 steps and so we need to subtract 13 (subtract because phase voltage is behind the hall sensor signal), and the final value will be: 114.

How to read the signals using an oscilloscope

• wire 3 resistors, of 47k ohms each one, in a star to have a common connection point between them:
images/25-5.png

• connect each motor phase wires to points A, B and C of the star
• connect ground wire of oscilloscope to point O (middle point of star)
• connect oscilloscope channel A probe to point B (motor phase B green wire)

Next, we need to connect oscilloscope channel B probe to hall sensor green wire. But the hall sensors need to be powered, so connect them to the motor controller and power it up. Connect the motor controller ground to point O (middle point of start).

Now you can rotate the motor by hand and see on the oscilloscope the generated voltage waveforms.

NOTE: If you need an oscilloscope, you can buy a cheap 70€ portable oscilloscope that should be enough for this task (find on Ebay searching for “DSO oscilloscope”:
images/25-6.png
• video: https://www.youtube.com/watch?v=RCEHAOyxHRY