Программирование AVR: работа с USB USB HID регулятор вращения для компьютерных вентиляторов Sun, May 28 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


USB HID регулятор вращения для компьютерных вентиляторов Печать
Добавил(а) mega_mozg   

[Назначение регулятора частоты вращения вентиляторов]

Устройство (далее регулятор вращения hid-mm-fan-control) предназначено для управления 6-ю компьютерными вентиляторами охлаждения системного блока компьютера. Оно должно работать автономно (без участия компьютера), и обеспечивать несколько режимов работы для вентиляторов. Далее перечислены эти режимы, всего их 4.

1) Фиксированный минимальный, предварительно заданный пользователем уровень.
2) Фиксированный обычный (нормальный), предварительно заданный пользователем уровень.
3) Фиксированный максимальный, предварительно заданный пользователем уровень.
4) Автоматический режим – скорость вращения вентиляторов зависит от показаний датчиков температуры, подключенных к АЦП.

Кроме функции управления вентиляторами, hid-mm-fan-control должно работать как устройство USB HID, если оно подключено к компьютеру через USB. В этом случае hid-mm-fan-control может управляться с помощью специальной программы конфигуратора (ПО хоста, программа на компьютере) через подключение по интерфейсу USB.

Управление переключением между режимами 1 .. 4 может быть с помощью конфигуратора или с помощью кнопок, аппаратно подключенных к hid-mm-fan-control. Имеется 3 кнопки, которые подключаются к трем портам микроконтроллера (см. далее раздел «Аппаратная часть»). Нажатие одной из кнопок вызывает активацию соответствующего фиксированного режима, автоматический режим активируется по умолчанию, когда ни одна из кнопок не нажата. Так же предусмотрен режим короткого предварительного раскручивания всех вентиляторов на 100% оборотов при включении устройства.

В энергонезависимой памяти устройства должны храниться параметры, влияющие на регулировку скорости вращения вентиляторов. Эти параметры будут настраиваться с помощью программы конфигуратора через интерфейс USB.

[Аппаратная часть]

Для изготовления регулятора hid-mm-fan-control использованы:

- Макетная плата AVR-USB-MEGA16 [1], на которой установлен микроконтроллер Atmel ATmega32A.
- Транзисторы NPN КТ815Г 6 штук.
- Резисторы 100 Ом 6 шт. (ограничители базового тока транзисторов).
- Резисторы 10 КОм 9 шт. (6 для АЦП и 3 для дополнительной подтяжки к +5V трех кнопок).
- Электролитические конденсаторы 10 мкФ 6 шт. (для сглаживания выходных импульсов ШИМ).
- Терморезисторы 4.7 кОм 6 шт. (используются как термодатчики, они подключены к входам АЦП микроконтроллера).

hid-mm-fan-control-pic01-sch

Рис.1. Принципиальная схема hid-mm-fan-control.

ШИМ выполнен программно в коде firmware микроконтроллера - в основном цикле функции main вычисляется длительность активного интервала ШИМ, и на этот интервал микроконтроллер открывает транзисторный ключ. Терморезисторы подключены к АЦП по простейшей схеме, образующей делитель напряжения.

В таблице перечислены используемые порты микроконтроллера, их назначение, тип порта (вход или выход) и соответствующие портам контакты макетной платы AVR-USB-MEGA16.

Используемые порты микроконтроллера Контакты Тип порта Описание
PB3, PB4, PС0, PС1, PС6, PС7 P11, P12, P13, P14, P15, P16 Выход Управление транзисторными ключами (выход программного ШИМ). 0: транзистор ключа закрыт, 1: транзистор открыт.
PD0, PD3, PD6 P17, P19, P21 Вход Подключение кнопок управления. 0: кнопка нажата, 1: кнопка отпущена.
PA0, PA1, PA2, PA3, PA4, PA5 P1, P2, P3, P4, P5, P6 Входы АЦП Подключение датчиков температуры.

[Изготовление устройства hid-mm-fan-control]

hid-mm-fan-control-pic02-montage

Рис. 2. Монтажная схема.

