Обо мне
    Резюме
    Портфолио
    Контакты
    Астро
    Схемотехника
    Мультикоптеры
    Автономный дом
    CNC фрезер
Язык:

Лечилка глючного Canon EOS

2011-10-25 23:24:25

Статус: Готовое изделие на печатной плате.

Цель проекта: Есть глючный фотик, который, когда он зависнет, нужно отключить от питания, отключить от USB. Управление платкой по UART, точней сказать, через USB-COM преобразователь, к примеру на PL2303 из дата-кабеля для мобилы.

Структура проекта глобально:

Ничего сложного, кроме пары тонкостейнебольшой специфики.

  1. USB коммутирую через герконовое реле, все 4 провода. Эти реле я ещё не встречал с переключающимся контактом, соответственно, нельзя подключить их в нормально-замкнутом положении, нужно подавать питание на реле, удерживая usb-соединение. Благо это не большая проблема, реле едят по ~10мА, стало быть можно подключить их прямо на ногу процессора.
  2. Если обратить внимание на USB разъём, то два контакта имеют большую длину (это питание), два - меньшую. То есть, подключая устройство, сначала ему подаётся питание, потом только данные. Это логично. Процессору устройства надо прийти в себя, успеть выполнить какую-то инициализацию, а лишь потом начинать общаться по USB с хостом. Поэтому и я сначала включаю USB-GROUND, потом считай что сразу, USB-POWER, потом жду некоторое время и включаю D-, D+. Время рассчитал просто. Разъём я втыкаю примерно со скоростью 5 см в секунду = 50 мм/с. Разница длины проводника на глаз 0.5 мм. Это расстояние с этой скоростью разъём проходит за 0.5 / 50 = 0.01 сек.
  3. Ну и банальщина, питание фотика превышает допустимый ток герконовых реле, поэтому на эту коммутационную цепь поставил силовое реле. Чтобы не заводить доп. питание 12В, выбрал реле 5В (питание от USB-COM, 5В / 0.5А). Реле ест 40мА, больше допустимых 20мА на порт ноги проца. Поэтому реле через ULN2003, набор из 7 составных транзисторов-резисторов-диодисторов. Хорошая микруха, только я пока никак не разберусь, как подключить её без инверсии к процу через оптопару.

Схема:

4 герконовые релюшки

2 силовые релюшки через uln2003.

Печатная плата:

 

Кварц я, подумав, убрал. Хватит встроенного 8МГц генератора.

Были куплены силовые реле на две пары переключающих контактов, то есть хватит одного. Плюс заменил ULN2003 на транзисторный ключ на диоде 1N_не_помню_какой (из наличия), транзистор BC547 и резюк несколько кОм в базу (как подключить к контроллеру назгурзку, сайт getchip.net: тынц).

 

Так как меня попросили сделать три такие устройства, паять кучу проводочков на монтажке мне не захотелось и я засёк время, развёл плату. Потратил около 1:10 времени. Ещё потрачу с часок на то, чтобы заехать к знакомому с ЧПУ-фрезером. В общем, однозначно в выигрыше. Надо будет ещё полчасика потратить на проверку схемы. И один проводник не смог развести на однослойной плате.

Платку развёл, знакомый "выпилил" её. Оказывается, я ошибся в контактах под реле и клемник. Плюс в расстоянии от клемника до реле, не промерил габариты клемника, тот не лезет. Исправленная версия платы справа.

картинки компонент:

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

Программная часть:

Состоит из двух частей, как часто в последнее время. Это часть на компе. Под винду пишу на c#. Простая форма, см. ниже. Название порта, пишет в регистри - удобно для понимания что это. Номер порта, забил до 16, дальше было лень, но разницы нет, можно дополнить. Кнопки "включить", "выключить" и "разорвать на 10 секунд".

Чуть поразмыслив, решил ввести в протокол команду чтения текущего статуса. Тяжело без обратной связи. Соответственно, статус считывается при старте (можно ввести в таймер раз в N секунд... может и стоит). Отображается цветом.

Часть на мк (firmware) сделал через codeVision AVR (cvavr) Wizard. Неотдебуженная (кроме протеуса) версия

Принимает '0' или '1', соответственно, выключая или включая все реле, с учётом задержки при включении USB. Дополнительно получает команду 'g', выдаёт текущий статус.

Изначально питание всех реле включено.

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

Код здесь: http://oleg.milantiev.com/projects/usbKiller.zip

Включает в себя:

  • AVR Studio: проект в AVR Studio, собственно. Часть на МК;
  • c-sharp: проект в MS Visual Studio 2010. Часть на компе;
  • Proteus: упрощённая схема и эмуляция в Proteus;
  • Sprint Layout: схема в формате Sprint Layout 5.0 и картинки цоколёвки компонент.

Готовое изделие:

Напаял, провозился несколько часов на банальщине - rx проца упал на землю, в итоге тот не принимает команды. Уж грешил на новый usb-uart модуль на pl2303, заказанный у китайца. Напаял шнурок "от мобилы из евросети" (ссылка выше) - то же. Ну, тестер в руки, нашёл беду. Теперь работает. Осталось отладить и чуток дописать вин.прогу, да затолкать в корпус и проект завершён.

Телефон: +7 (928) 425-32-10
e-mail: