Электроника
Электронная часть состоит из двух блоков: управляющая плата и блоки
фотопрерывателей. В основе управляющей платы микроконтроллер PIC18F4550 фирмы
Microchip со встроенным USB интерфейсом. Кварц X1, конденсаторы C1-C5 и
резистор R23 образуют стандартную обвязку микроконтроллера.
Переключатель SW1 устанавливает канал MIDI-сообщений. Резисторы после
PORTD ограничивают ток заряда ёмкостей затворов MOSFET-транзисторов, резисторная
сборка RX2 подтягивает их затворы к земле.
К оставшимся выводам микроконтроллера подсоединены штыревые разъёмы
("наколки") для подключения дополнительных компонентов (например,
переменного резистора, волкодера, ЖКИ и т.п.). Разъём J7 нужен для подачи
питания на них.
Напротив каждой клавиши расположен фотопрерыватель. В отпущенном состоянии
шторка, прикреплённая к клавише, перекрывает его. Фотопрерыватели расположены
на четырёх платах по восемь штук. На каждой плате имеется разъём питания, а
также разъём для считывания состояний прерывателей. Цепь "+5В"
напрямую соединена с цепью VCC основной платы, а вот "земля" каждой
восьмёрки доходит до основной "земли" через MOSFET-транзистор. Это
позволяет подключать платы по очереди.
На риснке слева – схема подключения трёх прерывателей одной группы.
Сами фототранзисторы эмитерами подключены к земле соответствующей платы,
а коллекторами – к выходному разъёму. Эти разъёмы всех четырёх плат при
помощи шлейфа пдключены к PORTB микроконтроллера. Т.о., если на одну из плат
подано питание (т.е. открыт MOSFET-транзистор, к которому она подключена),
и нажата клавиша, т.е. шторки нет, то фототранзистор "притягивает"
соответствующую ногу PORTB к земле. Если же клавиша отпущена, и шторка
перекрывает поток света, то транзистор закрыт и на ноге PORTB единица.
У фотопрерывателей есть важная особенность: если шторки нет, то при подаче
питания на светодод транзистор открывается не сразу, а с задержкой порядка
0,5мс. Поэтому, если считывать состояние PORTB сразу после включения очередной
восьмёрки прерывателей, есть опасность "не увидить" нажатия некоторых
клавиш (фототранзистор будет ещё закрыт и на ноге PORTB будет 1, как будто
клавиша отпущена). Чтобы этого не происходило, нужно считывать PORTB через 1мс
после подключения очередной платы. Попутно заметим, что 1мс для микроконтроллера
на 20МГц - это 20 000 000 / 4 / 1000 = 5000 операций, поэтому можно использовать
это время для обработки состояния PORTB и отправки данных.
Алгоритм работы
При включении PORTB настроен на вход, PORTD на выход, свободные биты PORTC
на вход. 0-й бит PORTD устанавливается в 1, после чего выдерживается пауза 1мс.
Далее считывается состояние PORTB, а 1 в PORTD перебрасывается в следующий бит,
причем по кольцу, т.е. после 3-го бита она перейдёт в 0-й. После этого
сбрасываем таймер. Теперь происходит
анализ содержимого PORTB (которое было считано ранее, до изменения PORTD). Если
i-й бит PORTB изменил своё состояние (относительно предыдущего опроса этой
восьмёрки перывателей) с 1 на 0, значит клавишу нажали, если с 0 на 1 –
отпустили. В этом случае пробуем послать данные по USB. Если данные ушли, то
запоминаем это. Если после проверки всех восьми битов остались непосланные
данные, то "уходим на второй круг" и пробуем послать сообщения для
клавиш, чьи данные не были отправлены. Если же все клавиши обработаны, то ждём,
пока дотикает 1мс с момента подключения следующей восьмёрки, считываем PORTB,
перебрасываем единицу в следующий бит PORTD и так далее в бесконечном цикле.
Нужно пояснить, что значит "ждём 1 мс". Все пользовательские
действия находятся в процедуре ServiceRequests, которую периодически вызывает
главная программа контроллера. Эта программа занимается также обработкой самого
протокола USB, так что сильно задерживаться в процедуре ServiceRequests нельзя.
Поэтому в процессе "ожидания" при каждом входе в ServiceRequests мы
проверяем, прошла ли 1мс с нужного момента, и выходим, если это не так.
Конструкция
Основная плата собрана на куске одностороннего стеклотекстолита 84х74мм.
Платы с фотопрерывателями выпиливаются из одного куска размером 282х162мм.
Для соединения фотопрерывателей с основной платой используется два 16-жильных
шлейфа. На первый надеваются пять колодок IDC-16F, четыре из которых
присоединяются к платам прерывателей, а пятая - к разъёму J1 основной платы.
Второй шлейф разделяется на полоски по два провода. Каждая пара проводов
заделывается в разъём BLS-2, который присоединяется к питанию плат прерывателей.
Обратите внимание, что все "пары" проводов разной длины. Важно не
перепутать, с какой стороны делать длинный, а с какой - которкий (я перепутал
– пришлось переворачивать шлейф).
Файлы
progr.zip - проект MPLAB.
pcb.zip - проект PROTEUS.
main.pdf - основная плата,
файл для ЛУТ
phints.pdf - платы прерывателей,
файл для ЛУТ.
parts.pdf - карта монтажа
|
15.02.14
Фотографии совсем новых пружин
20.05.10
Фотографии новых пружин
20.05.10
Фотографии педали crescendo
18.05.10
Добавил гостевую книгу
|