Kugoo S1 All-wheel Drive (two Motors)

Introduction: Kugoo S1 All-wheel Drive (two Motors)

The plan was to mount motor also for the rear wheel to climb the uphill better with my 90kg.

Step 1: Communication Interface Hardware

I have ordered a new motor controller and display module. We have investigated the interface between them.

  • Black - Ground
  • Red - +36V supply voltage
  • Blue - +36V switched supply voltage
  • Green - Communication from controller to display
  • White - Communication from display to controller

Step 2: Communication Interface Software

The communication looks UART with 9600 baudrate.

Step 3: Search Place for Rear Motor Controller

Looks there is enough place behind the battery pack for the rear motor controller.

Step 4: Single Direction Communication Check

If the communication is broken from controller to display, the roller works further properly, just the information from controller is missing on display. E.g. speed flashes. This means, if I connect the two controllers to the same display interface that way, that rear controller transmitted communication wire is not connected, the two motor should work well. Just the displayed current consumption value will not be correct.

Step 5: Decrease PCB Size

I grabbed a half millimeter from the edge of the rear engine control board. Now its size fits to smaller size house.

Step 6: Communication Protocol

Display -> Controller

8 bytes, every 50ms.

Example: 3E 04 01 00 00 00 00 05

Bytes:

  1. Header
  2. I do not know what is this, it didn't change during my tests.
  3. Speed level. 1:0x01, 2:0x02, 3:0x03
  4. Lights, 0x00:off, 0x80:on
  5. Acceleration demand 0x00 - 0x78, gradually increasable, but the active range is just between 25% and 50% of the hand arm.
  6. Deceleration demand 0x00 - 0xD1, brake light becomes on around 0x0A, at 0x10 the brake torque is already maximal, cannot controllable.
  7. I do not know what is this, it didn't change during my tests.
  8. Checksum

Power off command: 0xFF 0x00 0x00 after a frame.

Controller -> Display

11 bytes, every 500ms.

Example: 3C 07 01 00 00 0B B8 00 00 00 CB Bytes

  1. Header
  2. Battery voltage (most likely, I couldn't change it to check is it really that.)
  3. Same as 2. but the other byte
  4. Control lamps. 0x01: motor fault. 0x04: active brake.
  5. Current [A]
  6. Time between speed sensor pulses. 0kmh=0x0BB8, 5kmh=0x01CC, 10kmh=0X00D9, 20kmh=0x0070, 34kmh=0x0044
  7. Same as 6. but the other byte
  8. I do not know what is this, it didn't change during my tests.
  9. I do not know what is this, it didn't change during my tests.
  10. I do not know what is this, it didn't change during my tests.
  11. Checksum

This is the PHP script I have used to check the checksum algorithm: Download Kugoo S1 communication checksum checker script

Step 7: Build in the Motor Wheel

Step 8: Build in the Rear Controller Circuit

Step 9: The Workshop

:-)

Step 10: Test With Connected Wires

The communication must be connected. I have also connected the switched power line, maybe it is needed for proper power off procedure. I have removed the other wires from the controller board.

Step 11: Shake Resistence

Step 12: Build in the Controller

The controller can be mounted into its final place.

Step 13: Final Wire Connections

The final soldering and isolating of wires.

It is visible where the motor connector is.

Step 14: Done

Good luck to make the mod for yourself! :-)

My experiences after a few days usage:

  1. Uphill climbing ability is much better. I do not need to shove it anywhere.
  2. Brake torque is double so deceleration is also double. This is useful, but I must hold on the steering rod strongly to not fall forward. Unfortunately, since brake force cannot be controlled proportionally, I have to brake by fast on-off-on-off... brake control.
  3. The battery discharge is not more significantly. Usually on flat road not the current is limited but the speed. But to keep a speed needs a defined amount of power and it is independent from number of motor wheels. Just the double motor lost need some extra power. My estimation is that total distance is 90% compared to single motor.
  4. On uphill the current is double and this usually pulls down the battery voltage in short time. On display it looks battery discharges much faster, bit after the uphill, due to battery regenration the capacity is higher again on the display.

Be the First to Share

    Recommendations

    • Back to School: Student Design Challenge

      Back to School: Student Design Challenge
    • Retro Tech Challenge

      Retro Tech Challenge
    • Halloween Contest

      Halloween Contest

    21 Comments

    0
    darkenergymatter
    darkenergymatter

    4 months ago

    what would be an appropriate way to put a ignition switch (anti theft) on kugoo S1 ? a mechanical key but where would be appropriate low current contact ?

    0
    Butyi
    Butyi

    Reply 3 months ago

    I propose to interrupt communication wire from display to motor controller by a key-switch. This is white wire on my scooter. In this case, it cannot be switched on, but key-switch get very low current, actually almost zero current.

    0
    darkenergymatter
    darkenergymatter

    Reply 3 months ago

    hmm I put a "huge" 10 A switch (with fuse, I used spade connectors that hopefully won't shake off) on the battery red 36 V lead, could it be possible to use the blue tooth connection from the more recent kirin S1 as switch by using that board ? if anyone has wiring diagrams of kugoo S1 and kirin S1 ?

    0
    bourasseau.arthur
    bourasseau.arthur

    1 year ago

    I am in the process of making one but I am using an arduino between the screen and the controllers to control both motors individually.
    The checksum is actually the last two bytes and not only the last one:

    3e 04 01 00 26 d2 00 fd
    3e 04 01 00 28 d2 00 ff
    3e 04 01 00 29 d2 01 00
    3e 04 01 00 2a d2 01 01

    The parameters are sent to the controller on startup and at every settings change:
    3e 2c 0b 00 19 28 1e 64 50 32 01 00 00 00 01 (16 bytes)
    19 = speed limit
    28 = wheel size: hex(28) = dec(40), 40 * 2 = 80 so 8.0"
    tested with 7.8 as parameter: hex(27) = 39 * 2 = 78 so 7.8"
    1e = angle for hall sensors
    64 = % of speed 1
    50 = % of speed 2
    32 = % of speed 3
    others are the engine braking, cruise control...

    0
    Butyi
    Butyi

    Reply 3 months ago

    Thanks! It means display stores the config, and just sends it to controller at every startup. In this case I can change config by normal way, and it will impact both motor controller properly. I will try soon! :-)

    0
    matel855
    matel855

    Reply 11 months ago

    Hi,

    I was trying to connect arduino nano to kugoo s1 between display and controller and was trying to send acceleration command to controller, but with no success..Is it possible for You to paste here simple arduino code for sending these hex data?

    Thanks

    0
    bourasseau.arthur
    bourasseau.arthur

    Reply 11 months ago

    Hello,

    The code that I used handle both the Screen->Controller and Controller->Screen communications, I used the SoftwareSerial librairy for this because the hardware serial on the Arduino uses inverted logic levels which are not compatible.

    The SoftwareSerial can only read one port at a time so I am switching between the Screen and Controller, I end up missing about 10% of the Screen-> Controller which is imperceptible but I catch 100% of the Controller-Screen communication.

    It also replace the current value by the real one, which is read by a ACS712 sensor placed right after the battery on analogRead(1) (before it splits between the two controllers).

    The braking is divided in two main steps where I first brake with the front motor then I add the rear motor after ~50% braking command, I also tried to re-map the braking value sent to the controller and I managed to get a somewhat progressive braking on each motor.

    Arduino Nano code: https://pastebin.com/RNuTQcdQ

    Best Regards,

    Arthur

    0
    nugyika
    nugyika

    Reply 9 months ago

    Hello!
    I use a scooter with two engines. Very good, but I want to improve the brake. Can you describe how you made the connection? A description in this regard would help a lot.
    Thank you very much!
    George

    0
    Butyi
    Butyi

    Reply 9 months ago

    My two motors are working independently, just both motors receive the same command from hand unit. This means when I push accelerate, both motors accelerate. When I brake, both motors brake. The two motors do not know about each other, there is no any synchronization between them, just work parallel. Like the two horses in front of horse-drawn carriage.

    0
    nugyika
    nugyika

    Reply 9 months ago

    Yes, that's right for me. I'm interested in installing the arduino. Its wiring. If it does continuous braking.
    Thanks!

    0
    matel855
    matel855

    Reply 9 months ago

    Hey, I did progressive braking, adaptive cruise control and standard cruise control with downhill braking, but not connecting arduino directly to board, but just to thumb accelerator and brake

    0
    nugyika
    nugyika

    Reply 9 months ago

    Do you describe how you did this? What and where to connect? I want to know that. It's good if the brakes aren't that aggressive. Does this work for you?

    Thanks!

    0
    matel855
    matel855

    Reply 11 months ago

    Hey,
    Thanks for Your reply..I was trying Your code, but its always same as with mine code..I can read all data, I can see it in serial port, but when I am sending data it just doesnt work(glowing back brake light and blinking speed level on lcd)..I just want to test brake or accelerator, I am connecting arduino tx pin(d7) to controller connector and rx(d4) to lcd connector

    Thank You

    0
    Butyi
    Butyi

    Reply 1 year ago

    Thanks!

    0
    Peter9174
    Peter9174

    7 months ago

    Thank you for the detailed description and instructions. Both engines are going well. Thank you once again.

    0
    Butyi
    Butyi

    Reply 3 months ago

    I love your video to see my description was useful for the community. Thanks!

    0
    Tassie_73
    Tassie_73

    Tip 5 months ago on Step 6

    Hi Butyi,
    on my search for informations on the controller I found this page, and it pushed me forward. I also found out, that the protcol must be 9600 baud, but then I had difficulties in reading it. Now with your instructions I was able to build a smartphone app to check the display (next would be controller).
    I don't know if you already found it out: the second byte in the message after the header is the amount of data bytes coming (exlusive 2 bytes for checksum). the third byte from the controller to display is the speed level. If the speed level coming back from the controller is not the same as the speed level which was sent from the display, the speed level on the display is flashing.
    But it seems for the parameters, the amount of bytes is only the lower 4 bits the upper seem to signal something else...

    I wonder if you found out if there is a possibility to change the direction (perhaps by sending other parameters)
    regards,
    thomas

    0
    Butyi
    Butyi

    Reply 3 months ago

    Thanks for additional info.

    Perhaps the parameters that you don't know what is it are the hidden setup parameters that you can configure in the screen: Limit of speed, cruise control, disable the brake... Is only a idea.
    Thanks for your information and review.

    0
    Butyi
    Butyi

    Reply 1 year ago

    Config just come into my mind after finish the project. I couldn't made config change, because config change needs request-answer protocol, but now, there are two motor controller units for a single display. This means, when display requests a parameter change, two controller's response will disturb the display. Should be changed separately or should build in hidden switches, by which can be selected any controller alone for config purpose. Maybe I will do it once a time to increase max speed, since double motor can ride with higher speed than 25km/h on flat road.