Технологија сензора температуре

Сонда сензора температуре (Дизајн функционалног кола ДС18Б20 и ПТ100)

ДС18Б20 шема и ЦУБЕМАКС конфигурација

Поређење између ПТ100 Сензор температуре сонда и ДС18Б20 модул
1) Основни принцип аквизиције сигнала
① Отпор ПТ100 се мења пропорционално са температуром (што је температура виша, што је отпор већи), али је промена отпора веома мала, о 0.385 Ох / степен;
② Опсег мерења температуре ПТ100 је -200℃ -200℃, и на 0℃, отпор је тачно једнак 100 Ох;
③ Радна струја ПТ100 треба да буде мања од 5 мр;
④ Иако се отпор ПТ100 мења пропорционално са температуром, њену брзину промене (то је, К вредност К вредност К вредност) разликује се у различитим температурним опсегима.

2) ПТ100 Отпорност на температуру Промените табелу

ПТ100 Отпорност на температуру Промените табелу

3. ПТ100 погонско коло

ПТ100 погонско коло

ПТ100 погонско коло

1) Путем методе поделе напона, АД прикупља ПТ100 напон да би добио вредност отпора за израчунавање температуре
Вредност отпора ПТ100 у води на собној температури (25℃25℃25℃) је о 109.89 Ох.
Микроконтролер даје напон од 3,3 В, а напон подељен са ПТ100 је приближно:
109.89 ∗ 0.005 = 0.54945 У

АД вредност конвертована према АД формули конверзије је приближно:
0.54945 / 3.3 ∗ 4096 = 681.98 ≈ 682

Када температура порасте за један степен, под претпоставком да отпор ПТ100 само расте 0.385 Ох, вредност промене подељеног напона је приближно једнака:
0.385 ∗ 0.005 = 0.001925 У

АД вредност конвертована према АД формули конверзије је приближно:
0.001925 / 3.3 ∗ 4096 = 2.39 ≈ 2

У експерименту, утврђено је да због нестабилног напона 3.3В стм32 напајања, АДЦ је прикупио ПТ100 флуктуације напона и грешка поделе напона је била велика. Решење за оптимизацију је да се дизајнира коло извора константне струје. Сакупљањем напона ПТ100 и струје извора константне струје, може се добити отпор ПТ100, и тада се може добити вредност температуре.

2) Коло извора константне струје засновано на ЛДО регулатору (МД5333)
Постоји много погонских кола за тестирање ПТ100 на Интернету, као што је ДЦ мостно коло, коло извора константне струје на бази операционог појачавача, итд. Аутор је доста времена посветио и одабиру возног кола, с обзиром на тежину израде плоче и број компоненти, и на крају изабрао коло извора константне струје засновано на ЛДО регулатору (МД5333). Шема кола је следећа:

Коло извора константне струје ЛДО регулатора (МД5333)

Коло извора константне струје ЛДО регулатора (МД5333)

У овом тренутку, избор хардвера је у основи завршен. Коришћена развојна плоча је Зхенгдиан Атом Ф10ЗЕТ6 Елите Боард

ДС18Б20 модул
Да би се тестирала температура у реалном времену и поређење температуре ПТ100, ДС18Б20 модул је додат за тест поређења калибрације

1) Увод у ДС18Б20
ДС18Б20 је сензор температуре са једном магистралом са температурним опсегом теста од -55~+125℃ и прецизношћу од ±0,5℃. Температура поља се директно преноси на дигитални начин са једном магистралом, што у великој мери побољшава способност система против сметњи. Може директно очитати измерену температуру, и може да реализује 9~12-битни метод читања дигиталних вредности кроз једноставно програмирање у складу са стварним захтевима. Његов радни напон је 3~5,5В, и користи разне облике паковања, чинећи подешавање система флексибилним и практичним. Подешена резолуција и температура аларма коју је поставио корисник се чувају у ЕЕПРОМ-у и још увек се чувају након нестанка струје.

Дизајн кола ДС18Б20

Дизајн кола ДС18Б20

