Температура вариатора и любая другая информация на дисплее приборной панели.

Это новая версия проекта для отображения температуры масла в вариаторе, информации от датчиков давления в шинах, данных от камеры распознавания дорожных знаков и любой другой информации на дисплее приборной панели. Данная версия предназначена для приборных панелей с цветным дисплеем (Lancer X, ASX, Outlander XL). Я долго не мог решиться на изготовление, так как предыдущий проект для монохромных экранов исправно работает, а новый сильно сложнее. Тем не менее, проект был запущен, а его реализация растянулась почти на два года.

Проект

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

Железо

Основное отличие — это, разумеется, сам дисплей и его интерфейс. Экран монохромных панелей управляется 8-битной параллельной шиной: 8 линий данных, тактовый сигнал, сигнал выбора чипа, 1 бит адреса, направление данных и сброс. А цветной подключён по RGB666 и требует уже 26 сигнальных линий для управления. Дисплей имеет разрешение 240 на 320 точек, с глубиной цвета 18 бит, поэтому и экранный буфер стал требовать заметно больше памяти. Панель отрисовывает кадры 60 раз в секунду и при тактовой частоте сигнала 6 МГц, между окончанием одного кадра и началом следующего остается всего 50 микросекунд (если игнорировать служебную информацию, то можно увеличить окно до 0.0037 секунды). Все это повлекло замену чипа ПЛИС (программируемая логическая интегральная схема), микроконтроллера, а также добавление внешней оперативной и флэш памяти. А это в свою очередь усложнило печатную плату.

Для обработки сигнала я выбрал микросхему все той же Lattice, но другого класса — LFE5U-25F-6BG256I. Она имеет достаточное количество портов для управления дисплеем, оперативной памятью и коммуникации с микроконтроллером. Микроконтроллер тоже пришлось заменить на более производительный STM32F412 с поддержкой LTDC и QuadSPI. Оперативная память была выбрана объемом 256 Мбит. Этого вполне достаточно для такого проекта.

Частота работы оперативной памяти планировалась около 70МГц, что требует выравнивания длины дорожек. А выбранная ПЛИС имеет корпус BGA256. Обычно все это означает увеличение стэка до 8 и более слоёв меди. Но так как я использовал не все порты микросхемы, то уложился в 6.

Плата имеет два порта для подключения кан-шины: один из них соединен с сегментом приборной панели (83.3 кбит/с), а второй подключен к шлюзу, который коммутирует данные между высокоскоростным сегментом кан-шины автомобиля (500 кбит/с), сегментом с камерой распознавания знаков, системой мониторинга давления в шинах и др. Также в контроллере предусмотрена цепь для взаимодействия с кнопкой приборной панели «INFO».

Крепёж платы, как и на предыдущей версии, совместил с крепежом самого дисплея. Но цветной дисплей имеет более короткий шлейф подключения и не достаёт до разъёма на адаптере. Поэтому пришлось подключить его через удлинитель. Для этого я использовал специальный двухсторонний разъём для шлейфов на 50 контактов, так как версии на 41 контакт не нашлось. Длина шлейфов была выбрана с запасом для удобства отладки. При этом удалось разместить их аккуратно, свернув лишнюю часть.

Алгоритм работы

Общий алгоритм работы устройства довольно прост: данные от платы приборной панели поступают на вход адаптера, анализируются и записываются в видеобуфер, расположенный во внешней оперативной памяти. Микроконтроллер формирует спрайт для наложения графики и тоже отправляет его в оперативную память. ПЛИС совмещает все видеобуферы в итоговую картинку и транслирует ее на дисплей. При этом, у каждого буфера есть пара для чётных и нечётных кадров. Пока один из них используется для отрисовки, второй заполнятся новыми данными, после чего они меняются ролями.

ПЛИС

Главный тактовый сигнал подается от микроконтроллера и составляет 12.5 МГц. С помощью PLL формируются тактовые сигналы для модулей проекта: 69.44 МГц для ядра, модуля работы с оперативной памятью и для модуля приема данных от приборной панели, 8 МГц для модуля работы с дисплеем и еще один 69.44 МГц, но со сдвигом фазы, для тактирования самой микросхемы оперативной памяти.

Большой объем временных графических данных хранится во внешней оперативной памяти. Для этой микросхемы необходим свой тактовый сигнал. Чтобы гарантировать достоверность данных, этот тактовый сигнал имеет сдвиг относительно работы модуля. Фазовое смещение нужно для того, чтобы успели установиться сигналы данных, адреса и контроля, к моменту появления фронта тактового сигнала. Сдвиг рассчитывается исходя из технических параметров: частоты работы, продолжительности нарастания переднего фронта, временных характеристик микросхем и параметров самой схемы. Существует два подхода для вычисления смещения фазы. Первый способ подразумевает расчет, основываясь на временных характеристиках микросхем и печатной платы; второй — постепенную корректировку значения взятого наугад.

Упрощенная схема работы FPGA выглядит так:

Данные от приборной панели попадают на вход модуля pcb_controller: тактовый сигнал, сигналы горизонтальной и вертикальной синхронизации, сигнал валидности данных и, собственно, изображение в формате RGB666. Модуль анализирует картинку, преобразует 18-битный поток RGB666 в 16-битный и передает полученный кадр через буфер обмена в CacheController. Так как приборная панель не использует полную палитру дисплея, оказалось возможным отбросить два бита красного цвета R0 и R1 без потери качества (на самом деле, можно сократить ширину потока без потери качества до 13 бит). Если текущее изображение является информацией о суточном пробеге «TRIP B», то кадр помечается особым флагом. На выходе у этого модуля получаются тактовый сигнал для буфера обмена, управляющий сигнал записи в буфер, асинхронная метка окончания кадра (используется как сигнал, что пора читать новый кадр из FIFO), информация о типе кадра и само изображение, но уже в 16-битном формате. Также в видеоданные записываются метки начала и окончания кадра.

Основной модуль CacheController (под основным модулем я понимаю не верхний модуль, а ядро проекта) занимается синхронизацией данных от двух клоковых доменов: от платы приборной панели и от микроконтроллера. А также управляет оперативной памятью и выводом на дисплей.

Передача данных между модулями происходит через буферы FIFO. Графические данные для дисплея хранятся во внешней оперативной памяти. Для исходных кадров в оперативке выделено две области: для четных и нечетных. Так же сделано и для графики, полученной от микроконтроллера.

Если для текущего изображения требуется модификация, модуль выдает сигнал микроконтроллеру «overlay_request». На этот запрос микроконтроллер формирует спрайт и передает его через буфер обмена. В качестве этой информации отображается температура двигателя, вариатора и отрисованные дорожные знаки. Также микроконтроллер может отправить спрайт с высшим приоритетом отрисовки, который отобразится на экране вне зависимости от текущего изображения. Эта возможность используется для отображения давления и температуры в шинах, а также при предупреждении RCTA «Rear cross traffic!» («Движение сзади!»).

Графика

Чтобы графика гармонично выглядела на экране, я использовал шрифт для цифр из приборной панели. Также нарисовал спрайты для дорожных знаков и еще один набор цифр для них. Текстовые спрайты я отрисовал вручную: температура охлаждающей жидкости двигателя, температура масла в вариаторе, средний расход (в автоматическом и в ручном режиме подсчета), потраченный объем топлива за поездку.

Данные скомбинированы в несколько наборов, которые можно выбирать удержанием кнопки «INFO». Цифры расположил с тем же отступом, что и у значения уличной температуры. От отображения единиц измерения сначала отказался, чтобы визуально не перегружать картинку. Но потом, все же, дорисовал их возле названия параметра.

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

Данные давления и температуры можно вызвать нажатием отдельной кнопки TPMS.

При первом нажатии отображается давление, при повторном — температура.

Информацию от камеры распознавания дорожных знаков решил отображать чуть выше. Сначала отрисовывал знаки по центру, но потом сместил их в левый край экрана. Так как у меня реализована штатная функция «Эко-режим», пришлось скопировать и значок «ECO», который попадает в зону перерисовки.

Также нарисовал предупреждение системы RCTA.

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

Прочее. Кнопка «INFO».

Приборная панель различает короткие и долгие нажатия кнопки, поэтому появилась задача следить за продолжительностью нажатия кнопки и имитировать любое из них. А также заменять при необходимости короткое нажатие на долгое (продолжая удерживать низкий уровень на линии), но при этом и отслеживать физическое состояние кнопки. Это легко реализуемо при внедрении в разрыв управляющей цепи: с одной стороны контролируем состояние кнопки, с другой управляем линией как требуют условия в данный момент. Но задача усложняется при параллельном подключении, не разрывая управляющую цепь. В этом случае, при имитации нажатия нет возможности узнать, в каком состоянии действительно находится кнопка в данный момент — нажата или отпущена.

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

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

Второе решение — понижать уровень на линии не до нуля, но до достаточно низкого значения. Такого, чтобы микроконтроллер приборной панели воспринял его как нажатие кнопки. А другим входом с АЦП следить за уровнем напряжения в цепи. Если он упадет еще ниже, значит кнопка нажата пользователем.

ОБРАТНЫЙ ЗВОНОК

Укажите контактные данные, данные об автомобиле и мы свяжемся с Вами для записи или консультации

Отправляя заявку вы даете согласие с политикой конфиденциальности сайта