Pull to refresh

Учим Ладу Весту петь пионерским голосом

Level of difficultyMedium
Reading time11 min
Views8.8K

В 2020 году я решил перенести электронный темброблок из Pioneer DEH-P4500R в прибор под номером 8450007949 (кнопочная мультимедийная система Весты). Цель - заставить второе звучать как первое - достигнута за один месяц. Не обошлось без пайки микросхем и реверс-инжиниринга.

Мотивация

Звучание

С инженерной точки зрения звучание электронного аудиоустройства определяется встроенными в него "обработчиками". Ещё крайне сильно влияет акустическая часть всей системы (колонки+помещение) и качество студийной работы над музыкой. Даже так: обработчики позволяют немного скомпенсировать недостатки акустики и студийной работы. Но эту обширную тему мы не рассматриваем, сосредоточимся на конкретном таком обработчике - темброблоке/эквалайзере автомобильной медиасистемы. Также я не стану погружаться в "аудиофильскую" точку зрения, где любая обработка звука презирается и люди перебирают линейные компоненты за пределами слуховых возможностей - мне не близка эта тема.

Меня устраивал звук старого CD-ресивера Pioneer с подключенным к нему блютус-приёмником, и проапргрейдить я решительно хотел не звук, а пользовательский интерфейс. И чтобы с кнопками, и чтобы со 100% бесшовной интеграцией.

Тактильность и немодальность

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

Перепробовав тач-скрины, я больше не рассматривал "калькулятор" как низкую позицию, которую обязательно нужно проапгрейдить на что-то тачёвое и/или качёвое. Для меня это наоборот более эргономичный вариант переключать музыку/радио и отвечать/делать звонки. Кнопки всегда на своих местах, есть большая крутилка громкости и так далее. Есть даже шорткаты быстрого набора для звонков через блютус (нажал "трубка" - "1" - "трубка" и позвонил жене, например), и это даже проще голосового управления; гик-фактор++. Да, нельзя что-то поустанавливать и попрошивать (гик-фактор--), но мне и не нужен ещё один цифровой тамагочи, поедающий интернет.

Робкие шаги

Разочаровавшись в звучании "калькулятора", но влюбившись в его интерфейс, я пытался звук с него перенаправить на Pioneer, спрятанный где-нибудь в бардачке. Помимо общей убогости это упиралось в некорректно работающую тон-компенсацию (если регулировать громкость на штатной ММС) либо в необходимость выносить панельку Пионера и крутить громкость на ней - что добавляло убогости.

Однажды я решил, что способен на более тесную интеграцию. Ну или как минимум это будет веселее, чем идти проторенными тропами. Из практической подготовки я умел держать паяльник и даже перепаивать им микрокнопки в мышках или встраивать готовый LED-кит в старые ЖК-мониторы. Мультиметра я тоже не боялся, как и принципиальных схем. Но требовался другой уровень: впаивание микросхем, измерения, реверс-инжиниринг, работа с логическим анализатором.

В конце концов, можно было вообще ничего не делать и ездить дальше с древним CD-ресивером, который используется только как усилитель с блютусом (не диски же на нём слушать, ей богу). Но мне он не нравился внешне, да и бренчал старыми бесполезными и мелкими кнопками даже на ровном асфальте.

Другой телефон?

Я в курсе, что звук можно подкрутить и на смартфоне. Но опять же, это не даст корректной тон-компенсации, в которую я верю (она зависит от главного регулятора громкости); а также всё будет вечно не настроено если подключен будет не мой телефон... или вовсе не телефон.

Другая машина?

Я пользуюсь машиной пару раз в неделю. Чуть чаще пользовался тогда в 2020-м. Меня устраивает надёжный седанчик, который не отсвечивает в семейном бюджете. Сейчас бы я и вовсе не стал заморачиваться с подобными доработками, но тогда мне было интересно поковыряться в электронике (поэтому кроме сухого экшена будут ещё и рассуждения про то, как я до чего-то "допёр").

Сравнение снаружи

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

У Пионера множество регулируемых фильтров. Полосы эквалайзера можно двигать влево-вправо и менять их добротность - это можно назвать параметрическим эквалайзером. ВЧ- и НЧ- отрезалки позволяют организовать регулируемый кроссовер между основными каналами и сабвуфером. Настраиваемая тонкомпенсация позволяет уставливать свою зависимость между позицией регулятора громкости и приподнятием НЧ/ВЧ (компенсация нелинейности слуха в зависимости от громкости).

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

А вот у калькулятора Весты гибкостью не пахнет. Тонкомпенсация хоть и плавная (как должна быть), но накидывает только низкие частоты, и установить свою зависимость от громкости нельзя; на малой громкости высокие частоты от этого теряются. Регулировки НЧ/ВЧ только плюс-минус по уровню без изменения частоты.

То есть у Пионера несравнимо больше возможностей скомпенсировать тембральный баланс акустики, музыки, да и вообще настроить звук под себя. Конечно, всё это пораскидано по нескольким разным менюшкам и где-то приправлено лёгким маркетингом (например, кнопка EQ-EX просто вызывает менюшку первой и последней полос эквалайзера). В штатной ММС подкручивать практически нечего.

Сравнение внутри

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

Pioneer DEH-P4500R

На Пионер нагугливается "service manual" с блочными и принципиальными схемами. Если его поизучать и "погулять" по стрелочкам сигнала, то обнаруживается компонент PML009A, обозначенный как "electronic volume/source selector". Про другие его назначения не сказано, но в любом случае на нём сходятся источники изначально разного рода - с ЦАПа проигрывателя дисков, с линейного входа, с радио. И так как настройки одинаково применимы ко всем этим источникам, то логично, что обработка происходит в некотором общем узле. После него можно найти только микросхему усилителя, которая не влияет на звучание в нормальных диапазонах своей мощности.

Документация на эту микросхему почти не находится кроме блок-схемы, по которой тоже можно сделать полезные выводы. Здесь и некоторый "digital block", и упоминания разных фильтров (Treble, Middle, Bass, Loudness), и наименования всех выводов. Значит, это точно нужный нам компонент.

На плате PML009A выглядит примерно вот так:

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

ИТЭЛМА 8450007949

На "калькулятор" полной схемы не находится. Поэтому вскрываем и прогугливаем что там есть, быстро натыкаясь на TDA7303.

TDA7303 в тушке кнопочной ММС. Подпаянные провода - спойлер дальнейших изысканий.
TDA7303 в тушке кнопочной ММС. Подпаянные провода - спойлер дальнейших изысканий.

Даташит на TDA7303 рассказывает нам, что функция у этой микрухи такая же, как у PML009A - переключение между источниками, регулировка тембра, громкости, баланса и тонкомпенсация. Управление по I2C, все команды расписаны.

План замены

Итак. Очевидно, что нам нужно заменить TDA7303 на PML009A. Но есть препятствия:

  • разные корпуса;

  • протокол управления PML009A неизвестен, как и её характеристики;

  • околонулевой опыт с цифровыми интерфейсами на таком низком уровне; нулевой опыт изготовления плат.

Есть, впрочем, и "зацепки" на каждый пункт:

  • Кое-кто уже менял аудиопроцессор в ММС Лады: https://www.drive2.ru/l/531767529853419742/ Пускай это другой задокументированный процессор, но это по большому счёту то, что делаю я.

  • Кое-кто много лет назад уже разбирался с командами PML009A: https://forum.vegalab.ru/showthread.php?t=17825 Человек даже ответил мне и выслал дополнительные файлы спустя столько лет. Но разобрался он далеко не со всем, что было нужно мне, поэтому его артефакты пригодились мне больше как подтверждение на начальных этапах.

  • Глаза боятся - руки делают.

Дополнительно я попытался найти похожие на PML009A общедоступные аналоги. Не сами же Pioneer эти микрухи делали. По крайней мере я не нашёл, чтобы у них были полностью свои микросхемы. И я таки нагугливал что-то близкое внешне: тот же корпус, похожие выводы, но полного соответствия не было. А цифровой интерфейс похожий не встретился совсем.

Я набросал простейшую схему замены. То есть убираем TDA7303, на её место "ставим" PML009A, а в разрез цифрового интерфейса ставим ардуину, которая будет переводить команды.

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

Подсмотреть не ломая

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

