Эмуляция данных ABS для квадроцикла повышенной проходимости

Суть задачи:

Один из наших клиентов решил реализовать нестандартный инженерный проект — создать квадроцикл повышенной проходимости.

Концепция предполагала использование серьёзных автомобильных компонентов:

  •  прочная сварная рама;
  • мощный двигатель внутреннего сгорания;
  • автоматическая коробка передач;
  • колёса сверхнизкого давления большого диаметра.

Такие колёса позволяют технике уверенно двигаться по мягким грунтам, болотам и сложному бездорожью.

С точки зрения механики и компоновки проект получился удачным. Но на этапе испытаний выявилась критическая проблема:

Двигатель не выходил на полную мощность, а автоматическая коробка передач работала некорректно.

Условия / логика:

В чём была проблема

Анализ показал, что причина была не в механике, а в электронике автомобиля-донора.

Блок управления двигателем и блок управления АКПП ожидали данные о скорости вращения колёс. В серийном автомобиле эти данные формирует система ABS: она считывает сигналы с датчиков на колёсах и передаёт информацию в CAN-шину.

При отсутствии ожидаемых сообщений от ABS штатные блоки управления могут воспринимать это как неисправность связанных систем и переводить двигатель или АКПП в ограниченный режим работы.

Устанавливать штатную систему ABS на квадроцикл клиент не хотел.

Причины были понятны.

Во-первых, полноценная интеграция гидравлического блока ABS и четырёх колёсных датчиков требовала бы сложных механических и электрических доработок.

Во-вторых, квадроцикл должен был работать в тяжёлых условиях: грязь, вода, болото, ветки, камни, механические удары.

Датчики ABS, установленные в районе ступиц колёс, в такой эксплуатации становятся уязвимым элементом. Повреждение одного датчика могло бы привести к ошибкам в электронике и переходу системы в аварийный режим.

Поэтому задача была сформулирована иначе:

нужно было передать в CAN-шину корректные данные о скорости, чтобы блоки двигателя и АКПП воспринимали систему как исправную, но без установки штатных колёсных датчиков ABS.

 

Выбор решения

Для решения задачи было выбрано устройство АСУ CAN-реле.

https://nse-online.ru/catalog/asu-can-rele/ 

Оно подошло для проекта по нескольким причинам:

  • предназначено для работы в автомобильной электросети;
  • поддерживает питание в широком диапазоне 7–32 В;
  • имеет защиту от скачков напряжения, переполюсовки и электромагнитных помех;
  • построено на 32-битном микроконтроллере;
  • может обрабатывать входные сигналы в реальном времени;
  • поддерживает работу с CAN-шиной;
  • позволяет гибко настраивать алгоритмы под конкретную задачу;
  • может поставляться в исполнении, рассчитанном на эксплуатацию в тяжёлых условиях: при воздействии влаги, грязи, пыли, вибраций и перепадов температур.

Для внедорожной техники это особенно важно.
Электроника должна сохранять работоспособность не в лабораторных условиях, а на реальной машине, которая движется по грязи, воде, болотам и пересечённой местности.

По сути, АСУ CAN-реле должно было взять на себя часть функции отсутствующей системы ABS: сформировать корректные сообщения о скорости и передать их в CAN-шину.

 

Сбор исходных данных

Для корректной эмуляции нельзя было просто отправлять в CAN произвольные значения.

Нужно было понять, какие именно сообщения ожидают штатные блоки управления двигателя и коробки передач.

Клиент предоставил серийный автомобиль, аналогичный по электронной архитектуре тому, на базе которого создавался квадроцикл.

С помощью АСУ Программатора были записаны логи CAN-шины в разных режимах:

  • холостой ход;
  • начало движения;
  • разгон;
  • движение с постоянной скоростью;
  • торможение.

График из CAN-лога штатного автомобиля, на котором показаны обороты двигателя и скорость, передаваемая штатной системой ABS в CAN-шину.

CAN-лог штатного автомобиля:
зелёная линия — обороты двигателя;
оранжевая линия — скорость, передаваемая штатной системой ABS в CAN-шину.

