Малогабаритный термометр |
Автор Андрей (aka MOLCHEC) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13.07.2008 г. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Для контроля процесса ламинирования понадобился термометр, определяющими факторами являлось возможность мерить температуру на торце детали шириной 5 мм и менее, т.е. активная часть датчика должна быть минимальной. Температурный диапазон 0... 200 ºС, при этом сам датчик должен выдерживать более высокую температуру. Источник питания 24В. Поскольку задача не очень сложная я решил её немного усложнить, решив для себя сделать данный девайс минимальными габаритами, и вот что из этого получилось.
В качестве датчика был выбран KTY84-130 - это кремневый терморезистр от PHILIPS, у данного датчика диапазон рабочих температур -40...300 °С, что как нельзя лучше для меня подходит. Диаметр датчика 1,6 длина 3,6мм - корпус SOD68 (DO-34), т.е активная часть датчика как раз подходит для выполнения поставленной задачи. Для индикации был выбран светодиодный индикатор от старого компа, ничего другого просто под рукой не было. Управляющий контроллер ATMEGA8L-8AU, его ресурсов вполне достаточно. Поскольку нет требований по стабильности частоты, я использовал внутренний RC генератор, что позволило освободить дополнительные выводы порта B. Ну вот дело дошло до схемы, её я рисовал с печатной платы и специально для статьи поэтому не исключены ошибки.
Несколько слов по монтажу: конденсатор С3 припаивал непосредственно к пятачку платы и к пятачку аналоговой земли, используя отрезок провода, сам конденсатор приклеил под индикатором. Плату разводил под ещё один конденсатор его ставить не обязательно. Аналоговую и цифровую земли необходимо соединить в одной точке, я это сделал в месте подключения к источнику питания. Провод до датчика необходимо использовать экранированный. Сам датчик имеет анод и катод, катод обозначен полоской и его следует подключать к земле. Сопротивление резистора R3* выбирается в зависимости от напряжения питания, опорного напряжения и диапазона температуры. В данном случае напряжение питания 5В, опорное напряжение 2,56, диапазон 0...199. Для расчета был создан EXEL файл, в который с даташита предварительно забил значения сопротивления датчика (см. Таблица 1). Колонка ∆U R содержит значения падения напряжения на сопротивлении. Таким образом значение сопротивления R3 (в таблице Rд) выбирается таким чтобы падение напряжения при максимальной температуре было немного больше опорного напряжения. Колонка ADC показывает значения 10-ти разрядного преобразования АЦП на основании колонок Т °С и ADC строим график, который затем аппроксимируем в линию Трейда и получаем уравнение функции T(ADC), которое используем для преобразования результата АЦП в цифровое значение температуры. У меня получилось уравнение y= 2,5338x + 407,22, где y-ADC; x-T. Отсюда T(ADC)=(407-ADC)/2,5. Из данных видно, что ноль функции на самом деле при ADC=399. Преобразуем выражение для вычисления средствами контроллера, умножив его на 100, получим T(ADC)=((399-ADC)*100)/250. Полученное выражение подставляем в колонку Проверка и корректируя значения знаменателя добиваемся минимального отклонения в заданном диапазоне. В результате у меня получилось выражение T(ADC)=((399-ADC)*100)/264. Поскольку разброс сопротивления датчика составляет в среднем 4...5% то отклонение на 1...2 °С особо не влияют на общую погрешность. Таблица 1. Пример расчёта.
Ну вот с теорией покончено приступаем к написанию прошивки.
// МК : M8
#define SetBit(x,y) (x|=y)
unsigned int ACP,temp; void port_init(void){
} //ADC инициализация void adc_init(void){
}
#pragma interrupt_handler adc_isr:15
} void init_devices(void){
}
void LED_putc(unsigned char ch){
} int main(void){
} Cтроки, выделенные красным цветом, специфичны для компилятора ICC for AVR, при использовании другого компилятора необходимо подключать соответствующие файлы согласно документации.
Для повышения качества преобразования используется спящий режим ADC. Подробнее о конфигурации спящих режимов и их типов я писал Изначально микроконтроллер уже сконфигурирован на работу от внутреннего RC генератора, частота 1 МГц. На всякий случай привожу значения конфигурационных ячеек для работы внутреннего RC (FUSE bits) CKEL3...0 0001. Паяльником нагревал датчик до 150 °С, пробовал зажигалкой до 199 °С датчик остался жив устройство работает без замечаний.
Общий потребляемый устройством ток порядка 33мА, при питании от 12В наблюдается слабый нагрев стабилизатора LP2950, несмотря на то что входное напряжение стабилизатора до 30В если требуется запитать напряжением выше 12В то желательно поставить ограничивающий резистор из учёта R=(Uвх-10)/0,033 или заменить стабилизатор на более мощный например LM7805. Применение МК с индексом L позволяет снизить напряжение питания до 2,7В однако при этом придётся снизить сопротивление резистора R2, микросхему LP2950 тогда можно исключить. На этом вроде всё, вопросы как обычно в форум.
Из файлового архива вы можете скачать все необходимые файлы. Добавить в любимые (2) | Просмотров: 51424
Только зарегистрированные пользователи могут оставлять коментарии. |
« Пред. | След. » |
---|