Давно хотел поковыряться в БП M2-ITX и сделать его более гибким в настройке, более функциональным.
Что мне не нравится:
- невозможно изменить задержку Remote. Громкие пуки сабвуфера мне надоели, поэтому для включения усилителя использую дополнительное USB-реле. Реле включается и выключается Autoit-скриптом по событиям "Включение", "Выключение", "Вход в сон", "Выход из сна".
- невозможно изменить порог напряжения, до которого АКБ может разрядиться.
- невозможно сделать нормальный гибридный спящий режим. В режиме B0+B1+B3 большая задержка выключения - 30 сек. Режимами B0+B1+B2+B3 и B1+B2+B3 пользоваться не хочу, т.к. не хочу оказаться с разряженным АКБ.
В наличии имеется БП M2-ITX rev. 2F (он же LB160D-7600). Для исследования M2-ITX вооружился фотоаппаратом, лупой и цифровым многоканальным осциллографом. Фотографии платы M2-ITX и наименования некоторых элементов можно посмотреть тут:
https://goo.gl/photos/vY1ZBgePqnxCi7np8
Прочитать прошивку микроконтроллера P87LPC761B не получилось, т.к. она защищена от чтения. Поэтому решил подключить
Arduino Nano вместо этого микроконтроллера.
В принципе, можно расширить функционал и самого P87LPC761B. Для этого надо написать свою прошивку. А к выводам Tx и Rx подключить преобразователь COM-USB, чтобы оперативно изменять различные настройки.
Мои конструкции:
Возможности на данный момент:
- Задание произвольных задержек:
- задержка включения компьютера после включения зажигания - 0...10 сек. Это задержка до подачи сигнала +5VSB после включения зажигания. Непосредственно запуск компьютера происходит еще через 1.4 сек, после эмуляции нажатия кнопки питания.
- задержка сигнала Remote после включения компьютера - 0...10 сек (если 0, то Remote не включается). Это задержка отсчитывается не с момента включения зажигания, а с момента поступления сигнала PS_ON с материнской платы.
- задержка выключения компьютера после выключения зажигания - 0...5 сек. Это задержка до эмуляции нажатия кнопки питания после выключения зажигания. После выключения компьютера +5VSB остается поданным на материнскую плату.
- задержка полного отключения питания компьютера после выключения компьютера при выключении зажигания - 0...3600 сек (0-1 час, для нормальной реализации гибридного спящего режима). После этой задержки отключается +5VSB. Задержка отсчитывается не с момента выключения зажигания, а с момента пропадания сигнала PS_ON с материнской платы.
- Управление сигналом Remote (включение/выключение) подачей команд на Arduino. Т.е. сигнал Remote можно включать уже после загрузки компа, что гарантированно позволяет избежать громкие пуки сабвуфера, независимо от продолжительности загрузки компа. В базовой реализации задержка 5 сек, если комп загружается более 5 сек - то пук обеспечен. Перед перезагрузкой, выключением компьютера и входом в сон можно отключить Remote другой командой.
- Чтение текущих настроек, изменение, запись новых настроек без перепрошивки Arduino с помощью управляющей программы (через интерфейсный разъем USB).
- Хранение всех настроек в энергонезависимой памяти Arduino.
Дополнительные реализованные возможности:
- Прием команд с ИК-пульта и передача их в iCarDS.
- Активация круиз-контроля с помощью кнопки на ИК-пульте.
- Передача в iCarDS данных с акселерометра (для определения продольного и поперечного наклона автомобиля).
Дальнейшие планы:
- Задание порога напряжения АКБ, при снижении до которого компьютер будет автоматически выключен или обесточен. Благодаря внешнему ИОН и калибровке делителя - напряжение АКБ будет измеряться достаточно точно. Я надеюсь.)
- Считывание напряжения АКБ управляющей программой.
- Полное отключение блока питания от бортовой сети.
Можно еще реализовать такие функции:
- Работа с фоторезистором.
- Работа с датчиками температуры.
- Подогрев жесткого диска, его включение после прогрева.
- Включение монитора эмуляцией нажатия кнопки (если монитор сам не включается при подаче питания).
- Подключение различных мультимедиа-кнопок.
Нюансы:
- Сброс Arduino во время загрузки компьютера из-за инициализации COM-порта, что вызывает бесконечный циклический перезапуск компьютера.
- Сброс Arduino во время работы компьютера при подключении к COM-порту управляющей программой, что вызывает жесткую перезагрузку компьютера. Причем, программное отключение сигнала DTR влияет через раз, видимо, криво реализован компонент для работы с COM-портом.
Решение этих двух проблем - вытаскивание джампера. Для прошивки Arduino джампер нужно вставлять обратно, а после прошивки - вытаскивать.
- Занять COM-порт можно только одной программой. Поэтому для изменения настроек придется закрывать iCarDS и потом подключаться управлющей программой.
- Столкнулся с искажением данных, поступающих от Arduino, если Arduino подключена к этому-же компу. При подключении Arduino к другому компу - данные приходят без искажений. Причем, настройки COM-порта одинаковые на обеих компах. Проанализировал искаженные данные и определил, что большинство байт сдвигаются на 2 бита влево. Первый байт передаваемой строки сдвигается влево на 3 бита. Алгоритм искажения оставшихся нескольких байт понять не смог. Вроде победил это недоразумение...
- Проблема с watchdog у Arduino. Решается перепрошивкой загрузчика.
- Arduino и другие элементы не помещаются в корпус CarPC.(