К PML009A подцепился лакированными проводками из обмотки реле
К PML009A подцепился лакированными проводками из обмотки реле
С TDA7303 уже вычитал про тоненький МГТФ 0,3 и купил его в радиодеталях
С TDA7303 уже вычитал про тоненький МГТФ 0,3 и купил его в радиодеталях

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

Реверс-инжиниринг

На PML009A я удостоверился, что интерфейс действительно SPI (в противовес I2C на TDA7303) и что действительно изменение любого параметра аудио приводит к 17-байтной посылке. При включении устройства тоже идёт такая посылка. И 17 байт, про которые говорил другой чел, ковырявший эту микросхему, выглядит примерно достаточно чтобы закодировать все параметры - я не ошибался.

Однако в изысканиях предшественника было много пробелов - он отыскал самые основные параметры типа громкости и источника, а остальное оставил как было в перехваченном трафике. Мне этого было недостаточно, т.к. хотелось реализовать звучание Пионера один-в-один. Без этого вся затея теряла конечный смысл, оставляя лишь побочный фан.

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

На снимке: ардуина в роли логического анализатора, панель магнитолы на самодельном удлинителе
На снимке: ардуина в роли логического анализатора, панель магнитолы на самодельном удлинителе
На снимке: кастомный логгер (консольное приложение), подсвечивающий меняющиеся биты. Биты транслирует на комп ардуино с примитивным скетчем.
На снимке: кастомный логгер (консольное приложение), подсвечивающий меняющиеся биты. Биты транслирует на комп ардуино с примитивным скетчем.

Некоторые закономерности оказались непростыми. Например, на TDA7303 тонкомпенсация на уровне интерфейса это просто вкл/выкл, и она уже сама регулирует как надо (или как не надо) в зависимости от выбранной громкости. А PML009A сама такого не делает, отдавая глубину и режим тонкомпенсации на откуп контроллеру. Но раздобыть/проанализировать прошивку контроллера уж точно не в моих силах, поэтому я методично крутил параметры, составляя всякие графики.

Ещё одну арифметическую закономерность пришлось выводить для управления сабвуфером. Я решил привязать уровень сабвуфера к настройке "НЧ" вестовской головы. Она имеет диапазон от -7 до +7, в то время как в оригинале (в пионере) сабвуфер настраивается от -6 до +6. Получилась длинная формула зависимости сабвуферного выхода от общего уровня громкости, опять же полностью повторяющая поведение в Пионере:

Сложности возникли и с достоверной регулировкой громкости. TDA7303 управляется командами по 1 байту. Например, громкость управляется значениями от 0 до 63 (шаги по 1,25 дБ), фейдер левого переднего канала — от 128 до 159 и т.д., всё это можно посмотреть в даташите.

В магнитоле Весты есть 50 уровней громкости, которые размечены по шкале 0-63 микросхемы TDA7303. Размечены они с одной стороны по уму (имитируется экспоненциальная регулировка), но с другой стороны есть забавный баг: например, уровни 36 и 37 не отличаются (подаётся одна и та же команда громкости на микросхему). То же самое с другими уровнями 38=39=40 (значение 3), 41=42=43 (значение 2), 44=45=46 (значение 1) и 47=48=49=50 (значение 0). Другими словами, верхний диапазон регулировки у Весты на удивление бесполезный; можно было сделать 40 ступеней вместо 50, тогда бы верхние ступени не "склеились".

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

В отличие от TDA7303 у PML009A нет полного диапазона регулировки громкости одним параметром. Вместо этого у неё гораздо более глубокая поканальная регулировка (от 0 до -63 дБ, шаг 1 дБ) и неглубокая общая (от 0 до -31 дБ, шаг 1 дБ). В сумме это даёт бОльший и более детальный диапазон, чем у TDA, хоть и ценой сложного управления. При этом пионер имеет 63 ступени громкости в диапазоне примерно от -80 дБ до 0, тоже экспоненциального характера, но без багов как у Весты.

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

Разобраться с чувствительностью отдельных входов мне помогла блок-схема пионеровской микрухи, которую я приводил в начале. Например, в ней виден блок source gain adjuster. Пионеровская голова не предоставляет функций регулировки этого блока отдельно. Вместо этого значения зашиты для каждого источника. Экспериментальным путём я установил, что средние 4 бита нулевого байта управляют как раз этим блоком. Дальше используя смартфон в качестве синусоидального генератора я сопоставил напряжения, которые подаются на микросхемы усилителей в каждой голове, и подобрал соответствующее значение source gain adjuster. Другими словами, я нашёл параметр и подобрал нужную чувствительность входов.

В конечном счёте на руках у меня была, во-первых, карта параметров...

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

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

К сожалению, остался только такой скриншот
К сожалению, остался только такой скриншот

Управляющая программа

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

Код скетча здесь: https://pastebin.com/KHtCZFjg Он довольно простой по структуре и по принципу работы. В начале идут таблицы, которые я вывел из поведения контроллера Пионера и всякий скучняк типа номеров выводов и инициализации обмена. Дальше в loop мы проверяем, не записывалось ли что-то в последние несколько миллисекунд из I2C, и если записывалось, то пересчитываем 17-байтный пакет и шлём его на PML009A. Ограничение частоты пересчёта позволяет получить сразу несколько единичных команд, предназначенных для TDA7303 и потом за один раз отправить всё на пионеровский темброблок. Это и есть паттерн команд контроллера Весты TDAшке: сообщить несколько параметров в течение нескольких миллисекунд. Я выбрал частоту буферизации команд в 30 мс - это в реальном времени на уровне восприятия (например, если крутить ручку громкости, то задержка не чувствуется), но при этом с достаточным запасом времени чтобы контроллер "калькулятора" успел сказать всё, что хотел. Как будто TDA общается отдельными словами, а PML - целыми предложениями. Ещё там есть элемент персистентности: для хранения настроек используется EEPROM.

Шараш-монтаж

Оставался ещё вопрос чисто физической замены одного корпуса на другой. Я купил простенькую паяльную станцию с феном и потренировался в пайке на электронном хламе, который раздобыл: старая мышка, другая ненужная магнитола и т.п. Дальше я "перекрестился" и выпаял сначала "TDAшку", а потом и "PMLку". Вторая была нужнее и дороже. Тут уже чистый экшен без объяснений.

Как я обошёл вопрос с изготовлением платы под PML009A? Да очень просто, хватило макетки:

На неё я трясущимися руками запаял ценный элемент и минимально необходимую обвязку.

Потом припаял это на место TDAшки.

Нужно было это как-то закрепить. Я не любитель клея и прочих липкостей. Поэтому обмерил платы и задизайнил дополнительную платформу:

Конечный вариант почище без проволоки и изоленты, но фоток не осталось. Перенесённый конденсатор питания (мешался) уже на своём месте, а мини-ардуино ещё нет.
Конечный вариант почище без проволоки и изоленты, но фоток не осталось. Перенесённый конденсатор питания (мешался) уже на своём месте, а мини-ардуино ещё нет.

Примерка. Места - вагон!

Врезал и новые выходы на сабвуфер:

Результат

Для первоначальной настройки я запилил ещё и временный пульт, который полностью воспроизводил менюшки Пионера по части аудио-настроек (код).

Мне удалось получить эстетику, функционал и стабильность штатного ГУ с совершенно иным звучанием. При помощи ВЧ-фильтра и отдельного выхода на сабвуфер я разгрузил дверные динамики и усилитель головы. В результате его не требуется менять, по крайней мере для моих целей. Параметрическим эквалайзером я слегка прижал бубнёж около 160 Гц, а тонкомпенсацией исправил звук на малой громкости. Теперь звук меня устраивает и совершенно не отличается от того, что было на старом пионере. Вживую всё выглядело как-то так:

Планировалось (планируется?) дополнить блютус-модулем и приложением на телефон для настройки, но по факту я уже четыре года езжу с фиксированными настройками. Регулируется только уровень сабвуфера из меню "НЧ" калькулятора. Всё это стабильно работает как в +35, так и в -35, настраивать ничего не хочется, возвращаться к этому уже нет времени. В любом случае получена тонна самодельского фана и опыта в переделывании электроники.

занудство

Всё это я описывал на одном автомобильном ресурсе. Специально для Хабра подготовлен переработанный вариант.

Tags:
Hubs:
Total votes 61: ↑61 and ↓0+61
Comments15

Articles