2) Увод у радни тајминг ДС18Б20
Сви уређаји са једном магистралом захтевају строго време сигнала да би се обезбедио интегритет података. ДС18Б20 има 6 типови сигнала: ресетовање пулса, одзивни пулс, писати 0, писати 1, читати 0 и читај 1. Сви ови сигнали, осим импулса одзива, су синхрони сигнали које шаље домаћин. И све команде и подаци се прво шаљу са малим битом бајта.

ДС18Б20 импулс за ресетовање и одзивни импулс

ДС18Б20 импулс за ресетовање и одзивни импулс

① Ресетујте пулс и одзивни импулс
Све комуникације на једној магистрали почињу са секвенцом иницијализације. Хост даје низак ниво и одржава низак ниво најмање 480ус да генерише импулс за ресетовање. Тада домаћин пушта аутобус, и 4.7К пулл-уп отпорник повлачи једну магистралу високо, са временом кашњења од 15~60ус, и улази у режим пријема (Рк). Затим ДС18Б20 повлачи магистралу ниско за 60~240ус да генерише импулс ниског нивоа одзива.

Време писања ДС18Б20

Време писања ДС18Б20

② Упишите тајминг
Време писања укључује писање 0 одређивање времена и писање 1 тајминг. Сва времена писања захтевају најмање 60ус, и потребно је најмање 1ус време опоравка између два независна времена писања. Оба времена уписивања почињу тако што домаћин повлачи сабирницу. Пишите 1 тајминг: домаћин даје низак ниво, кашњења за 2ус, а затим пушта аутобус, одлагање 60ус. Пишите 0 тајминг: домаћин даје низак ниво, кашњења за 60ус, а затим пушта аутобус са закашњењем од 2ус.

ДС18Б20 Време читања

ДС18Б20 Време читања

③ Читање времена
Уређаји са једном магистралом преносе податке до хоста само када хост издаје време читања. Стога, након што хост изда команду за читање података, време читања мора бити генерисано одмах како би славе могао да преноси податке. Сва времена читања захтевају најмање 60ус, и потребно је најмање 1ус време опоравка између два независна времена читања. Свако време читања иницира домаћин, који повлачи аутобус за најмање 1ус. Домаћин мора ослободити сабирницу током читања времена и узорковати статус магистрале у року од 15ус након почетка мјерења времена. Типичан процес читања времена је: домаћин даје кашњење ниског нивоа од 2ус, онда се домаћин пребацује у улазни режим кашњења од 12ус, затим чита тренутни ниво једне магистрале, а затим одлаже 50ус.

ДС18Б20 отвара серијски порт за штампање информација о температури

ДС18Б20 отвара серијски порт за штампање информација о температури

Након разумевања времена једног аутобуса, хајде да погледамо типичан процес очитавања температуре за ДС18Б20. Типичан процес очитавања температуре за ДС18Б20 је: ресет → пошаљи СКИПРОМ (0кЦЦ) → пошаљи наредбу за покретање конверзије (0к44) → кашњење → ресетовање → пошаљи СКИПРОМ команду (0кЦЦ) → пошаљи меморијску команду (0кБЕ) → прочитај два бајта података (тј. температура) непрекидно → крај.

3) Шематски дијаграм и ЦУБЕМАКС конфигурација
Са шематског дијаграма, може се видети да је ДС18Б20 омогућен преко ПГ11 порта да отвори серијски порт за штампање информација о температури

ДС18Б20 шема и ЦУБЕМАКС конфигурација

ДС18Б20 шема и ЦУБЕМАКС конфигурација

Интерфејс сензора температуре и влажности ДС18Б20

Интерфејс сензора температуре и влажности ДС18Б20

4) Кодни део
Део кода трансплантира дс18б20 библиотеку Зхенгдиан Атом-а и прави мале модификације

#ифндеф __ДС18Б20_Х
#дефинише __ДС18Б20_Х

#укључити “тим.х”
/***********************************************************************************/
/* ДС18Б20 пин дефиниција */

#дефинише ДС18Б20_ДК_ГПИО_ПОРТ ГПИОГ
#дефинише ДС18Б20_ДК_ГПИО_ПИН ГПИО_ПИН_11
#дефинише ДС18Б20_ДК_ГПИО_ЦЛК_ЕНАБЛЕ() учинити{ __ХАЛ_РЦЦ_ГПИОГ_ЦЛК_ЕНАБЛЕ(); }док(0) /* Омогућавање сата ПГ порта */

/**********************************************************************************************/

/* ИО радна функција */
#дефинише ДС18Б20_ДК_ОУТ(к) учинити{ к ? \
ХАЛ_ГПИО_ВритеПин(ДС18Б20_ДК_ГПИО_ПОРТ, ДС18Б20_ДК_ГПИО_ПИН, ГПИО_ПИН_СЕТ) : \
ХАЛ_ГПИО_ВритеПин(ДС18Б20_ДК_ГПИО_ПОРТ, ДС18Б20_ДК_ГПИО_ПИН, ГПИО_ПИН_РЕСЕТ); \
}док(0) /* Излаз порта података */
#дефинише ДС18Б20_ДК_ИН ХАЛ_ГПИО_РеадПин(ДС18Б20_ДК_ГПИО_ПОРТ, ДС18Б20_ДК_ГПИО_ПИН) /* Унос порта података */

уинт8_т дс18б20_инит(воид); /* Иницијализујте ДС18Б20 */
уинт8_т дс18б20_цхецк(воид); /* Проверите да ли ДС18Б20 постоји */
кратко дс18б20_гет_температуре(воид);/* Добијте температуру */

#ендиф

5. Инфрацрвени даљински управљач
1) Протокол кодирања бежичног модула

Широко коришћене методе кодирања за инфрацрвено даљинско управљање су: НЕЦ протокол ПВМ (модулација ширине импулса) и РЦ-5 протокол компаније Пхилипс ППМ (модулација пулсне позиције). Даљински управљач који долази са развојном плочом користи НЕЦ протокол, који има следеће карактеристике:

1. 8-битну адресу и 8-битну дужину инструкције;

2. Адреса и команда се преносе два пута (да би се обезбедила поузданост);

3. ПВМ модулација положаја импулса, са радним циклусом преношеног инфрацрвеног носиоца који представља “0” и “1”;

4. Носећа фреквенција је 38 кХз;

5. Време бита је 1,125 мс или 2,25 мс;

У НЕЦ протоколу, како подесити податке у протоколу на ‘0’ или '1'? Ево, инфрацрвени пријемник и инфрацрвени предајник су одвојени.

Инфрацрвени предајник: Пошаљите податке протокола „0“ = 560ус преноса сигнала носиоца + 560нас без преноса сигнала носиоца

Пошаљите податке протокола „1“ = 560ус преноса сигнала носиоца + 1680нас без преноса сигнала носиоца

Дефиниција бита инфрацрвеног предајника је приказана на слици испод

Инфрацрвени пријемник: Пријем података протокола „0“ = 560ус низак ниво + 560нас на високом нивоу

Пријем података протокола „1“ = 560ус низак ниво + 1680нас на високом нивоу

Формат података НЕЦ команде даљинског управљача је: терминал за синхронизацију, адресни код, адресни инверзни код, контролни код, контролни инверзни код. Код за синхронизацију се састоји од ниског нивоа од 9 мс и високог нивоа од 4,5 мс. Адресни код, адресни инверзни код, контролни код, и контролни инверзни код су сви 8-битни формати података. Шаљу се по редоследу ниског бита први и високог бита последњи. Инверзни код се користи за повећање поузданости преноса.

Стога, хватање улаза се може користити за мерење ширине импулса високог нивоа да би се постигло декодирање даљинског управљача.
2) Шематски дијаграм и ЦУБЕМАКС конфигурација

Са шематског дијаграма, можемо видети да је бежични модул омогућен преко ПБ9 пина и прикупља се преко 4 канали ТИМ4:

Подразумевани пин ТИМ4_ЦХ4 није ПБ9, па га треба ручно подесити, а истовремено се укључује и поставка прекида

3) Кодни део
Ухватите растућу ивицу кроз функцију повратног позива тим

У овом тренутку, декодирани сигнал се може добити:

У овом тренутку, подаци су сложенији и могу се мало обрадити:

Ефекат је следећи:
Последње две цифре су декодирани и његов инверзни код. У овом тренутку, може се дефинисати као макро за подешавање прага температуре:

Ефекат је следећи:

Инфрацрвени код дела:

/* УСЕР ЦОДЕ БЕГИН Хеадер */
/**
******************************************************************************
* @филе : маин.ц
* @бриеф : Главно тело програма
******************************************************************************
* @аттентион
*
* <х2><центар>&копија; Цопиригхт (ц) 2024 СТМицроелецтроницс.
* Сва права задржана.</центар></х2>
*
* Ову софтверску компоненту лиценцира СТ под лиценцом БСД 3-клаузуле,
* тхе “Лиценца”; Не можете користити ову датотеку осим у складу са
* Лиценца. Копију лиценце можете добити на адреси:
* опенсоурце.орг/лиценсес/БСД-3-Цлаусе
*
******************************************************************************
*/
/* КРАЈ КОД КОРИСНИКА Заглавље */
/* Укључује ——————————————————————*/
#укључити “маин.х”
#укључити “тим.х”
#укључити “усарт.х”
#укључити “гпио.х”

/* Приватно укључује ———————————————————-*/
/* КОРИСНИЧКИ КОД ПОЧЕТАК Укључује */
#укључити “стдио.х”
#укључити “стринг.х”
#дефинише МАКСУП 157
#дефинише МАКСДОВН 87
#дефинише МИНУП 221
#дефинише МИНДОВН 61
/* КОРИСНИЧКИ КОД КРАЈ Укључује */

/* Привате типедеф ———————————————————–*/
/* КОРИСНИЧКИ КОД БЕГИН ПТД */

/* КОД КОРИСНИКА КРАЈ ПТД */

/* Приватно дефинише ————————————————————*/
/* КОРИСНИЧКИ КОД БЕГИН ПД */
/* КОД КОРИСНИКА КРАЈ ПД */

/* Приватни макро ————————————————————-*/
/* КОРИСНИЧКИ КОД ПОЧИЊЕ ПМ */

/* КОРИСНИЧКИ КОД КРАЈ ПМ */

/* Приватне варијабле ———————————————————*/

/* КОРИСНИЧКИ КОД БЕГИН ПВ */
уинт32_т упЦоунт=0;
уинт16_т ВалуеУп=0;
уинт16_т ВалуеДовн=0;
уинт8_т исУпЦапт=1;
уинт16_т ширина=0;
уинт16_т бафер[128]={0};
уинт16_т буфферИд=0;
уинт8_т рцвФалг=0;
/* КОД КОРИСНИКА КРАЈ ПВ */

/* Прототипови приватних функција ———————————————–*/
воид СистемЦлоцк_Цонфиг(воид);
/* КОРИСНИЧКИ КОД ЗАПОЧНИ ПФП */

/* КОД КОРИСНИКА КРАЈ ПФП */

/* Приватни кориснички код ———————————————————*/
/* КОРИСНИЧКИ КОД ЗАПОЧНИ 0 */
воид ХАЛ_ТИМ_ПериодЕлапседЦаллбацк(ТИМ_ХандлеТипеДеф *хтим)
{
упЦоунт++;
}
воид ХАЛ_ТИМ_ИЦ_ЦаптуреЦаллбацк(ТИМ_ХандлеТипеДеф *хтим)
{
ако(исУпЦапт)//Ако је хватање узлазне ивице
{
ВалуеУп=ХАЛ_ТИМ_РеадЦаптуредВалуе(хтим,ТИМ_ЦХАННЕЛ_4);
исУпЦапт=0;
__ХАЛ_ТИМ_СЕТ_ЦАПТУРЕПОЛАРИТИ(хтим,ТИМ_ЦХАННЕЛ_4,ТИМ_ИЦПОЛАРИТИ_ФАЛЛИНГ);
упЦоунт=0;
}
друго{
ВалуеДовн=ХАЛ_ТИМ_РеадЦаптуредВалуе(хтим,ТИМ_ЦХАННЕЛ_4);
исУпЦапт=1;
__ХАЛ_ТИМ_СЕТ_ЦАПТУРЕПОЛАРИТИ(хтим,ТИМ_ЦХАННЕЛ_4,ТИМ_ИЦПОЛАРИТИ_РИСИНГ);
видтх=ВалуеДовн+упЦоунт*65536-ВалуеУп;
ако(ширина>4400&&ширина<4600)
{
буфферИд=0;
тампон[буфферИд++]=видтх;
}
иначе ако(буфферИд>0)
{
тампон[буфферИд++]=видтх;
ако(буфферИд>32)
{
рцвФалг=1;
буфферИд=0;
}
}
}
}
воид битБуффер2нум(цхар нум[])
{
бр[0]=0;
бр[1]=0;
бр[2]=0;
бр[3]=0;
за(инт и=0;и<32;и++)
{
ако(тампон[и+1]<1000)
{
бр[и/8]=нум[и/8]<<1;
}
друго
{
бр[и/8]=нум[и/8]<<1;
бр[и/8]|=0к01;
}
}
}
/* КОРИСНИЧКИ КОД КРАЈ 0 */

/**
* @бриеф Улазна тачка апликације.
* @ретвал инт
*/
инт маин(воид)
{
/* КОРИСНИЧКИ КОД ЗАПОЧНИ 1 */
цхар принтбуфф[128]={0};
цхар нум[4]={0};
цхар кључ=0;
/* КОРИСНИЧКИ КОД КРАЈ 1 */

/* МЦУ Цонфигуратион——————————————————–*/

/* Ресетовање свих периферних уређаја, Иницијализује Фласх интерфејс и Систицк. */
ХАЛ_Инит();

/* КОРИСНИЧКИ КОД ЗАПОЧНИ Инит */

/* КОРИСНИЧКИ КОД КРАЈ Инит */

/* Конфигуришите системски сат */
СистемЦлоцк_Цонфиг();

/* КОРИСНИЧКИ КОД БЕГИН СисИнит */

/* КОРИСНИЧКИ КОД КРАЈ СисИнит */

/* Иницијализујте све конфигурисане периферне уређаје */
МКС_ГПИО_Инит();
МКС_ТИМ4_Инит();
МКС_УСАРТ1_УАРТ_Инит();
/* КОРИСНИЧКИ КОД ЗАПОЧНИ 2 */

/* КОРИСНИЧКИ КОД КРАЈ 2 */

/* Бесконачна петља */
/* КОД КОРИСНИКА ПОЧИЊЕ ДОК */
ХАЛ_ГПИО_ТогглеПин(ЛЕД0_ГПИО_Порт,ЛЕД0_Пин);
ХАЛ_ТИМ_Басе_Старт_ИТ(&хтим4);//Ажурирање тајмера генерише прекид
ХАЛ_ТИМ_ИЦ_Старт_ИТ(&хтим4,ТИМ_ЦХАННЕЛ_4);//
док (1)
{
ако(рцвФалг)
{
за(инт и=0;и<4;и++)
{
битБуффер2нум(бр);
спринтф(принтбуфф,”0кк “,бр[и]);
ХАЛ_УАРТ_Трансмит(&хуарт1,принтбуфф,стрен(принтбуфф),ХАЛ_МАКС_ДЕЛАИ);
}
// спринтф(принтбуфф,”%у “,тампон[и]);
// ХАЛ_УАРТ_Трансмит(&хуарт1,принтбуфф,стрен(принтбуфф),ХАЛ_МАКС_ДЕЛАИ);
// }
ХАЛ_УАРТ_Трансмит(&хуарт1,”\рн”,2,ХАЛ_МАКС_ДЕЛАИ);
рцвФалг=0;
}
принтф(“%дрн”,бр[3]);
ако(бр[3]==157)
{
принтф(“111111\рн”);
}
ХАЛ_Делаи(1000);
/* КОРИСНИЧКИ КОД ЕНД ВХИЛЕ */

/* КОРИСНИЧКИ КОД ЗАПОЧНИ 3 */
}
/* КОРИСНИЧКИ КОД КРАЈ 3 */
}

/**
* @бриеф Систем Цлоцк Цонфигуратион
* @ретвал Нема
*/
воид СистемЦлоцк_Цонфиг(воид)
{
РЦЦ_ОсцИнитТипеДеф РЦЦ_ОсцИнитСтруцт = {0};
РЦЦ_ЦлкИнитТипеДеф РЦЦ_ЦлкИнитСтруцт = {0};