Охлаждение электроники (драйверов) станка или AVR Atmega8 + АЦП + ШИМ
Привет всем интересующимся проблемой охлаждения элекроники ЧПУ станков а также всем начинающим в изучении AVR.
Я решил поделиться кое-каким полученным за недавнее время опытом и рассказать о кое-каких граблях чтобы вы на них не наступали. Итак поехали…
ДАНО:
- 4 драйвера PLD880
- блок выпрямителя PLZ006
- металлический корпус блока управления станка
ЗАДАЧА:
- разместить всю элекронику внутри закрытого блока и обеспечить температурный режим необходимый для нормальной работы электроники.
В частности требуется ограничить нагрев драйверов и выпрямителя свыше 40С (на корпусе).
Для решения этой задачи потребуется:
(а) как-то измерять температуру устройств
(б) разместить вытяжные вентиляторы и как-то ими управлять
(в) приятным дополнением будет возможность отображения текущих температур в каком-либо виде.
Подобное устройство с успехом можно построить на базе программируемых микроконтроллеров. Раньше подобными вещами я не занимался но было интересно попробовать. Выбор пал на AVR. Для опытов взял Atmega8A, закупился комплектухой и сел за программирование и паяльник.
В результате на свет появился контроллер со следующими функциями:
- отслеживание 5 независимых температур в реальном времени (использованы аналоговые датчики TMP36)
- отображение этих температур на светодиодных шкалах (5 шкал по 8 светодиодов)
- управление скоростью вращения 3 вентиляторов (2 вентиля 92мм, 1 вентиль = 60мм; потребление тока до 240мА каждый)
- возможность принудительного включения всех вентиляторов на полную мощность с индикацией этого режима
Параллельно освоил использование регистров (как обычных так и сдвиговых) для целей экономии ножек на МК.
* * *
Принцип работы устройства прост:
(а) аналоговые датчики подключаются к выходам от АЦП (ADC) микроконтроллера AVR (Atmega8A) и в цикле постоянно считываются их показания. Меня интересует температурный диапазон 20…40С. для используемых датчиков TMP36 это соответствует диапазону напряжений 700…900мВ.
/* Нюанс №1: грабли с АЦП
Первоначально я планировал использовать внешний источник опорного напряжения на 200-250мВ и для этого предусмотрел специальный делитель на плате. Кроме того сделал еще 5 делителей с выходов датчиков чтобы понизить напряжение на 700мВ. Таким образом у меня на входе в МК было бы напряжение в диапазоне 0…200~250мВ.
Но наступил на грабли: даташит на МК следует читать ПОЛНОСТЬЮ а не только “целевые” на ваш взгляд разделы. Почему? Потому что разделе по АЦП ни слова не говорится про ограничения по напряжению для внешних ИОН! Зато ближе к концу даташита есть раздел “26.8. ADC Characteristics” где хитрый Atmel указывает минимальный уровень для внешнего ИОН = 2.0В!.. Разумеется у меня не возникло мысли изучать этот раздел если я вдоль и поперек изучил раздел посвященный АЦП! Таким образом я “пролетел” с первоначальным планом:(
В результате я воспользовался внутренним ИОН на 2.56В. Мой диапазон 700…900~950мВ составляет лишь небольшую его часть поэтому точность измерений у меня сократилась по сравнению с задуманной но для моих целей даже этого было достаточно.
ВЫВОД: Имейте в виду! В поисковиках вы эту проблему сразу не найдете!
*/
(б) далее в зависимости от этих показаний устанавливаются скороcти вентиляторов. вентиляторы питаются 12В в то время как вся схема работает от 5 вольт. для согласования уровней я использовал драйверы L293D.
/* нюанс №2: L293D
во-1 хочу поделиться ссылкой на наиболее наглядное на мой взгляд описание сей микрухи: www.myrobot.ru/wiki/index.php?n=Components.L293Fea…
во-2 повсюду в инете описывается один и тот же способ подключения драйверов - как написано в даташите. однако где-то я наткнулся на ссылку где подглядел более интересный вариант (уместно когда используется вращение только в одну сторону:
такое подключение позволяет быстрее раскручивать двигатель.
именно такое подключения я и реализовал.*/
(в) Управление скоростью вращения вентилятора осуществляется при помощи ШИМ: меняя скважность 5-вольтового канала ENABLE мы меняем скважность на 12-вольтовых выходах OUTPUT и вращаем вентилятор. каждый канал драйвера способен прокачатать до 600мА поэтому вентили прекрасно работают. это что касается стороны драйвера.
Что касается стороны МК то для работы с 3 вентиляторами я использовал 3 ШИМа которые получил из одного 8-битного и одного 16-битного таймеров.
(г) Устройство можно вручную перевести в режим “boost” когда все вентиляторы принудительно включаются на полную мощность. Это может пригодиться для быстрого охлаждения. Для этого МК следит за ногой к которой подключен тумблер. В случае активации режима устройство будет мерцать шкалами для визуальной идентификации.
* * *
Немного фоток процесса:
К сожалению без косяков разумеется не обошлось… Изначально я был сильно ограничен в размерах (размер платы 140х37) поэтому приходилось все разводить “впритык”. Пока оптимизировал всю схему то упустил из виду несколько питающих дорожек. Протравил, облудил, спаял и… не работают шкалы 😦(( Оказалось что 3 плюсовые дорожки к регистрам забыл дорисовать… Пришлось пробрасывать проводами.
И такая же петрушка вышла с 2 дорожками на драйверах.
В остальном же все вроде получилось как задумал.
// Прошивку написал на Си. Вышло где-то 350 строк исходного кода и 4313 байт самой прошивки.
Ну и вот небольшое видео работы устройства:
Я решил поделиться кое-каким полученным за недавнее время опытом
МаладеЗ!
Шикарно все работает и сделано -отлично.
А “гистерезис” в программе сделан, чтобы при работе в зоне включения/выключения вентиляторы не дергались туда/сюда?
Ну, следующий шаг- прочитать про элементы Пельтье и сделать систему на них 😃
Я ограничился программной скользящей средней из 64 элементов. Дребезг существенно сократился. Но в переходном районе есть узкая область где возможны включения/выключения.
Еще один нюанс с вентиляторами: гул и нежелание работать на низких оборотах. Вылечил программным фильтром:
У меня шкала загрузки - это диапазон он 0…255. Диапазон разбит на 8 участков для работы светодиодов. Вентиляторы управляются линейно но игнорируют начальную область данного диапазона: большие работают от 64 до 255, маленький - от 92 до 255. Благодаря этому пропал гул и нестабильность.