В алгоритме использовались CAN-сообщения с идентификаторами:

  •  0x200;
  • 0x212;
  • 0x235;
  • 0x265;
  • 0x272;
  • 0x217;
  • 0x231.

При анализе CAN-трафика также было важно учитывать контрольную сумму CRC8 SAE J1850, которая используется в части сообщений. Если контрольная сумма рассчитана неверно, штатные блоки управления могут не принять сообщение как корректное.

Пример расчёта CRC и её применения показан ниже — в разделе формирования CAN-сообщений.

 

Как измерялась скорость

Чтобы не устанавливать датчики ABS на колёса, была выбрана другая точка измерения скорости — карданный вал.

На карданный вал установили самодельную 4-лопастную деталь, по форме напоминающую половину якоря генератора. Напротив неё разместили датчик Холла.

При вращении кардана лопасти проходят мимо датчика, и на вход АСУ CAN-реле поступают импульсы. По периоду между этими импульсами микроконтроллер рассчитывает скорость движения и формирует CAN-сообщения, которые ожидают блоки управления двигателя и АКПП.

Такое решение позволило отказаться от четырёх колёсных датчиков ABS. Вместо них используется одна точка измерения, связанная с вращением трансмиссии. Это упрощает конструкцию и снижает риск повреждения датчиков при эксплуатации на бездорожье.

 

Особенность сигнала и сглаживание скорости

На этапе испытаний стало заметно, что скорость, передаваемая АСУ CAN-реле в CAN-шину, получается не идеально ровной.

Причина была не в алгоритме работы АСУ CAN реле, а в механике.

Для формирования импульсов использовалась самодельная 4-лопастная деталь, установленная на карданный вал. Лопасти проходили мимо датчика Холла, и каждый проход формировал импульс.

Так как деталь была изготовлена не идеально, расстояния между лопастями немного отличались. Из-за этого даже при равномерном вращении карданного вала датчик Холла выдавал импульсы через немного разные интервалы времени.

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

По предварительной оценке, геометрическая неравномерность детали должна была давать небольшую погрешность — порядка 1–2%. Однако на тестовом графике выходной скорости колебания оказались заметно выше: в отдельных участках разброс достигал до 20% от текущего значения. Это показало, что на результат влияет не только геометрия лопастей, но и малое число импульсов на оборот, масштабирование периода в скорость и отсутствие сглаживания в тестовой версии.

Тестовая версия алгоритма. Зелёная линия — обороты двигателя, оранжевая — скорость, передаваемая АСУ CAN-реле в CAN-шину. Характерный «лес» на оранжевом графике появился из-за неравномерности самодельной 4-лопастной детали.

На увеличенном фрагменте оранжевого графика видно, что скорость изменяется не плавно, а ступенчато. При относительно стабильном режиме работы появляются повторяющиеся колебания вверх и вниз.

Такой характер сигнала указывает на периодическую механическую погрешность: лопасти проходят мимо датчика Холла не через одинаковые интервалы времени. После пересчёта периода в скорость эта погрешность проявляется как колебание значения, передаваемого в CAN-шину.

Важно, что на один оборот приходится всего четыре импульса. Поэтому даже небольшая геометрическая ошибка одной лопасти заметно влияет на измеряемый период. В такой схеме качество изготовления 4-лопастной детали напрямую влияет на стабильность выходного сигнала.

Увеличенный фрагмент выходной скорости. Оранжевая линия показывает ступенчатые периодические колебания, вызванные неравномерным расположением лопастей. При четырёх импульсах на оборот даже небольшая погрешность изготовления влияет на измеряемый период и проявляется как колебание скорости в CAN.

Чтобы уменьшить этот эффект, в алгоритм добавили фильтр скользящей средней.

АСУ CAN-реле сохраняет последние значения периода в кольцевом буфере. Затем алгоритм рассчитывает среднее по четырём измерениям и использует полученное значение для пересчёта скорости.

Такой способ сглаживает небольшие колебания, вызванные неидеальной геометрией лопастной детали, но при этом не делает систему слишком медленной.

