Тема: Arduino в M2-ITX
Показать сообщение отдельно
Старый 05.12.2017, 01:06   #8
Lexx09
Старший Пользователь
 
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 977
Lexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud of
По умолчанию

Потихоньку продолжаю проект...

Для понятия алгоритма работы и распиновки МК оригинального M2-ITX снял 30 осциллограмм 8-канальным цифровым осциллографом всех возможных режимов работы, включения, выключения. Почти со всем разобрался, кроме назначения пина 5 МК. Вероятно, он связан с защитами от КЗ, перенапряжения и т.п., но в проекте не используется.

Первоначальный вариант переделал практически полностью.

Описание и возможности

Контроллер блока питания предназначен для расширения функционала блока питания M2-ITX путем замены микроконтроллера на аппаратно-программное средство типа Arduino на базе микроконтроллера компании Atmel. В дальнейшем под Arduino подразумевается не только оригинальный вариант, но и многочисленные клоны.

Контроллер обеспечивает богатые возможности по настройке параметров работы БП и различных периферийных устройств, и обладает следующими возможностями:
  • Контроль напряжения бортовой сети
    В базовом варианте пониженное напряжение бортовой сети отслеживается аппаратным компаратором, настроенным на один уровень напряжения. Изменение этого уровня возможно только перепайкой резисторного делителя.
    Контроллер позволяет установить любое значение минимально допустимого напряжения бортовой сети.
    Напряжение бортовой сети контролируется при запуске компьютера, во время его работы и в ждущем/спящем/гибридном режимах.
    Если при запуске компьютера бортовое напряжение будет низкое – то контроллер будет ждать, пока напряжение не станет нормальным. Это может случиться после запуска двигателя. В этом случае, даже если включена настройка «Ждать запуска двигателя», ожидания не будет.
    Если напряжение понизится во время работы компьютера – он будет автоматически выключен и обесточен.
    Если напряжение понизится во время спящего/ждущего/гибридного режима – компьютер будет обесточен.
  • Ожидание запуска двигателя
    При включении данной настройки компьютер не будет запущен до тех пор, пока не заведется двигатель. Заведенный двигатель определяется по повышению напряжения бортовой сети на 1В.
    Если двигатель завелся раньше истечения задержки включения +5VSB, то контроллер ожидает окончание задержки, и потом включает компьютер. Иначе – компьютер включается сразу после запуска двигателя.
  • Несколько попыток запуска компьютера
    Если компьютер не запустился с первого раза – контроллер будет пытаться запустить его еще несколько раз через заданные интервалы времени.
  • Контроль выключения компьютера
    Если компьютер в течение заданного времени не выключился (то есть «завис») – жесткое отключение питания, в том числе и +5VSB.
  • Управление сигналом Remote
    Сигнал Remote предназначен для включения и выключения звукового усилителя. Задержка включения сигнала Remote относительно запуска компьютера задается с помощью соответствующей настройки. Так же возможно управление командами, посылаемыми в COM-порт. Силы тока выхода Remote контроллера может не хватить для срабатывания усилителя, поэтому рекомендуется использовать промежуточное реле.
    Сигнал Remote управляется только при включенном CarPC, т.е. управлять им из режима «на столе» нельзя.
  • Управление дополнительным реле
    К контроллеру может быть подключено дополнительное реле, которое управляется только с помощью команд, посылаемых в COM-порт.
  • Управление питанием HDD
    Поддержка реле, разрывающего цепи питания HDD. Разрывать цепи питания HDD необходимо, чтобы он не пытался запуститься при низкой температуре до тех пор, пока не прогреется до минимально допустимой температуры.
  • Управление подогревателем HDD
    Подогрев HDD необходим при низких температурах, чтобы не ждать долгого прогрева HDD по мере прогрева салона. Например, HDD Hitachi Travelstar 7K500 рассчитан на температуру от +5°C до +55°C, и без подогрева при низких температурах он может сломаться за два сезона (что, собственно, у меня и случилось). Подогреватель включается только при первой попытке запуска компьютера в соответствие с заданным условием, далее он автоматически выключается при наступлении одного из заданных условий выключения. Подогреватель, сделанный, например, из автомобильного обогревателя зеркал бокового вида, можно разместить сверху HDD.
    • Условия включения подогревателя:
      • Всегда включать – подогреватель будет всегда включаться при запуске независимо от текущей температуры.
      • Если текущая температура ниже заданной – подогреватель будет включаться только, если при запуске температура ниже минимальной.
    • Условия выключения подогревателя:
      • При достижении заданной температуры – подогреватель будет выключен при достижении заданной минимальной температуры.
      • При истечении заданного времени работы – подогреватель будет выключен по истечении заданного времени работы.
      • При наступлении любого из указанных событий – подогреватель будет выключен при наступлении любого из указанных событий.
    Если включен параметр «Ждать выключения подогревателя» – то компьютер не будет запущен, пока подогреватель не выключится. После выключения подогревателя автоматически включится реле питания HDD.
    Теоретически, можно обойтись и без подогревателя, при этом контроллер будет ожидать прогрева HDD по мере прогрева салона.
  • Поддержка цифрового датчика температуры
    Датчик температуры необходим для корректного включения/выключения подогревателя HDD. Поддерживаются следующие типы датчиков – DS18B20, DS1822, DS18S20, DS1820. Определение модели датчика – автоматическое, точность измерения температуры – 0,5°C. Датчик температуры можно закрепить снизу на HDD, или просто разместить внутри корпуса компьютера.
    Если включен параметр «Ждать нормализацию температуры» – то компьютер не будет запущен, пока температура не станет выше минимальной. Настройку можно использовать, если подогреватель HDD не используется. В этом случае контроллер будет ждать прогрева HDD по мере прогрева салона.
  • Задержка напряжения питания +3.3В
    Задержка подачи напряжения питания +3.3В на материнскую плату относительно других напряжений питания (+5В и +12В) требуется для корректного запуска некоторых плат производства компании Intel (например, Intel D525MW). Для запуска платы необходима небольшая задержка (около 0,5 с), которая подбирается экспериментально.
  • Поддержка спящего/ждущего/гибридного режимов компьютера
    Поддержка указанных режимов осуществляется с помощью настройки задержки отключения дежурного напряжения +5VSB. Максимальное время задержки – 65535 сек (18,2 часа). По истечении этого времени будет отключено дежурное напряжение +5VSB.
    Во время задержки контроллер отслеживает напряжение бортовой сети, и при его снижении ниже заданного – отключение дежурного напряжения +5VSB.
    Во время задержки контроллер также следит и за температурой. Если включена настройка «Ждать выключения подогревателя» или «Ждать нормализацию температуры» – то при понижении температуры ниже заданной произойдет отключение дежурного напряжения +5VSB. Это нужно для того, чтобы компьютер не запустился с холодным HDD при выходе из режима.
  • Поддержка двух способов загрузки ОС – с SSD и HDD
    При загрузке ОС с SSD – ждать окончание подогрева HDD и/или нормализацию температуры не нужно. Компьютер стартует сразу, а подогрев HDD идет параллельно. По заданному условию выключается подогреватель HDD и включается реле питания HDD. Таким образом, в течение некоторого времени после загрузки ОС – HDD будет недоступен (пока не прогреется).
    При загрузке ОС с HDD – нужно ждать окончание подогрева HDD и/или нормализацию температуры. Компьютер при этом не запустится до тех пор, пока по заданному условию не выключится подогреватель и включится реле питания HDD.
  • Режим работы «на столе»
    Режим включается установкой соответствующего джампера. В этом режиме, после перезапуска, контроллер реагирует только на поступающие команды. Это может быть полезно, если были случайно записаны некорректные настройки и после этого CarPC не стартует.

Программа управления

Для взаимодействия пользователя с контроллером разработана программа управления. Взаимодействие программы управления с Arduino происходит через COM-порт. Возможности программы:
  • Выбор COM-порта.
  • Установка настроек по умолчанию.
  • Чтение настроек из Arduino.
  • Запись настроек в Arduino. При этом настройки применяются сразу же после записи, перезапуск Arduino не требуется.
  • Сохранение настроек в файл и загрузка их из файла.
  • Чтение текущего напряжения и температуры.
  • Включение/выключение реле Remote.
  • Включение/выключение дополнительного реле.
  • Мультиязычность (русский, английский, украинский).



На маленьких разрешениях экрана в программе появляются ползунки, которыми можно прокручивать окно программы.

Поначалу тестировал в Proteus:

Там еще второй микроконтроллер был, который эмулировал ответную часть БП и компьютер.


Контроль напряжения бортовой сети

В оригинальном варианте контроль пониженного напряжения производится компаратором, настроенным на один уровень напряжения. Определение напряжения средствами Arduino производится без использования компаратора, что позволяет задать уровень пониженного напряжения.

В качестве опорного напряжения используется напряжение питания Arduino, которое может быть не равно точно +5В. На разных экземплярах M2-ITX это напряжение также может немного различаться. Например, при подключении к USB-порту домашнего компьютера – напряжение питания Arduino равно +4,65В. Если подключить вывод 3V3 (на котором фактически 3,28В) к аналоговому входу и в течение некоторого времени скетчем измерять напряжение, приняв за опорное напряжение точно +5В, то получим следующие результаты:


Если измерить вольтметром напряжение питания Arduino, и прописать это значение в скетч вместо 5В, то получим следующие результаты:


Как видим, результат стал существенно точнее.

Т.о., для корректного определения напряжения бортовой сети необходимо знать два параметра:
  1. Напряжение питания Arduino.
  2. Коэффициент резисторного делителя.
Оба параметра различаются от экземпляра к экземпляру M2-ITX. В проекте оба параметра объединяются в один коэффициент, который предварительно необходимо определить и потом указать в настройках.

В процессе тестирования выявил еще одну вещь - напряжение питания Arduino при работающем компе ниже, чем при выключенном. А в момент запуска компьютера напряжение питания Arduino просаживается еще ниже, из-за чего срабатывала защита от низкого напряжения. Пришлось ввести в алгоритм два коэффициента - один для неработающего CarPC, другой - для работающего.

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


Выбор и подготовка Arduino

В проекте может быть использована Arduino любого типа с микроконтроллером, удовлетворяющим следующим требованиям: https://duino.ru/arduino.html
  • Память программ (Flash) – 16 Кбайт (с учетом загрузчика размером 2 Кбайт),
  • Оперативная память (RAM) – 1 Кбайт,
  • Энергонезависимая память (EEPROM) – 64 байт,
  • Количество аналоговых входов – 1,
  • Количество цифровых входов/выходов – 12.
Данным требованиям удовлетворяет микроконтроллер ATmega168P, но лучше использовать микроконтроллер с запасом по требованиям, например, ATmega328P (у которого в два раза больше Flash и RAM), используемый в недорогой и малогабаритной Arduino Nano.

Желательно использовать Arduino, на которой есть джампер для отключения автоматического программного сброса. Этот джампер необходимо удалить, иначе при открытии порта программой управления возможен жесткий сброс CarPC (даже если программой не используется сигнал DTR).



Для прошивки Arduino нужно либо временно устанавливать джампер, либо нажимать кнопку сброса в начале загрузки прошивки. Загружать прошивку необходимо с другого компьютера/ноутбука, при этом CarPC должен быть выключен. Arduino отсоединять от БП не обязательно.

Если в наличии есть Arduino без джампера, то надо каким-либо способом отключить ее программный сброс. Например, соединив контакты 5V и RST резистором.



Рекомендуется сразу заменить стандартный загрузчик на загрузчик Optiboot по следующим причинам:
  • Выше скорость загрузки – 115200 вместо 57600.
  • Корректно работающий Watchdog, поддержка которого, возможно, будет добавлена при дальнейшем развитии проекта. Проблемы с Watchdog на стандартном загрузчике описаны тут.

Схема подключения

На данный момент схема подключения Arduino к M2-ITX такая:


Резисторный делитель на входе D3 Arduino нужен для:
  1. понижения напряжения бортовой сети до допустимых значений, иначе Arduino не просыпается при появлении ACC (вероятно, срабатывает защита от превышения),
  2. подтяжки входа к нулю при отсутствии ACC.

Arduino при отключенном питании и 5VSB переходит в глубокий сон, из которого выходит только при появлении ACC. Замеры потребления тока уснувшей Arduino и во время спящего/ждущего/гибридного режимов CarPC еще не делал.


Сейчас тестирую дома на снятом CarPC. Когда до полевых испытаний доберусь - непонятно, надеюсь, до НГ успею. Времени не хватает на все про все, как обычно. Надо же еще и красивое руководство пользователя сделать (большую часть уже выложил здесь)...


Если у кого-нибудь есть замечания/предложения/пожелания - с удовольствием выслушаю.


PS: COM-порты - такая убогая технология для обмена данными, ужас просто. Намучался с ней. В дальнейшем развитии проекта можно попробовать использовать Arduino с полноценным USB-портом (на ATmega32U4), либо STM32 (STM32F103C8T6, тоже с полноценным USB-портом), либо ESP8266 (с обновлением прошивки и управлением по WiFi).
__________________
Приора хэтчбек
Win7 x64 Pro, Intel Core i3-3240 Ivy Bridge 2x3.4GHz HT, DDR3 2x4Gb, SSD SiliconPower Ace A55 128GB SATAIII, ASRock B75M-ITX, M2-ITX rev.2F, GPS Beitian BN-808, Logitech Wireless Touch Keyboard K400r, ИК-пульт Prology RCD-350, круиз-контроль...

Последний раз редактировалось admin; 12.03.2018 в 10:18.
Lexx09 вне форума   Ответить с цитированием