USBDevice

для раздела Блоги

USBDevice.



Вступление

Прошло почти два года с тех пор, как я закончил предыдущее устройство, собрал СВО и написал статью. Но предыдущий прибор оставил у меня чувство неудовлетворенности, которое со временем переросло в желание сделать следующий прибор. Совпало несколько факторов : меня через ICQ нашел TiN и предложил сотрудничество и обмен опытом, была работа в которой использовался микроконтроллер LPC2478 с TFT контроллером и панелью TFT в 3,5”, появилось свободное время и рабочее место. В определенный момент смог освободиться от работы, обрисовал, что хочу получить, открыл темы для обсуждения в конференциях и взялся за работу.



Постановка задачи

Сразу хочу пояснить : не планировал и не планирую зарабатывать на этом проекте деньги, это развязало руки в выборе аппаратных средств. Если прибор разрабатывается под определенный бюджет то нужно очень тщательно подходить к выбору комплектации, исходя из критериев : доступность, стоимость, надежность, это отдельная большая работа которой была бы лишней в этом проекте.


Стандартная СВО содержит следующие элементы: помпу, водоблоки, радиатор, расширительный бачок и шланги. Для управления СВО обязательно нужно знать температуру теплоносителя, окружения, регулировать скорость вращения вентиляторами, контролировать проток теплоносителя; желательно иметь дисплей для отображения информации, клавиатуру для непосредственного управления, интерфейс для подключения к компьютеру и ПО на компьютер.

Центральный узел, определяющая как будет выглядеть прибор это дисплей :



От него зависит размер, клавиатура, процессор, внешний вид. Я выбрал POWERTIP TECH 3,5” TFT with T\P SPF PH320240T-006-IP1Q - графический TFT дисплей, с диагональю 3,5”, сенсорной панелью, параллельный цифровой интерфейс 24-bit RGB. Это определило размер прибора : 2 отсека 5.25”, и процессор : LPC2478, размер печатной платы 138,5 х 82 мм. Главное, от чего нужно отталкиваться при разработке нового устройства — конструктив : как закрепить прибор в корпусе компьютера, подвести к нему датчики, подключить вентиляторы.



Идею по закреплению TFT взял из комплекта разработчика фирмы Olimex LPC-2478STK, а именно : TFT панель не имеет крепежных отверстий, вообще ничего на ней нет, и единственный способ заключается вфиксации крепежной рамкой сверху. Буфер экрана хранится в оперативной памяти, размер буфера (для разрешения 320х240, 24 bpp) 225 кБ (реально 300 кБ) , следовательно нужна внешняя память, поскольку в процессоре всего 64 кБ.


Для управления вентиляторами остановился на регулировании напряжения и решил не использовать PWM. Аналоговые вентиляторы проще купить, обычно производители добавляют PWM режим в качестве опции. Схемотехнически выбрал схему Buck DC-DC Step Down c обратной связью по напряжению и подсчетом частоты вращения вентилятора на процессоре. Схемотехника и топология очень хорошо расписана в документации к любой микросхеме DC-DC, например в LM2675 производства National Semiconductor, и если процессор заменит микросхему DC-DC, то все выкладки по элементной базе можно один в один применить на себя : выбор номинала индуктивности, частоты работы преобразователя, входных и выходных емкостей. Было желание управлять не только вентиляторами, но и помпой, поэтому сделал две схемы на 1А и 3А максимального рабочего тока.



Для измерения температуры были выбраны чувствительные элементы Platinum Resistance Temperature Detector (RTD) 1000. Были приобретены элементы Heraus M222 (тепературный диапазон от -70 до +500). К несомненным достоинствам этих элементов можно отнести : линейную характеристику изменения сопротивления от тепературы, повторяемость характеристик, широкий температурный диапазон ; к недостаткам : высокую цену (от 3$ за элемент), необходимость схемы усиления с применением Rail-To-Rail ОУ. Для измерения разработал схему позволяющую измерять температуру в диапазоне от -273 до 99 градусов, с абсолютной точностью в 0,1 градуса.



Для подключения к компьютеру было решено использовать интерфейс USB. Изначально планировалось использование USB-процессора и моста USB-to-COM FT232BM (для экономии времени на разработке программного обеспечения), но от моста пришлось отказаться, он банально не поместился на плате. В процессе разработки поробовал применить HID и CDC классы. HID оказался удобнее, в итоге на нем и остановился.



Основные характеристики USBDevice :

Размер : 2 отсека 5.25”
Дисплей TFT 3,5` 320x240, цвет 24 бит
Процессор : NXP LPC2478
Память : х16 32MБ (256МБит) SDRAM
Интерфейс для подключения к компьютеру: USB, класс устройства HID
8 каналов измерения температуры (от -273 до +99 градусов)
8 каналов измерения напряжения (дискретность 3 мВ)
4 канала подключения вентиляторов с счетом частоты вращения вентиляторов, регулировка выходного напряжения с точностью 0,1 В в диапазоне 0..12 вольта, максимальный рабочий ток 1 А.
2 канал подключения «мощных» устройств, со счетом частоты вращения вентиляторов, регулировка выходного напряжения с точностью 0,1 В в диапазоне 0..11,5 вольта, максимальный рабочий ток 3 А.


Изготовление.

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

САПР Altium позволяет генерировать 3D-модель будущего прибора, чем я воспользовался чтобы оценить внешний вид до изготовления.



Изначально я планировал изготовить лицевую панель самостоятельно, на фрезеном станке у знакомого. Но у него мало опыта в фрезерных работах и просто резке плюс постоянная нехватка времени. Станина для станка попала к нему по низкой цене, электронику для управления шаговыми двигателями он изготовил сам, а программ для управления станками через LPT порт — огромное количество. Совместно потратив вечер, испортив фрезу и получив средние результаты, решил оставить его в покое и заказал резку на стороне.



В качестве исходных данных отдал чертеж в формате DWG, и в итоге получил 5 лицевых панелей из оргстекла толщиной в 4 мм.

Программное обеспечение

Программное обеспечение для проекта делится на две части : для компьютера и прошивка прибора.
Прошивка (программного обеспечения для прибора), это центральная вещь в разработке, именно она в конечном счете решает, как хорошо получилось реализовать потенциал, заложенный в железе и схемотехнике.
Задачи решенные в прошивке : инициализация всех устройств (память, USB, TFT, ADC, SPI, PWM, CAP); регулировка выходного напряжения на вентиляторах, измерение температуры, связь с компьютером по интерфейсу USB, отображение информации на дисплее, управление СВО.


Управление вентиляторами


На каждый канал подключения вентилятора были выделены следующие ресурсы процессора : ADC (обратная связь по напряжению) , CAP (подсчет частоты вращения вентилятора), PWM (ШИМ для схемы формирования напряжения). Регулирование осуществляется по прямопропорциональному закону : при помощи АЦП производится измерение текущего напряжения на вентиляторе, если напряжение выше заданного скважность импульсов ШИМ уменьшается на единицу, если напряжение ниже заданного скважность увеличивается на единицу. Параллельно процессор подсчитывает скорость вращения лопастей вентилятора, используя тахосигнал.



Измерение температуры

В схеме измерения температуры используются : операционный усилитель, аналоговый мультиплексор, источник опорного напряжения и внешний АЦП с интерфейсом SPI. Измерение производится следующим образом : при помощи аналогового мультиплексора к ОУ подключается выбранный канал, на АЦП производится преобразование напряжение — код и процессор производит вычисление температуры по формуле :

Temp[v]=(Temp[v]*0.95)+(0.05*(((Vout/n)/((VREF-(Vout/n))/RNM[v]))-R0)/TCR);

Связь с компьютером

Для связи с компьютером используется интерфейс USB 2.0 High Speed, класс устройства HID;VID 0xC251 PID 0x1301; размер репортов по 64 байта.

InReport :

1. 16 байт температура по каналам 1..8
2. 12 байт напряжение на вентиляторах 6 каналов 1..6 (обратная связь по напряжению)
3. 12 байт частота вращения вентиляторов 6 каналов 1..6
4. 12 байт напряжение на вентиляторах 6 каналов 1..6 (уставка по напряжению для вентиляторов)

OutReport :

1. 12 байт — уставка по напряжению на вентиляторах в ручном режиме управления.
2. 1 байт - выбор режима (ручной\автоматический)


Вывод на дисплей.


Интерфейс дисплея 24 bpp – RGB, т.е. по 8 бит на каждый цвет ( 8 : 8 : 8). Процессор позволяет подключать дисплей в различных режимах (4:4:4, 4:5:4 …. 8 : 8 : 8 ), сужая интерфейс также сужается доступный диапазон цветов и уменьшается размер буфера экрана. При инициализации LCD контроллера процессора LPC2478 указывается адрес буфера экрана и пересылка данных из памяти в дисплей осуществляется по DMA, что очень удобно — записал в память, изображение появилось на экране.
Для вывода был необходим шрифт. Опции всего две: моноширинный либо шрифт с переменной шириной символов. Я попробовал обе, вид немоноширинного шрифта на дисплее выглядит лучше, остановился на Verdana 12. Вообще перевод шрифта — это отдельная история, и если кратко делал следующим образом :

1.Есть редактор шрифта Fony (http://hukka.furtopia.org/projects/fony/) , позволяет импорт шрифта (True Type), очень удобно шрифт отредактировать, и сделать экспорт шрифта в bmp картинку, с обрамлением точками каждой буквы. Картинка имеет разрешение количество букв*на их ширину+количество букв (пиксели границы)+1 х высота шрифта +1 . Например для шрифта вердана картинка была (есть) 3784х26.

2. Полученную картинку обрабатываю самописной программой получаю массив - описание шрифта. Массив упакованный, в формате 1bpp.

typedef struct font_struct {

unsigned int height;
unsigned int totalletter;
unsigned int *letter[256];

}font;

unsigned int *letter[256]; - массив указателей на буквы, первое число в букве ее ширина, например(если не ошибаюсь) : единица

unsigned int char48[] = {9,
0x0, 0x0, 0x0, 0x0,
0x0, 0x300, 0x180, 0x180,
0x180, 0xc0, 0xc0, 0xe0,
0x60, 0x60, 0x70, 0x30,
0x30, 0x18, 0x18, 0x18,
0xc, 0xc, 0xc, 0x6,
0x0,
};

3. Шрифт добавляю в проект USBDevice.
4. Все, можно пользоваться. Примерно так:

OutString("Вход радиатора : ",10,10);

Или вывод параметра :

sprintf(buffer,"%.1f V", FanVoltage[1]);
OutString(buffer,170,130);



Управление СВО я решил выполнить по таблице : разнице температур теплоносителя на входе в радиатор и окружения было поставлено в соответствие выходное напряжение на вентиляторах, установленных на радиаторе.

Для компьютера была написана программа, с использованием библиотеки QT, которая : определяет наличие прибора на шине, ловит события подключения\отключения ; отображает текущие параметры, позволяет переключить режим работы автоматический\ручной, а в ручном режиме управлять выходным напряжением на вентиляторах.[\big]



Кратко о моей СВО

[big]После окончания работы над программным обеспчением пришло время встраивать прибор в СВО. Датчики температуры изготовил приклеив цианакрилатом чувствительные элементы к фитингам, а для придания механической прочности сверху залил эпоксидной смолой в два слоя.





Для контроля протока жидкости в системе использовал покупной датчик с герконом.



Гораздо интереснее сделать термометрический датчик расхода, основанный на перегреве чувствительного элемента. Но для этого нужно сделать две вещи 1. сделать конструктивный узел, который поместит в поток два чувствительных элемента 2. провести работу по снятию характеристики.

На материнской плате решил закрыть водоблоками все что возможно. Материнская плата c процессором:



Видеокарта GeForce GTX 295 даже без нагрузки имеет температуру в +60 °C, а как шумела когда раскручивалась турбина – словами не описать. Вместе с водоблоком, видеокарта весит довольно много.





Снаружи остался дисплей.



Дисплей крупно, выводимые параметры, актуальные для моей СВО.



Заключение.

Перед началом работы над любым проектом нужно ставить перед собой ограничение, условия, достижение которых позволяет, сказать, что проект успешно выполнен. Условно я разделил задачи на 3 части: разработка схем, отладка железа и разработка программного обеспечения, реализующего базовый функционал, достаточный для управления СВО. Помимо этого я открыл тему обсуждения разработки на форуме в разделе Research and Development, нуждаясь в обратной связи чужом мнении о проекте.

Так как считаю на данный момент проект законченным, можно подвести итоги: весь функционал, заложенный в железе в базовой версии программного обеспечения запущен, было небольшое обсуждение на форуме, пару идей я учел и применил. Интерес к проекту проявил TiN, для которого я изготовил второй прибор на условиях его участия в разработке и организации доставки от меня до него (мы живем в разных странах). Из обсуждения на форуме сделал вывод : абсолютному большинству будет интересно не участвовать в разработке, а приобрести уже готовый прибор подешевле, который работает без напильника, прямо из коробки.

В дальнейшем имеются планы создания уменьшенной версиии контроллера СВО, примерно с такими характеристиками : цена 30$-50$, размер один 5,25 отсек, четыре 0,5А-1А канала подключения вентиляторов с подсчетом частоты вращения вентиляторов, 8 каналов подлючения датчиков температуры, диапазон от 0 до 100 °С, точность 1 °С (чувствительный элемент 10kOhm NTC, подобные датчики вкладывают в комплекты к материнским платам, видеокартам, встраивают в фитинги, да и довольно просто купить в магазине), интерфейс для связи с компьютером USB, монохромный графический дисплей 128х32 с подсветкой, клавиатура (5 кнопок), а также программное обеспечение для компьютера. Если есть заинтересованные люди в разработке контроллера - можем обсудить возможность и условия совместной работы.

Ссылки :

Схемы на USBDevice

Тема обсуждения разработки USBDevice

Тема обсуждения данной статьи

Арищенко Иван aka ivan1180
Цеменко Илья aka TiN XDevs.com

Отдельно спасибо :

Тыртову Вячеславу за помощь в разработке программного обеспечения.
Шлегелю Василию за советы по железной части.
Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают