kugo s3 поменял дисплей

Автор nemaster, 15 Июль 2023 в 11:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

nemaster

Добрый день. читал форум, но конкретного решения не нашел.
Kugoo s3 умерла микросхема arm на контроллере дисплея. заказал дисплей в сборе , желтый
провода подапаял по цвету.  Как я понял плата стоит от f3 pro с приложение .
посоянно скачет напряжение около 18 вольт.
Как понимаю в идеале менять и силовой контроллер. но хочется по дешевле.

Может не правильно распаял провода (белый.зел.черн.син. красн) или может прошивка поможет (нужны толкьо две функции, газ, тормоз , макс скорость )?
Хорошо едем

Sonar

[user]nemaster[/user], теперь придется заказывать совместимый силовой контроллер, так как у модели F3 имеются существенные различия в электрическом подключении между контроллерами.
Kugoo S2 blue, 36v, 20,8A/h, 2WD, 1,9kW max, Prog disp v3.8, Prog drive v1.9, odo: 32087km.
Все материалы по альтернативным контроллерам для Kugoo S2/S3: http://213.21.12.200/kugoo_project/
Тема на форуме по этим контроллерам https://electrotransport.ru/index.php?topic=61126.0

nemaster

https://electrotransport.ru/index.php?topic=64075.0
сможет помочь ?    или придется еще разбираться в коде на f3 ?
Хорошо едем

nemaster

#3
Купил новый желтый контроллер. включаю кнопку, напряжение все хорошо показывает. слышен небольшой щелчек в мотор колесе,на газ ноль реакции, если достаю датчик из курка ошибкук не дает. датчик тормоза достаю, ошибку показывает , при нажатии загорается светодиод. Колеса еле прокручивается, буд-то в блоке.
Хорошо едем

Sonar

[user]nemaster[/user], колесо когда блокируется? Когда нажимаете на газ, когда включаете самокат, или всегда (в том числе и в выключенном состоянии)?
Kugoo S2 blue, 36v, 20,8A/h, 2WD, 1,9kW max, Prog disp v3.8, Prog drive v1.9, odo: 32087km.
Все материалы по альтернативным контроллерам для Kugoo S2/S3: http://213.21.12.200/kugoo_project/
Тема на форуме по этим контроллерам https://electrotransport.ru/index.php?topic=61126.0

nemaster

#5
Лето проходит, я все чиню))
Когда включаю с кнопки, почти сразу. Он делает два щелчка. и все. буд-то рекуперация работает, колесо рукой прокручивается рукой  с небольшим усилием. читал что силовой контроллер не получает сигнал и и так уходит в "защиту".
не исключено что сжег rx и tx линию микросхемы STM8S903 дисплея,  старым зеленым контроллером. Пока вижу решение так. Пойдти к знакомому. проверить мотор колесо (провод был перетерт, заменил), и два контроллера.
Морально настроился на замену stm и прошивку контроллера дисплея. Надесюь поможет. Самое главное, прошивал arduino pro mini (5v) из ранее указанной мной темы, подключил два датчика. команды шлет, самокат всеравно не реагирует.

Может подскажете, как проще читать вывод, стандартный терминал arduino  при 9600 выдает : "␁/␁6 и т.п."  st-link пока не покупал.
И вопрос. Если менять stm нужно именно такуюже ставить или аналог по даташиту подойдет?
p.s. Linux  . 

добавил. нажатие на курок газа ноль реакции. извлечение датчика курка газа из посадочного места оишбку не дает
Хорошо едем

nemaster

#6
чуть подправил код arduino  . ура . при прикосновении магнита. есть реакция. мотор крутит !! Спасибо форуму, очень много реально полезной информации. !
Буду пытаться отредактировать код. но не уверен что спрвлюсь. Для меня байты тема требующая изучения. Если кому не сложно. подправьте пожалуйста.
#define RecupPort A2
#define AccelPort A3

const byte RecuperationIndexUpper = 6; //Индекс старшего байта фрагмента сообщения, отвечающего за рекуперацию
const byte RecuperationIndexLower = 7; //Индекс младшего байта фрагмента сообщения, отвечающего за рекуперацию
const byte AcceletarionIndexUpper = 8; //Индекс старшего байта фрагмента сообщения, отвечающего за акселератор
const byte AcceletarionIndexLower = 9; //Индекс младшего байта фрагмента сообщения, отвечающего за акселератор

const byte CodeCount = 8; //Длина сообщения, байт
const byte StatusCount = 8; //Длина сообщения, байт
const byte WheelControllerStatusCount = 8;
const byte StatusStartByte = 0x28; //Длина сообщения, байт
const byte ServiceByteIndex = 1;
const byte CruiseBitPosition = 1;

byte CRC = 0; //Переменная для расчета контрольной суммы
byte StatusCRC = 0;


byte ControlCode[CodeCount] = {0x3E, 0x04 , 0x01, 0x00,  0xC8, 0x00, 0x00, 0x05}; //Шаблон сообщения
//byte ControlCode[CodeCount] = {0x55, 0x10, 0x01, 0x01,  0x00, 0x00, 0x00, 0x00}; //Шаблон сообщения
byte WheelControllerStatus[StatusCount];

unsigned int AccelADC = 0;
unsigned int AccelValue = 0;
unsigned int RecupADC = 0;
unsigned int RecupValue = 0;

byte StatusIndex = 0;
byte StatusByte = 0;

boolean StateCurrentAccel = false;
boolean PreviousStateCurrentAccel = false;

const unsigned int MinAccelValue = 225; //Минимальное значение аккселератора, начиная с которого считаем, что он нажат
const unsigned int MinRecupValue = 225; //Минимальное значение ркуператора, начиная с которого считаем, что он нажат

boolean SendSingleRecup = false;
boolean CruiseOn = false;

void setup() {

  Serial.begin(9600);       // открываем последовательный порт

}

void loop() {

  PreviousStateCurrentAccel = StateCurrentAccel;

  //Читаем аккселератор
  AccelADC = analogRead(AccelPort);
  AccelValue = AccelADC;

  //Читаем рекуперацию
  RecupADC = analogRead(RecupPort);
  RecupValue = RecupADC;

  //Читаем сообщение контроллера колеса
  while (Serial.available() > 0) {

    StatusByte = Serial.read();

    if (StatusIndex == 0 && StatusByte != StatusStartByte) {
      continue;
    }

    if (StatusByte == StatusStartByte || StatusIndex >= StatusCount) {
      StatusIndex = 0;
    }

    WheelControllerStatus[StatusIndex] = StatusByte;

    StatusIndex++;

  }

  StatusCRC = 0;
  for (int i = 0; i < StatusCount - 1; i++) {
    StatusCRC = StatusCRC ^ WheelControllerStatus[i];
  }

  if (StatusCRC == WheelControllerStatus[StatusCount - 1]) {
    CruiseOn = bitRead(WheelControllerStatus[ServiceByteIndex], CruiseBitPosition);
  }

  StateCurrentAccel = (AccelValue >= MinAccelValue);

  if (!PreviousStateCurrentAccel && StateCurrentAccel || PreviousStateCurrentAccel && !StateCurrentAccel && !CruiseOn) {
    SendSingleRecup = true;
  }

  if (SendSingleRecup) {

    AccelValue = 0;
    RecupValue = MinRecupValue;

    SendSingleRecup = false;

  }

  //Пишем значения в сообщение, разделив его на 2 части
  ControlCode[AcceletarionIndexLower] = byte((AccelValue << 8) >> 8);
  ControlCode[AcceletarionIndexUpper] = byte(AccelValue >> 8);

  //Пишем значения в сообщение, разделив его на 2 части
  ControlCode[RecuperationIndexLower] = byte((RecupValue << 8) >> 8);
  ControlCode[RecuperationIndexUpper] = byte(RecupValue >> 8);

  //Считаем контрольную сумму
  CRC = 0;
  for (int i = 1; i < CodeCount - 1; i++) {
    CRC = CRC + ControlCode[i];
  }

  ControlCode[CodeCount - 1] = CRC; //Записываем контрольную сумму в последний байт сообщения
  Serial.write(ControlCode, CodeCount); //Выводим сообщение в порт
  delay(50);

}


вроде понял. надо убрать деление
  //Пишем значения в сообщение, разделив его на 2 части
  ControlCode[AcceletarionIndexLower] = byte((AccelValue << 8) >> 8);
  ControlCode[AcceletarionIndexUpper] = byte(AccelValue >> 8);

  //Пишем значения в сообщение, разделив его на 2 части
  ControlCode[RecuperationIndexLower] = byte((RecupValue << 8) >> 8);
  ControlCode[RecuperationIndexUpper] = byte(RecupValue >> 8);

думаю справлюсь.
Хорошо едем

nemaster

разобрался.работает ппж код отшлифую. выложу. может пригодится кому
Хорошо едем