leoniv.diod.club
|
Technics RS-B965 upgrade Добавление ИК ДУ
![]() Кассетная дека Technics RS-B965 не имеет пульта дистанционного управления, что является заметным недостатком. Очень похожие на нее деки Technics RS-B900 и Panasonic RS-B965 имеют дистанционное управление. Изучение плат деки Technics RS-B965 показало, что в ней тоже предусмотрена установка фотоприемника. Но это, скорее, место для модуля фотоприемника в отдельном экране и с печатной платой внутри, но не для современного интегрального фотоприемника. Расположение выводов совершенно иное. Пришлось в плате просверлить три отверстия и расклепать в них пистоны. Интегральный фотоприемник нужно поднять над платой, для чего из белой жести была изготовлена скоба, затем впаяна в штатные отверстия печатной платы. ![]() С другой стороны платы понадобились всего две коротких перемычки. В штатные отверстия платы, которые теперь оставались пустыми, впаял конденсатор 100 мкФ параллельно питанию фотоприемника. Известный факт, что эти приемники очень чувствительны к помехам по питанию. Причем шунтирование их керамикой 0.1 мкФ обычно не приносит результата. Внутри фотоприемника находится усилитель с относительно узкой полосой пропускания, которая лежит в килогерцовом диапазоне. Именно в этом диапазоне повышена чувствительность к помехам. Соответственно, шунтирующая емкость должна иметь низкий импеданс на сравнительно низких частотах, т.е. должна быть большой. ![]() Чтобы сигнал фотоприемника поступал на процессор, на основной плате деки надо убрать перемычку, заземляющую этот сигнал. А также установить перемычку, подключающую этот сигнал на ножку процессора 41 (REMOCOM). Эта ножка штатно заземлена через резистор 10 кОм, но на плате есть отверстия для установки этого резистора на AVCC в качестве подтягивающего. Все эти переделки я сделал и попробовал управление с пульта RAK-RS305W. Ничего не заработало, вероятно, прошивка штатного процессора пульт не поддерживает. ![]() ![]() Было принято решение установить свой декодер ДУ и сделать свой пульт. Это, возможно, даже к лучшему, так как оригинальный пульт RAK-RS305W оказался в реальности огромным, кнопки на нем разбросаны хаотично, да и самих кнопок там очень мало. Из 21 кнопки на передней панели деки пульт имеет лишь 13 кнопок. Оформление пульта совсем не похоже на оформление передней панели деки, не считая слова «Technics», выполненного фирменным шрифтом. Первым делом надо добавить окно для фотоприемника в передней панели. Размеры и положение окна решил подсмотреть на фотографии передней панели деки Technics RS-B900. Расположение окна вызвало некотрое недоумение – в отличие от кнопок, что находятся выше, оно не выровнено по левому краю. Единственное предположение – окно находится на оси кнопки «Direct CD», но несколько шире ее. ![]() Сначала надо вырезать окно в алюминиевой накладке передней панели. ![]() Затем надо изготовить стекло окна фотоприемника. Можно взять красное или дымчатое оргстекло. В данном случае удалось подобрать стекло от какого-то пульта ДУ, оно сразу имело бортики по краям. ![]() Внутри панели пришлось чуть подрезать пластмассовые вставки, после чего стекло идеально подошло. ![]() В качестве основы для пульта был найден пульт от CD-плейера Pioneer, который подходил по форме, размерам и количеству кнопок. Он не имел «креста» из кнопок для навигации по меню, как большинство современных пультов, что было бы здесь не к месту. Пульт построен на микроконтроллере NEC, скорее всего, имеет такой же и протокол. Его можно использовать без переделок, декодер протокола NEC можно взять, например, из проекта ДУ для магнитофона "Электроника-004". Но здесь я решил перевести пульт на привычный протокол RC-5. Для пульта была изготовлена небольшая платка-переходник, которая позволила на место родной микросхемы установить SAA3010. ![]() На основной плате пульта почти ничего менять не пришлось, только заменил керамический резонатор (для RC-5 нужен 432 кГц), выпаял конденсаторы резонатора и заземлил его второй вывод. ![]() ![]() Осталось назначить кнопкам функции и нарисовать этикетку пульта. Поскольку пульт свой, то можно продублировать все кнопки, которые есть на передней панели деки, а не только те, которые имеет фирменный пульт. Более того, можно устранить некоторые проблемы эргономики системы управления. Очень крупным неудобством является то, что для перемотки и автопоиска используются одни и те же кнопки. Вполне типичная ситуация – из режима "воспроизведение" надо перейти в режим "перемотка". Сделать это можно только через режим "стоп". Постоянно забываю его нажимать, что приводит к включению поиска. Это можно легко исправить на пульте ДУ. Там нужно сделать две пары кнопок: отдельная пара для перемоток, отдельная – для поиска. При получении команды "перемотка" сначала нужно имитировать нажатие кнопки "стоп", а затем – "перемотка". Для команды "поиск" сначала имитируется нажатие кнопки "воспроизведение", в результате поиск можно будет запустить из любого режима. Всего пульт имеет 24 кнопки, что позволяет дублировать 21 кнопку передней панели деки, выделить 2 кнопки для автопоиска, и в запасе остается 1 незадействованная кнопка. Назначение функций кнопок на пульте ДУ делается из соображений наилучшей эргономики. Technics RS-B965 – очень красивая дека. Расположение элементов на передней панели можно назвать идеальным, а типографика передней панели – вообще уникальна. Почти все надписи выполнены строчными буквами, такое встречается очень редко. Пульт, естественно, должен максимально повторять стиль передней панели деки, включая шрифты. С этой точки зрения фирменный пульт RAK-RS305W неприятно удивил, его оформление не имеет ничего общего с оформлением передней панели деки. Все надписи на пульте выполнены заглавными буквами, расположение кнопок не является регулярным, но при этом и не напоминает расположение кнопок на деке. Для исследования примененных на передней панели деки шрифтов, я сфотографировал панель с помощью объектива Nikkor 85mm f/1.8D, который имеет очень малые геометрические искажения (SMIA TV distortion 0.03%). Далее открыл картинку в Corel Draw для подбора шрифтов. На панели использован шрифт семейства Sans Serif, немного похожий на Arial. Хотя есть и отличия. Наиболее подходящим явился шрифт Swis721BT. ![]() Векторный логотип «Technics» был найден в Интернете и очень хорошо совпал с нанесенным на панель. Логотип «dbx» также был найден в векторном виде. Примечательно, что шрифт меньшего размера на панели немного растянут по горизонтали (примерно на 9%). В принципе, читаемость шрифта при этом возрастает, что актуально при его малом размере. Сделали это дизайнеры Matsushita осознанно, или получилось случайно – неизвестно. ![]() Чуть подкорректировав интервал между словами, а в некоторых коротких надписях (например, обозначение перемотки вперед «ff») и между буквами, получилось очень хорошее соответствие с изображением передней панели. Найденный шрифт подходит для использования на этикетке пульта ДУ. ![]() Наклейка для пульта была заказана у рекламщиков. Использована черная печать на золотистой пленке с плоттерной резкой отверстий для кнопок. ![]() При установке декодера ДУ в аппараты, где его не предусмотрено, обычно используют множество ключей (например, 4066), которые просто замыкают контакты каждой из кнопок управления. Решение универсальное, работает как для клавиатуры с отдельными кнопками, так и со сканируемыми матрицами кнопок. Встраивание такого декодера нельзя назвать простой операцией. От него к кнопкам клавиатуры тянется множество проводов, что трудоемко в исполнении и сильно портит внутренний вид аппарата. В некоторых аппаратах применяют весьма оригинальный способ подключения кнопок управления, целью которого является экономия выводов микроконтроллера. Кнопки подключаются к длинному резисторному делителю, напряжение с которого подается на вход АЦП микроконтроллера. Чем более верхнюю точку делителя замыкает на землю кнопка, тем меньшее напряжение будет на входе АЦП. Такое решение не позволяет обрабатывать совместное нажатие нескольких кнопок. У кнопок появляется приоритет – при нажатии нескольких кнопок одновременно процессор всегда «видит» только ту кнопку, которая подключена к самому верхнему отводу делителя. Серьезным недостатком такого способа подключения кнопок является вероятность ложного срабатывания при окислении контактов в кнопках. Тогда вместо одной функции может включиться другая, чего никогда не бывает в случае цифрового опроса кнопок. Именно такой способ подключения кнопок используется в деке Technics RS-B965. Имеются два резисторных делителя с наборами кнопок, подключенные к двум входам АЦП управляющего микроконтроллера. ![]() Когда кнопки подключены к АЦП через резисторный делитель, декодер с аналоговыми ключами на выходе тоже может быть с успехом использован. Но данный способ подключения кнопок дает возможность значительно упростить декодер ДУ. Для того чтобы микроконтроллер деки распознал нажатие кнопки, на входе АЦП должно появится напряжение, попадающее в некоторые пределы, уникальные для каждой кнопки. Это напряжение не обязательно должно поступать с делителя кнопок. Оно может быть сформировано на плате декодера. Сделать это можно с помощью ЦАП, который есть в некоторых микроконтроллерах. Большого разрешения здесь не требуется, 8 бит будет более чем достаточно. К сожалению, точный алгоритм, с помощью которого процессором деки определяется нажатая кнопка, неизвестен. Как быстро должно нарастать напряжение на входе АЦП, чтобы не было промежуточных срабатываний, сказать трудно. Зато известно, что любая кнопка имеет дребезг, длящийся несколько миллисекунд. Алгоритм обязательно должен иметь защиту от дребезга. Это дает основания предположить, что нарастание порядка нескольких миллисекунд работу не нарушит. Самым очевидным вариантом является применение микроконтроллера, который имеет на борту два ЦАП (например, STM32F100). Но здесь требуется работа от напряжения питания 4.6 В, чего STM32 не допускают. Можно взять STM8, но ЦАПы есть только у микроконтроллеров с большими корпусами. В результате решил применить AVR, а напряжение формировать с помощью ШИМ. Идеально для этой задачи подходит ATtiny25 – миниатюрный 8-выводной корпус, два скоростных канала ШИМ, тактируемых от PLL. При разрядности 8 бит частота ШИМ получается 250 кГц. Этого более чем достаточно. ШИМ остается только отфильтровать и через буфер подать на тот вход процессора деки, куда подключены кнопки. В RS-B965 есть еще кнопка «REC AUTO MUTE», которая подключена к отдельному порту, но с этим разобраться просто, у декодера для нее тоже можно выделить отдельный порт микроконтроллера. К фильтрации ШИМ предъявляются противоречивые требования. С одной стороны, выходное напряжение должно нарастать как можно быстрее, иначе возможны промежуточные срабатывания. С другой стороны, пульсации должны быть минимальными, иначе алгоритм может не распознать нажатую кнопку. Выходное напряжение должно меняться в пределах от 0 (нажата самая верхняя кнопка делителя) до 3.22 В (нажата самая нижняя кнопка делителя). Причем, когда кнопки пульта ДУ отпущены, декодер не должен мешать работе внутренней клавиатуры деки. Поэтому он должен обеспечивать только втекающий ток, который позволит лишь понижать напряжение на входе АЦП. Как вариант, подойдет ОУ с одиночным транзистором на выходе. Транзистор лучше взять полевой, чтобы обеспечивались напряжения вблизи нуля. От ОУ требуется только rail-to-rail работа входов. Схему фильтра ШИМ лучше всего промоделировать в PSpice. ![]() Моделирование показывает, что с цепочкой C3R6 длительность перепада напряжения на выходе заметно меньше (красный график), чем без нее (зеленый график). Хотя общая задержка растет, но она в данном случае ни на что не влияет. ![]() Окончательная схема декодера ДУ приведена ниже. ![]() При разводке платы декодера нужно учесть конструктивные особенности деки. К счастью, все сигналы, необходимые для работы декодера, есть на разъеме CP5 платы клавиатуры. Разъем имеет шаг 2 мм, параллельно его контактам можно припаять еще один разъем с таки же шагом, а в него вставить плату декодера. В итоге внутри деки не появляется ни одного лишнего провода. ![]() На плате декодера единственным элементом, смонтированным в отверстия, является разъем. ![]() На фото платы видно, что резисторы R12, R13 были добавлены потом. Я упустил из виду момент начального включения платы. Пока процессор сброшен, его выходы находятся в высокоимпедансном состоянии. Конденсаторы фильтра ШИМ разряжены, что соответствует нулевому напряжению ШИМ. На выходе тоже устанавливается нулевое напряжение, а это соответствует нажатой кнопке. Правда, через короткое время процессор стартует и выставляет на выходах ШИМ высокий уровень, но все равно проскакивает короткий ноль. Проверка показала, что процессор деки на это никак не реагирует, но для красоты ошибку надо было устранить. Первое, что пришло на ум, это переключить конденсаторы фильтра C4 и C7 с земли на питание. Тогда их разряженное состояние будет соответствовать максимальному напряжению на выходе. Попробовал так переделать схему. На выходе все равно есть выброс, хотя не до нуля. Напряжение на выходе ОУ нарастает не мгновенно (тем более, при наличии конденсаторов C3, C6), если быстро зарядить C4 и C7, то на выходе выброса не будет. Никогда бы не подумал, что достаточно подтягивающих резисторов 47 кОм, чтобы выброс полностью исчез. На схему их добавил, ну а плату перерисовывать не стал, они довольно удобно запаялись. Внутри деки декодер ДУ трудно найти. На фото он отмечен стрелкой. ![]() Плата декодера видна лучше, если снять экраны. ![]() При желании плату декодера можно просто снять с разъема, при этом дека вернется к первозданному виду (не считая окна фотоприемника). ![]() Теперь можно перейти к программированию. Процессор декодера питается от того же напряжения, что и делитель кнопок. Фактически, стоит задача поделить это напряжение, или, другими словами, умножить его на некоторый коэффициент меньше единицы. Любой ЦАП, в том числе на основе ШИМ, является умножающим. Это не всегда отражают в названии: настоящие умножающие ЦАП допускают изменение опорного напряжения в широких пределах и с довольно высокой частотой. В данном случае надо умножать постоянное напряжение питания на некий код, ШИМ с этим справится. Для 8-разрядного ЦАП выходное напряжение V = Vref * code / 256, где code может меняться от 0 до 255. Из формулы видно, что максимальное выходное напряжение ЦАП не равно опорному, а ниже его на одну ступеньку. Это справедливо для ЦАП любой структуры. Именно с этим связано, например, поведение ШИМ, которое не всем нравится: при нулевом коде на выходе все время ноль, а при максимальном – напряжение питания, но с короткими «иголками» в ноль. Действительно, для 8-разрядного ШИМ период поделен на 256 интервалов. При коде 0 ни один интервал не равен единице. При коде 1 один интервал единичный, при коде 2 – два интервала. При максимальном коде 255 единичных интервалов, но один интервал останется нулевым. Чтобы не утруждать себя измерением напряжений, которые получаются при нажатии каждой из кнопок, я просто взял номиналы резисторов делителя с принципиальной схемы. А дальше специальный макрос на их основе вычисляет код ШИМ. //Номиналы резисторов в делителях кнопок, кОм: #define R1 10.0 #define R2 0.82 #define R3 1.0 #define R4 1.2 #define R5 1.5 #define R6 1.8 #define R7 2.2 #define R8 3.3 #define R9 4.7 #define R10 6.8 #define R11 12.0 //Преобразование номиналов делителя в код PWM: #define R2CODE(x, y) ((char)(MAX_PWM * (y) / ((x) + (y)) + 0.5)) //Коды PWM для кнопок управления: //Выход OUT1 (pin 6): #define KEY_CRESET R2CODE(R1, 0) #define KEY_CMODE R2CODE(R1, R2) #define KEY_RANGE R2CODE(R1, R2+R3) #define KEY_MREPEAT R2CODE(R1, R2+R3+R4) #define KEY_MSTOP R2CODE(R1, R2+R3+R4+R5) #define KEY_OPEN R2CODE(R1, R2+R3+R4+R5+R6+R7) #define KEY_MONITOR R2CODE(R1, R2+R3+R4+R5+R6+R7+R8) #define KEY_DIRECT R2CODE(R1, R2+R3+R4+R5+R6+R7+R8+R9) #define KEY_CAL R2CODE(R1, R2+R3+R4+R5+R6+R7+R8+R9+R10) #define KEY_APRS R2CODE(R1, R2+R3+R4+R5+R6+R7+R8+R9+R10+R11) //Выход OUT2 (pin 9): #define KEY_STOP R2CODE(R1, 0) #define KEY_FF R2CODE(R1, R2) #define KEY_REW R2CODE(R1, R2+R3) #define KEY_PLAY R2CODE(R1, R2+R3+R4) #define KEY_REC R2CODE(R1, R2+R3+R4+R5) #define KEY_PAUSE R2CODE(R1, R2+R3+R4+R5+R6) #define KEY_DBX R2CODE(R1, R2+R3+R4+R5+R6+R7) #define KEY_DOLBYC R2CODE(R1, R2+R3+R4+R5+R6+R7+R8) #define KEY_DOLBYB R2CODE(R1, R2+R3+R4+R5+R6+R7+R8+R9) #define KEY_MPX R2CODE(R1, R2+R3+R4+R5+R6+R7+R8+R9+R10) Единственной трудностью стало то, что ATtiny25 имеет всего 2 таймера, один занят формированием ШИМ (причем работает с тактовой частотой 64 МГц, формируемой с помощью PLL), другой работает в декодере RC-5. Для формирования временных интервалов (например, времени удержания кнопки) требуется системный таймер, сделать который не на чем. Из подходящей периферии остались последовательный порт и АЦП. Порт применить не получилось, так как он при включении задействует выводы контроллера. А вот на основе АЦП получился вполне нормальный системный таймер. Чтобы исключить появление помех, между декодированием посылок процессор желательно переводить в режим power down, когда выключается его тактовый генератор. Пробуждаться процессор должен по сигналу от фотоприемника. Логика ухода в сон оказалась довольно нетривиальной, так как надо правильно реагировать на любые ИК-посылки, в том числе, ошибочные, связанные с помехами. При засыпании процессора выключается и PLL, но, к счастью, за время декодирования команды PLL успевает запуститься. Когда ни одна из кнопок не нажата, ШИМ должен формировать максимальное напряжение, которое должно поддерживаться на выходе и в режиме сна. Поэтому вместо загрузки в ШИМ максимального кода я просто переключаю выходы в обычный режим I/O с выводом единицы. Ну вот, все собрано, дека Technics RS-B965 обрела новые возможности. Теперь можно управлять ей, не вставая с дивана. Очень удобным оказалось разделение на пульте кнопок поиска и перемотки. Всегда казалось очень неудобным, когда при нажатии REW или FFD из режима PLAY начинается поиск. Теперь эти кнопки включают перемотку, для чего сначала декодер ДУ генерирует команду STOP. А поиск включают отдельные кнопки. Downloads:
![]() ![]() |
Ридико Леонид Иванович
www.leoniv.diod.club e-mail:
wubblick@yahoo.com
|