В итоге применили более простой и быстрый вариант — алгоритм скользящего среднего. Это позволило сделать выходной график скорости ровнее и сохранить достаточно быструю реакцию системы на изменение скорости.

 

Измерение периода импульсов с датчика Холла

Измерение сигнала с датчика Холла реализовано через входной захват таймера.

Когда лопасть проходит мимо датчика, на вход АСУ CAN-реле поступает импульс. На нарастающем фронте сигнала микроконтроллер фиксирует значение таймера — то есть период между двумя соседними импульсами. После этого счётчик таймера обнуляется, и начинается измерение следующего периода.

После фиксации периода значение записывается в массив последних измерений. Затем рассчитывается среднее по четырём периодам, и уже это значение используется для дальнейшего расчёта скорости.

За счёт этого единичная погрешность от одной лопасти не полностью переносится в выходную скорость, а сглаживается соседними измерениями.

 

Расчёт скорости

После измерения периода микроконтроллер рассчитывает значение скорости.

Логика следующая:

  1. Датчик Холла формирует импульсы при вращении карданного вала.
  2. АСУ CAN-реле измеряет период между импульсами.
  3. По периоду рассчитывается скорость.
  4. Значение пересчитывается с учётом коэффициентов.
  5. Формируются CAN-кадры с данными о скорости, эмулирующие сообщения штатной системы ABS.
  6. CAN-сообщения передаются в шину, где их принимают блоки двигателя и АКПП.

В коде скорость формируется через переменную speedOut.

Также предусмотрен контроль пропадания сигнала: если в течение 5 секунд нет обновления, скорость сбрасывается в 0.

Фрагмент расчёта скорости:

Здесь видно две важные функции:

  • скорость рассчитывается по периоду входного сигнала;
  • при пропадании импульсов значение скорости сбрасывается.

Это важно, потому что блоки управления должны получать адекватные данные не только при движении, но и при остановке или потере сигнала.

 

Формирование CAN-сообщений и прикладной CRC

После расчёта скорости АСУ CAN-реле формирует CAN-кадры, которые имитируют сообщения штатной системы ABS.

 

В этом участке алгоритма показан пример формирования сообщений 0x212 и 0x235. В них передаётся рассчитанное значение скорости.

Сначала скорость записывается в первые два байта буфера:

Затем эти же данные дублируются в следующих байтах сообщения:

После этого в сообщение добавляется счётчик:

Последний байт поля данных CAN-сообщения, txBuf[7], занимает прикладная контрольная сумма CRC8 SAE J1850.

В данном случае речь идёт не о служебной CRC самого CAN-протокола, а о дополнительной контрольной сумме внутри 8-байтного поля данных сообщения.

CRC рассчитывается по первым семи байтам: с txBuf[0] по txBuf[6]. Результат записывается в восьмой байт поля данных — txBuf[7].

Это нужно для того, чтобы штатные электронные блоки воспринимали сформированное сообщение как корректное.

Полный фрагмент формирования и отправки сообщений скорости:

В этом фрагменте видно, что АСУ CAN-реле формирует не одно сообщение, а несколько связанных CAN-кадров:

  •  0x212 и 0x235 — сообщения с текущим значением скорости;
  •  0x265 и 0x272 — сообщения с накопительным значением, рассчитанным на основе скорости;
  • counter212 — счётчик сообщения;
  • CalculateCRC8(…) — расчёт прикладной контрольной суммы;
  • tx_CAN(…) — отправка сформированного кадра в CAN-шину.

Функция расчёта CRC выглядит так:

Эта функция последовательно проходит по данным сообщения, рассчитывает контрольную сумму и возвращает значение, которое затем записывается в последний байт поля данных CAN-сообщения.

Для отправки сформированного кадра используется функция tx_CAN():

В этой функции задаётся стандартный идентификатор CAN-сообщения, длина поля данных и выполняется отправка кадра в CAN-шину.

 

Результат по основной задаче

После установки и настройки АСУ CAN-реле блоки управления начали получать корректные данные о скорости.

В результате:

– аварийный режим был снят;

– двигатель начал выходить на полную мощность;

– автоматическая коробка передач стала работать в штатном режиме;

– квадроцикл получил ожидаемую динамику и тягу;

– удалось отказаться от установки уязвимых колёсных датчиков ABS.

Главная задача была решена: электроника автомобиля получила необходимые данные, а конструкция квадроцикла осталась простой и более подходящей для тяжёлых условий эксплуатации.

Дополнительная функция: сигнал для тахометра

После решения основной задачи функционал АСУ CAN-реле был расширен.

Штатная аналоговая приборная панель квадроцикла не могла напрямую отображать обороты двигателя из CAN-шины. Поэтому была реализована дополнительная логика: АСУ CAN-реле считывает обороты двигателя из CAN и формирует частотный сигнал для тахометра.

Обороты двигателя брались из CAN-сообщения с идентификатором 0x147.

Фрагмент приёма CAN-сообщения:

Здесь АСУ CAN-реле принимает сообщение 0x147.

Значение оборотов берётся из байтов с индексами msgData[6] и msgData[7], то есть из 7-го и 8-го байтов поля данных CAN-сообщения.

После деления на 8 получается фактическое значение оборотов. Затем оно передаётся в функцию calcFrenc(), где рассчитывается частота выходного сигнала для аналогового тахометра.

Фрагмент расчёта частоты:

Частота для тахометра рассчитывается через таблицу значений с интерполяцией.

После этого таймер формирует прямоугольный сигнал с нужной частотой и коэффициентом заполнения 50%.

Частота сигнала соответствует расчётным оборотам двигателя, а заполнение 50% означает, что высокий и низкий уровни занимают одинаковую часть периода.

То есть устройство преобразует цифровые данные из CAN-шины в частотный сигнал, понятный аналоговой приборной панели.

Благодаря этому водитель получил корректное отображение оборотов двигателя.

 

Дополнительная функция: защита стартера

Также была реализована защита от повторного включения стартера при уже работающем двигателе.

Это важно, потому что случайное включение стартера на работающем двигателе может привести к повреждению бендикса, венца маховика или других элементов пусковой системы.

АСУ CAN-реле отслеживает состояние двигателя. Если обороты выше заданного порога, устройство разрывает цепь управления стартером.

В коде это реализовано через функцию defendStart: если значение выше порога, через 500 мс активируется выход, запрещающий включение стартера. Когда значение опускается ниже порога, блокировка снимается также с задержкой 500 мс.

Такая задержка нужна, чтобы исключить ложные срабатывания при кратковременных изменениях сигнала.

 

Итог

В этом проекте АСУ CAN-реле использовалось не как обычное реле, а как программируемый автомобильный контроллер.

Устройство решило сразу несколько задач:

– считало импульсы с датчика Холла, установленного напротив самодельной 4-лопастной детали на карданном валу;

– рассчитало скорость движения;

– сформировало CAN-сообщения с данными скорости, которые в штатной системе приходят от ABS;

– передало данные блокам двигателя и АКПП;

– позволило вывести двигатель и АКПП из ограниченного режима работы;

– сформировало частотный сигнал для тахометра;

– реализовало защиту стартера от ошибочного включения.

Отдельным преимуществом стало то, что решение можно реализовать в исполнении для жёстких условий эксплуатации. Это важно для внедорожной техники, где оборудование должно сохранять работоспособность при контакте с водой, грязью, пылью, вибрациями и перепадами температур.

Проект показал, что АСУ CAN-реле можно использовать для нестандартных задач автомобильной электроники, когда нужно связать механически доработанную технику со штатными электронными блоками управления.

В результате квадроцикл сохранил простую и надёжную конструкцию, получил необходимые данные в CAN-шине и смог работать так, как было задумано изначально.

ОБРАТНАЯ СВЯЗЬ

Не нашли свою задачу — опишите, предложим решение

Свяжитесь с нами и мы поможем найти подходящее решение!

    Я даю согласие на обработку своих персональных данных