hid-mm-fan-control-pic03-DSCF2668

Рис. 3. Общий вид сверху на монтаж (видны транзисторы ключей и внешние коннекторы).

hid-mm-fan-control-pic04-top

Рис. 4. Коннекторы для подключения кнопок управления, вентиляторов и терморезисторов.

hid-mm-fan-control-pic05-bottom

Рис. 5. Вид на монтаж снизу (для наглядности монтажа временно отсутствуют конденсаторы фильтры ШИМ).

Обозначение цветов для всех проводов: Черный – земля, Желтый – питание +12в (для вентиляторов), Красный – питание +5в (питание МК, опорное для АЦП, для подтяжки кнопок), Синий – входы АЦП, Зеленый – выходы транзисторных ключей. Кнопки подключены 4 проводами: «К(-)»земля, общий для всех кнопок, «К1» режим минимума, «К2» режим нормальный, «К3» режим максимума. Подключение датчиков: «Т1»… «Т6», входы для подключения терморезисторов (синий цвет проводов с обратной стороны). Подключение вентиляторов: «В1»…«В6».

[Программное обеспечение hid-mm-fan-control]

Firmware микроконтроллера ATmega32A написано так, что оно не только управляет транзисторными ключами, регулируя частоту вращения с помощью ШИМ, но и также реализует работу устройства USB HID. Через USB HID, если устройство hid-mm-fan-control подключено через USB к компьютеру, пользователь может управлять поведением регулятора и его параметрами (об этом подробнее далее). Разработка прошивки firmware выполнена с помощью библиотеки V-USB версии 20121206 и пакета WinAVR-20100110.

Обновлять код firmware микроконтроллера можно через тот же интерфейс USB с помощью встроенного в память микроконтроллера бутлоадера USBasp [2].

[ПО хоста для управления параметрами hid-mm-fan-control]

Управляющая программа (ПО хоста для USB HID) конфигуратора hid-mm-fan-control разработана с помощью среды разработки Delphi7 и библиотеки JEDI Visual Component Library JVCL347CompleteJCL241-Build4571, как провайдера управления для USB-HID устройств [4, 5].

Нет смысла расписывать программирование в среде Delphi7, для этого есть другие ресурсы и статьи. Стоит только упомянуть используемые в ПО хоста компоненты JEDI Visual Component Library - TJvHidDeviceController и TJvHidDevice.

В конфигураторе используются следующие функции компонентов:

TJvHidDeviceController предоставляет доступ списку USB контроллеров, отслеживает изменение состояния контроллеров, подключение/отключение устройств.

TJvHidDeviceController:OnDeviceChange - обработчик подключения/отключения устройств.

TJvHidDeviceController:OnEnumerate - получение списка устройств.

TJvHidDevice - предоставляет доступ к конечному USB устройству. В конфигураторе используются только два метода для получения и отправки пакета данных.

TJvHidDevice:GetFeature - получение пакета данных (прием данных от устройства).

TJvHidDevice:SetFeature - отправка пакета данных (передача данных в устройство).

Все USB устройства унифицируются тремя параметрами VID - код разработчика, PID - код устройства. Иногда также используется серийный номер устройства в линейке однотипных, и его символьное имя. При срабатывании обработчиков TJvHidDeviceController:OnDeviceChange или TJvHidDeviceController:OnEnumerate происходит поиск нужного устройства по значениям VID и PID.

Например флешка 8 гигабайт фирмы Silicon Power может иметь следующее описание в реестре Windows: «USB\VID_13FE&PID_3600\11010187E6A10B00B21F0096» где «VID_13FE» соответствует VID = 0x13FE - код производителя «Silicon Power», «PID_3600» соответствует PID = 0x3600 - код конкретной серии флешек и «11010187E6A10B00B21F0096» уникальный серийный номер флешки.

Устройство hid-mm-fan-control использует стандартные драйвера класса USB HID (встроенные в ОС Windows), поэтому не нужно устанавливать дополнительные драйвера для устройства и выполнять какую либо установку/настройку программы конфигуратора.

Примером привычных HID-устройств являются мышки, клавиатуры USB, джойстики и геймпады – они сразу готовы к работе после подключения в порт USB и определения операционной системой.

[Настройка и калибровка hid-mm-fan-control]

На скриншоте показан общий интерфейс программы-конфигуратора (ПО хоста), через который происходит управление параметрами регулятора вращения вентиляторов.

hid-mm-fan-control-pic06-host-software-unconnected

Рис. 6. Основной интерфейс конфигуратора, устройство не подключено.

hid-mm-fan-control-pic07-host-software-connected

Рис. 7. Основной интерфейс конфигуратора, устройство подключено и настроено.

Все показатели оборотов вентиляторов задаются в процентах (1-100%), а не в оборотах в секунду. Число процентов соответствует мощности, подаваемой на вентилятор (активному полупериоду ШИМ). Минимальная мощность может быть 1%, максимальная 100%. Мощность ниже 20% вызывают остановку вентиляторов, не стоит устанавливать значения ниже этого предела. Остановленный вентилятор может самостоятельно раскрутиться, только если подаваемая мощность будет от 75% и более.

Программа конфигуратора не требует установки, её достаточно переписать на компьютер и запустить (касается ОС Windows линейки NT - Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows 7 и старше).

Правильно собранное и прошитое устройство hid-mm-fan-control должно отобразиться в списке Диспетчера Устройств Windows как «VID 8888 PID8888 MMfan control».

Настройка начинается с кнопки «Считать конфигурацию» и завершается кнопкой «Записать конфигурацию». На экране программы конфигуратора отображаются данные текущего режима работы (начиная с момента включения), состояние кнопок переключения режимов, а также показатели температуры и оборотов (в процентах от максимума) по каждому вентилятору.

Каждый канал управления вентилятором имеет:

- Название: это просто логическая метка.
- Режим: Минимальный/Нормальный/Максимальный. Для каждого режима задаются фиксированные проценты оборотов для вентиляторов относительно максимума.
- Для автоматического режима присутствует калибровка датчика, множитель и делитель.

Калибровка относится к автоматическому режиму управления скоростью вращения вентиляторов в зависимости от температуры. Первый этап калибровки – установка множителя и делителя в значение 1, в таком режиме в графе «тек. температура» устройство будет выдавать чистое значение, считанное с АЦП.

hid-mm-fan-control-pic08-host-software-calibr1

Рис. 8. Первый этап калибровки автоматического режима.

Второй этап калибровки требует эталонного термометра для получение значения температуры (я использовал заводской термометр от старого компьютерного корпуса). На фото показан процесс измерения температуры эталонным термометром.

hid-mm-fan-control-pic09-ext-etalon-DSCF2672

Рис. 9. Измерение реальной температуры для калибровки термодатчиков.

Третий этап калибровки заключается в расчете множителя и делителя, чтобы корректно переконвертировать значение, считанное из АЦП, в температуру датчика. В моём примере число 744, считанное с АЦП, соответствует температуре 26 градусов Цельсия. Множитель и делитель должны быть заданы целыми числами так, чтобы при умножении и делении считанного с АЦП значения получалась нужная температура.

hid-mm-fan-control-pic10-host-software-calibr2

Рис. 10. Установка коэффициентов множителя и делителя.

Автоматическая регулировка частоты вращения строится на математической модели построения прямой по двум заданным точкам [3].

[Теория математической модели]

Уравнение прямой, проходящей через 2 заданные точки X1Y1 и X2Y2, имеет вид:

Y-Y1 X-X1
------ = ------
Y2-Y1 X2-X1

Или в общем виде (Y1-Y2)*X + (X2-X1)*Y + (X1*Y2 - X2*Y1) = 0. Т. е. получилось общее уравнение прямой линии на плоскости в декартовых координатах:

Ax + By + C = 0

где A и B одновременно не равны 0.

Пользователем задаются исходные две точки «Старт» и «Максимум».

Первая пара «Старт» - «Температура» и «Обороты» определяют точку прямой X1/Y1.
Вторая пара «Максимум» - «Температура» и «Обороты» определяют точку прямой X2/Y2.

Все остальные промежуточные значения X/Y, расчет оборотов вентилятора от текущего показания температуры вычисляются в firmware микроконтроллера ATmega32A. Стоит добавить, что firmware даже в автоматическом режиме работы не даст оборотам вентилятора опуститься ниже, чем задано в поле «Минимальный режим» (дабы избежать полной остановки вентилятора).

hid-mm-fan-control-pic11-host-software-change-mode

Рис. 11. Переключение режима работы через конфигуратор.

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

[Ссылки]

1. Макетная плата AVR-USB-MEGA16.
2. AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32.
3. Уравнение прямой по двум точкам site:math.by - математическая модель регулирования частоты вращения вентиляторов.
4. JEDI Visual Component Library site:wiki.delphi-jedi.org.
5. Программирование простейших USB-устройств на Delphi site:osp.ru - примеры работы с USB в Delphi.
6. 130301hid-mm-fan-control-mb16.zip - исходный код firmware и ПО хоста проекта hid-mm-fan-control, документация, фотографии.

 

Комментарии  

 
0 #3 RAV 20.04.2017 16:32
mega_mozg, мне нужно подобное устройство. Назови цену за готовое устройство (как в статье выше) в комплекте с откалиброванным и датчиками температуры. Спасибо.
Цитировать
 
 
0 #2 Eugene 03.03.2017 21:01
Подскажите, та прошивка, что лежит в архиве, на какой кварц рассчитана? Как можно указать, какие нужно прошивать фьюзы? А то совсем запутался, собрано на макетке и имею те же "неизвестное USB устройство".

microsin: на какой кварц рассчитана прошивка - можно узнать либо по имени файла, либо из файла makefile, где эта частота задается макропеременной F_CPU. Если не уверены, то просто перекомпилируйт е прошивку на нужную частоту. Если имеете "неизвестное устройство USB", то вовсе необязательно, что ошибка в частоте кварца, на которую рассчитана прошивка, могут быть и другие проблемы. Прогуглите "Почему не работает библиотека V-USB с микроконтроллер ом AVR?". Какие установить фьюзы - можно узнать по калькулятору фьюзов (прогуглите AVR fuse bit calculator), фьюзы должны задавать тип генератора от внешнего кварца и делитель частоты при этом должен быть отключен.
Цитировать
 
 
0 #1 Андрей 23.12.2015 12:46
Пробую реализовать ваш проект
http://microsin.net/programming/avr-working-with-usb/hid-mm-fan-control.html

Проблема возникла после прошивки микроконтроллер а, Windows 8.1. Не появляется устройство в списке. Пишет неизвестное USB устройство (сбой запроса дескриптора устройства). Если можно, подскажите, что не так? Может драйвер нужен ещё дополнительно?

microsin: Если Windows сообщает, что "неизвестное USB устройство", то это означает, что Ваша плата и программа микроконтроллер а совершенно не работоспособна как устройство USB, до установки драйвера дело даже не дошло. Причин может быть множество, очень много мест, где можно накосячить, так что точно нельзя сказать, что у Вас. Просто кратко перечислю самые частые причины:

1. Прошивка скомпилирована не на тот кварц, или не на тот процессор.
2. Неправильно стоят фьюзы.
3. Ошибка в схеме - она либо вообще неработоспособн а, либо не подходит под скомпилированну ю прошивку.
4. Проблема с кварцевым резонатором.

См. также вот это: http://microsin.net/programming/avr-working-with-usb/v-usb-troubleshooting.html .

Что можно сделать - это последовательно исключать одну возможную причину ошибки за другой возможной причиной. Тупо и методично. В результате все заработает. Поверьте, у меня поначалу тоже были проблемы на каждом шагу. Это совершенно нормально.

Дополнительные ссылки:

http://microsin.net/adminstuff/windows/usb-device-not-detected-or-comes-up-as-unknown-device.html
http://microsin.net/adminstuff/windows/how-usb-stack-enumerate-device.html
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page