(098) 067-12-26 Киевстар (098) 067-12-26   Киевстар
(066) 142-24-48 Vodafone (066) 142-24-48   Vodafone
(098) 067-12-26 Lifecell (063) 642-36-59   Lifecell

График работы магазина:

Пн-Пт: 10.00 - 19.00

Сб-Вс: выходные

г. Киев, ул. Васильковская, 30
ст.м. "Васильковская"

Каталог

Школа робототехники intRobots

Академия профессий будущего

Академия Профессий Будущего в Киеве создана как школа дополнительного образования в сфере высоких технологий для нестандартно мыслящих и мотивированных детей. По окончании Академии полученные знания помогут ребятам в выборе специальности. Ученики школы

Обзор pi-TOP - ноутбук на базе Raspberry

Недавно мне в руки попался эдакий конструктор - ноутбук на базе Raspberry - pi-TOP, который нужно собрать своими самому. Обзор процесса сборки и того, что получилось можно прочитать в этой статье.

Школа РОБОТОТЕХНИКИ intRobots

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

Измерение силы тока датчиком SCT-013-030

Давно хотел приобрести датчик тока SCT-013 и сделать небольшой контрольный прибор в своем домашнем электрощитке. Больших токов у меня не бывает, больше 30А точно нет, посему выбор пал на SCT-013-030, с максимальным током измерения 30А.

Блочное шифрование в IoT

Исторически сложилось, что для IoT (Internet of Things) на базе ZigBee сетей в первую очередь стояла цель минимизировать энергопотребление, потому вопрос безопасности остался без внимания. В данной статье предлагается пример безопасной IoT системы с
Напиши статью и получи скидку!

Термістор (терморезистор). ADC в stm32

2017-02-21

Все статьи →
Богдан Парфенюк
 
Дана стаття являється кроком до створення табло на основі дисплею 320х240px з контролем температури для лабораторного блока живлення.
 
Тому використовуються саме Термістори. Вони мають мізерну ціну, малий розмір (їх зручно прикріпити до радіатора), доступні, також вони не бояться вологи та працюють в будь яких умовах.
А ще їх можна віддалити від контролера на доволі велику відстань і не перейматися про втрату сигналу. Також, нагадаю що маючи викладений нижче алгоритм роботи та код програми, можна не прикладаючи багато зусиль (переписати лише ініціалізацію ніжок) застосувати цей код до будь-якого контролера stm32. У моєму випадку це stm32f103vet6
 
Терморезистори (термістори) бувають різними за виглядом але всі вони являються резисторами і тому основною їхньою характеристикою є опір (який вони жваво міняють залежно від прикладеної до них температури ). Я використовую резистор 10кОм (це можна визначити помірявши його опір при кімнатній температурі С). Наприклад ще є термістори на 100кОм. 
 
Обладнання:
 
Термістор (терморезистор) - https://arduino-ua.com/prod1737-termistor-tes-3950-100-kom 
Реле, наприклад - https://arduino-ua.com/prod1706-modyl-rele-5v-10a);
 
Схема підключення: 
 
Живлення та підсвітка LCD шилда  3.3V. Працює по FSMC у 16-бітному режимі.
 
Розпіновка задіяних ніжок контролера на Малюнку 1 (зеленим позначені піни тачскріна)
 
Малюнок 1
 
Ще хочу повідомити що використовуємо ми ADC контролера тому потрібно стабілізувати живлення для нього. Наприклад використовувати якийсь блок живлення на 5V (якщо ми живимо демоплату), а не просто втикнути все в USB комп’ютера. Інакше напруга просяде і значення VREF зміниться, наслідком цього буде некоректне вимірювання спаду напруги на термісторі.
 
На Малюнку 2 зображено як підєднати терморезистор.
Чому саме так? Це тема закону Ома та дільників напруги тому кому цікаво може погуглити це =)
 
Малюнок 2
 
Код програми та логіка роботи:
 
@Код прикладаю в архіві. Там цілий проект EmBits. Це найшвидший спосіб перевірити усе в діїі та застосувати.
Це IDE безкоштовне - http://www.emblocks.org/web/downloads-main
 
Тільки встановити і вже можна відразу працювати. Якщо колись встановлювали Microsoft Office то проблем з цим не виникне_)
Запустивши проект спочатку перевіримо чи правильно працює наш ADC.
Для цього в скачаному проекті, в мейні (відразу після init_adc();) вписуємо наступне:
 
uint16_t test=0;
While(1)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
       test = adc_res;
}
 
Компілюємо і запускаємо відладку. Додаємо у watch змінну test і дивимося що вона показує.
При під’єднанні обраного виводу ADC до VREF(у нашому випадку 3.3V) значення повинно бути рівне 4095 а коли приєднати цей пін до землі (від’єднавши при цьому від 3.3V) то значення test буде рівне нулю. Якщо все добре значить рухаємось далі, якщо ні то шукаємо помилки в схемі або ініціалізації ADC (можливо ви щось додавали своє тому краще спочатку протестувати те що є а потім тільки вносити свої зміни).
 
