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
Отдельно спасибо :
Тыртову Вячеславу за помощь в разработке программного обеспечения.
Шлегелю Василию за советы по железной части.