Тепер складаємо схему з резистором і терморезистором як зображено на малюнку 2.
Видаляємо що є в мейні і вписуємо туди наступне і перекомпільовуємо (це теж певний тест):
 
initPeriph();
initFSMC();
initLCD();
init_adc();
fillRectangle(0,0,320,240,RED);
delay(1000);
double z=0,a=0;
fillRectangle(0,0,320,240,BLACK);
while(1)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
   z=seredn_ADC(100);
        if(z!=a&&z!=a+1&&z!=a-1)
{   drawFloat(a,4,20,0,4,BLACK);  drawFloat(z,4,20,0,4,YELLOW0);   a=z;   }      
delay(ChasotaVumir);
}
 
Результатом такої програми буде вивід на дисплей спаду напруги на нашому терморезисторі. Це дасть змогу перевірити те що міряє наш ADC і порівняти значення з показами мультиметра.
 
ВАЖЛИВО те що перед тим як запускати вище приведений кусочок коду потрібно вказати значення VREF у дефайнах зверху (ну це не зовсім VREF, це певний множник який вираховується відносно дійсного у вас VREF).
Яку ж туди впистати змінну? Щоб дізнатися вмикаємо нашу плату до нашого живлення і міряємо напругу між землею і 3.3V. Все залежить від стабільності джерела живлення. Припустим у нас значення 3.24V, знайючи це ми ділимо його на 4095 і отримуємо приблизно 0,0008V. Ось це значення і потрібно записати. Усе, тепер компілюємо і перепрошиваємо.
 
Результат тестера може різнитися від показників ADC. У мене різниця склала 0.5V. думаю це визвано тим що вольтметр в тестері можливо враховує додатковий опір щупів який він вносить в систему чи щось таке…
А ще я користуюся китайським не оригінальним тестером який має значно більшу похибку ніж оригінальний та якісний мультиметр.
Результат цього тесту можна переглянути тут - https://www.youtube.com/watch?v=YDU45s27oEM
 
Тепер зробимо так щоб малювався графік (для якоїсь естетичної наглядності). При збільшенню температури опір падає і значення напруги теж, тобто значення температури обернено пропорційне спаду напруги на термісторі. Запустимо в мейні той код який був з самого початку в архіві після скачування і відрегулюємо чутливість нашої гістаграми.
Це можна зробити погравшись із значеннями в дефайнах (значення задаються цілими числами у мілісекундах):
#define ChastotaGistogramu 2  //(ms); 1000ms==1s
#define ChasotaVumir 80 //(ms);  1000ms==1s
 
Результат повинен бути чимось схожим на це: https://www.youtube.com/watch?v=v-aKbQPOptM
 
Тепер до самого цікавого. Як тепер нам отримати значення температури? Відповідь одна – імперичним методом. Діло в тому що ніякі формули нам у цьому не допоможуть, щоб не писав даташит усі термістори різні і залежності опору від температури у них не лінійні. Тому якщо ми хочемо отримати мінімальну похибку то потрібно заміряти значення спаду напруги на даному термісторі при кожному значенню температури яке нам потрібне. Відповідно результатом буде щось типу табличці:
 
Тільки ця складена відносно опору а у нас буде відносно температури. У мому випадку все що нижче 1.31V це температура більша 30 градусів а все що більше 1.75V це температура нижча 20 градусів. Ці два значення я теж вписав у дефайни і використовую їх, для прикладу, як порогові значення вмикання і вимикання двох реле.
Коли значення температури більше 30 градусів (менше 1.31V) то вмикається одне реле (інакше воно вимкнуте), якщо значення температури менше 20 градусів (більше 1.75V) то вмикаєтся друге реле (при всіх інших значеннях воно вимкнуте). Реле живляться від 3V і сигналом спрацювання для них логічний нуль на пінах PE2 та PE3.
Результат можна побачити на відео - https://www.youtube.com/watch?v=JT5Dc-ePWCg
 
ВИСНОВОК: 
Термістор являється достойною заміною різним цифровим та аналоговим датчикам температури (при умові що в контролері є ADC). Таким чином можна здешивити свій виріб, а результат і точність вимірів температури не зміниться. При повторені цього проекту не обов’язково використовувати дисплей.
Порогові значення можна змінювати по бажанню в дефайнах.
Треба ще розуміти що термістор реагує на температуру свого корпусу і щоб зовнешнє середовище передало йому свою температуру яку ми хочемо виміряти потрібен час  (у мене він складав 2-3 секунди). Тобто потрібно забезпечити швидкий теплообмін між термістором і обєктом вимірювань. 
 
Успіхів при повторені!

Ваша оценка статьи:

Отлично
Хорошо
Удовлетворительно
Плохо
Очень плохо

Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
оплата картами Visa и MasterCard