Salīdzinājums starp PT100 temperatūras sensors zonde un DS18B20 modulis
1) Signāla iegūšanas pamatprincips
① PT100 pretestība mainās proporcionāli temperatūrai (jo augstāka temperatūra, jo lielāka pretestība), bet pretestības izmaiņas ir ļoti mazas, par 0.385 Ak / grāds;
② PT100 temperatūras mērīšanas diapazons ir -200 ℃ -200 ℃, un pie 0℃, pretestība ir tieši vienāda ar 100 Ak;
③ PT100 darba strāvai jābūt mazākai par 5 maiņa;
④ Lai gan PT100 pretestība mainās proporcionāli temperatūrai, tā izmaiņu ātrums (tas ir, K vērtība K vērtība K vērtība) atšķiras dažādos temperatūras diapazonos.
2) PT100 temperatūras pretestības maiņas tabula
3. PT100 piedziņas ķēde
1) Izmantojot sprieguma dalīšanas metodi, AD savāc PT100 spriegumu, lai iegūtu pretestības vērtību temperatūras aprēķināšanai
PT100 pretestības vērtība ūdenī istabas temperatūrā (25℃25℃25℃) ir par 109.89 Ak.
Mikrokontrolleris izvada 3,3 V spriegumu, un spriegums dalīts ar PT100 ir aptuveni:
109.89 ∗ 0.005 = 0.54945 V
AD vērtība, kas konvertēta pēc AD konversijas formulas, ir aptuveni:
0.54945 / 3.3 ∗ 4096 = 681.98 ≈ 682
Kad temperatūra paaugstinās par vienu grādu, pieņemot, ka PT100 pretestība tikai palielinās par 0.385 Ak, dalītā sprieguma izmaiņu vērtība ir aptuveni vienāda ar:
0.385 ∗ 0.005 = 0.001925 V
AD vērtība, kas konvertēta pēc AD konversijas formulas, ir aptuveni:
0.001925 / 3.3 ∗ 4096 = 2.39 ≈ 2
Eksperimentā, konstatēts, ka stm32 barošanas avota nestabilā 3,3V sprieguma dēļ, ADC savāca PT100 sprieguma svārstības, un sprieguma dalīšanas kļūda bija liela. Optimizācijas risinājums ir izveidot pastāvīgas strāvas avota ķēdi. Savācot PT100 spriegumu un pastāvīgās strāvas avota strāvu, var iegūt PT100 pretestību, un tad var iegūt temperatūras vērtību.
2) Pastāvīgas strāvas avota ķēde, kuras pamatā ir LDO regulators (MD5333)
Internetā ir daudz braukšanas shēmu PT100 testēšanai, piemēram, līdzstrāvas tilta ķēde, pastāvīgas strāvas avota ķēde, kuras pamatā ir darbības pastiprinātājs, utt.. Daudz laika autore veltīja arī braukšanas ķēdes izvēlei, ņemot vērā dēļa izgatavošanas grūtības un sastāvdaļu skaitu, un visbeidzot izvēlējās pastāvīgās strāvas avota ķēdi, kuras pamatā ir LDO regulators (MD5333). Shēmas shēma ir šāda:
Šajā brīdī, aparatūras izvēle būtībā ir pabeigta. Izmantotā izstrādes plate ir Zhengdian Atom F10ZET6 Elite Board
DS18B20 modulis
Lai pārbaudītu reāllaika temperatūru un PT100 temperatūras salīdzinājumu, DS18B20 modulis ir pievienots kalibrēšanas salīdzināšanas testam
1) Ievads DS18B20
DS18B20 ir vienas kopnes temperatūras sensors ar testa temperatūras diapazonu -55 ~ +125 ℃ un precizitāti ±0,5 ℃. Lauka temperatūra tiek tieši pārraidīta vienas kopnes digitālā veidā, kas ievērojami uzlabo sistēmas prettraucējumu spēju. Tas var tieši nolasīt izmērīto temperatūru, un var realizēt 9–12 bitu digitālo vērtību nolasīšanas metodi, izmantojot vienkāršu programmēšanu atbilstoši faktiskajām prasībām. Tās darba sprieguma diapazons ir 3–5,5 V, un tajā tiek izmantotas dažādas iepakojuma formas, padarot sistēmas iestatījumu elastīgu un ērtu. Iestatītā izšķirtspēja un lietotāja iestatītā trauksmes temperatūra tiek saglabāta EEPROM un joprojām tiek saglabāta pēc strāvas padeves pārtraukuma.
2) Ievads DS18B20 darba laikā
Visām vienas kopnes ierīcēm ir nepieciešams stingrs signāla laiks, lai nodrošinātu datu integritāti. DS18B20 ir 6 signālu veidi: atiestatīt impulsu, atbildes impulss, rakstīt 0, rakstīt 1, lasīt 0 un lasīt 1. Visi šie signāli, izņemot atbildes impulsu, ir sinhroni signāli, ko sūta saimniekdators. Un visas komandas un dati vispirms tiek nosūtīti ar zemo baita bitu.
① Atiestatiet impulsu un atbildes impulsu
Visi sakari vienā kopnē sākas ar inicializācijas secību. Resursdators izvada zemu līmeni un uztur zemo līmeni vismaz 480 us, lai ģenerētu atiestatīšanas impulsu. Tad saimnieks atbrīvo autobusu, un 4,7K uzvilkšanas rezistors pavelk vienu autobusu augstu, ar aizkaves laiku 15 ~ 60 us, un pāriet saņemšanas režīmā (Rx). Pēc tam DS18B20 samazina kopni par 60–240 us, lai radītu zema līmeņa reakcijas impulsu.
② Rakstīšanas laiku
Rakstīšanas laiks ietver rakstīšanu 0 laika noteikšana un rakstīšana 1 laika noteikšana. Visiem rakstīšanas laikiem ir nepieciešami vismaz 60 us, un ir nepieciešams vismaz 1 us atkopšanas laiks starp diviem neatkarīgiem rakstīšanas laikiem. Abi rakstīšanas laiki sākas ar to, ka saimnieks nolaiž autobusu. Rakstiet 1 laika noteikšana: resursdators izvada zemu līmeni, kavēšanās par 2us, un tad atbrīvo autobusu, kavējas 60 asv. Rakstiet 0 laika noteikšana: resursdators izvada zemu līmeni, kavēšanās par 60 us, un tad izlaiž autobusu ar 2us kavēšanos.
③ Lasīšanas laiku
Viena kopnes ierīces pārsūta datus uz resursdatoru tikai tad, kad resursdators izdod lasīšanas laiku. Tāpēc, pēc tam, kad resursdators izdod datu lasīšanas komandu, nekavējoties jāģenerē lasīšanas laiks, lai vergs varētu pārsūtīt datus. Visiem lasīšanas laikiem ir nepieciešami vismaz 60 us, un ir nepieciešams vismaz 1 us atkopšanas laiks starp diviem neatkarīgiem nolasīšanas laikiem. Katru lasīšanas laiku iniciē saimniekdators, kas novelk autobusu vismaz par 1us. Nolasīšanas laika laikā saimniekdatoram ir jāatlaiž kopne un jāizlasa kopnes statuss 15 us laikā pēc laika noteikšanas sākuma.. Tipisks lasīšanas laika noteikšanas process ir: resursdators izvada zema līmeņa aizkavi 2us, tad resursdators pārslēdzas uz ievades režīma aizkavi 12us, pēc tam nolasa vienas kopnes pašreizējo līmeni, un tad kavējas 50us.
Pēc vienotā autobusa laika izpratnes, apskatīsim tipisko DS18B20 temperatūras nolasīšanas procesu. Tipisks DS18B20 temperatūras nolasīšanas process ir: atiestatīt → nosūtīt SKIPROM (0xCC) → nosūtīt konvertēšanas sākšanas komandu (0x44) → aizkave → atiestatīt → nosūtīt SKIPROM komandu (0xCC) → nosūtīt atmiņas komandu (0xBE) → lasīt divus baitus datu (t.i. temperatūra) nepārtraukti → beigas.
3) Shematiskā diagramma un CUBEMAX konfigurācija
No shematiskās diagrammas, var redzēt, ka DS18B20 ir iespējots ar PG11 portu, lai atvērtu seriālo portu, lai drukātu informāciju par temperatūru
4) Koda daļa
Koda daļa pārstāda Zhengdian Atom ds18b20 bibliotēku un veic nelielas izmaiņas
#ifndef __DS18B20_H
#definējiet __DS18B20_H
#ietver “st.h”
/***********************************************************************************/
/* DS18B20 tapas definīcija */
#definējiet DS18B20_DQ_GPIO_PORT GPIOG
#definēt DS18B20_DQ_GPIO_PIN GPIO_PIN_11
#definējiet DS18B20_DQ_GPIO_CLK_ENABLE() darīt{ __HAL_RCC_GPIOG_CLK_ENABLE(); }kamēr(0) /* PG porta pulksteņa iespējošana */
/**********************************************************************************************/
/* IO darbības funkcija */
#definējiet DS18B20_DQ_OUT(netraucēts) darīt{ netraucēts ? \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_RESET); \
}kamēr(0) /* Datu porta izvade */
#definējiet DS18B20_DQ_IN HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN) /* Datu porta ievade */
uint8_t ds18b20_init(nederīgs); /* Inicializējiet DS18B20 */
uint8_t ds18b20_check(nederīgs); /* Pārbaudiet, vai DS18B20 pastāv */
īss ds18b20_get_temperature(nederīgs);/* Iegūstiet temperatūru */
#endif
5. Infrasarkanais tālvadības modulis
1) Bezvadu moduļu kodēšanas protokols
Plaši izmantotās infrasarkanās tālvadības pults kodēšanas metodes ir: PWM NEC protokols (impulsa platuma modulācija) un Philips PPM protokols RC-5 (impulsa pozīcijas modulācija). Tālvadības pults, kas tiek piegādāta kopā ar izstrādes plati, izmanto NEC protokolu, kam ir šādas funkcijas:
1. 8-bitu adrese un 8 bitu instrukcijas garums;
2. Adrese un komanda tiek pārsūtīta divas reizes (lai nodrošinātu uzticamību);
3. PWM impulsa pozīcijas modulācija, ar pārraidītā infrasarkanā nesēja darba ciklu “0” un “1”;
4. Nesējfrekvence ir 38 khz;
5. Bitu laiks ir 1,125 ms vai 2,25 ms;
NEC protokolā, kā iestatīt datus protokolā uz ‘0’ vai "1"? Šeit, infrasarkanais uztvērējs un infrasarkanais raidītājs ir atdalīti.
Infrasarkanais raidītājs: Sūtīt protokola datus “0” = 560 us no nesēja signāla pārraides + 560mums nav nesēja signāla pārraides
Sūtīt protokola datus “1” = 560 us no nesēja signāla pārraides + 1680mums nav nesēja signāla pārraides
Infrasarkanā raidītāja bitu definīcija ir parādīta attēlā zemāk
Infrasarkanais uztvērējs: Saņemt protokola datus “0” = 560 us zems līmenis + 560mums augsts līmenis
Saņemt protokola datus “1” = 560 us zems līmenis + 1680mums augsts līmenis
NEC tālvadības komandas datu formāts ir: sinhronizācijas terminālis, adreses kods, adreses apgrieztais kods, kontroles kods, kontrolēt apgriezto kodu. Sinhronizācijas kods sastāv no 9 ms zemā līmeņa un 4,5 ms augsta līmeņa. Adreses kods, adreses apgrieztais kods, kontroles kods, un kontroles apgrieztais kods ir 8 bitu datu formāti. Tie tiek nosūtīti secībā, kad pirmais bits ir zems un pēdējais. Apgrieztais kods tiek izmantots, lai palielinātu pārraides uzticamību.
Tāpēc, ievades uztveršanu var izmantot, lai izmērītu augsta līmeņa impulsa platumu, lai panāktu tālvadības pults dekodēšanu.
2) Shematiskā diagramma un CUBEMAX konfigurācija
No shematiskās diagrammas, mēs varam redzēt, ka bezvadu modulis ir iespējots caur PB9 tapu un tiek savākts caur 4 TIM4 kanāli:
TIM4_CH4 noklusējuma tapa nav PB9, tāpēc tas ir jāiestata manuāli, un tajā pašā laikā tiek ieslēgts pārtraukuma iestatījums
3) Koda daļa
Uzņemiet pieaugošo malu, izmantojot laika atzvanīšanas funkciju
Šajā laikā, var iegūt dekodētu signālu:
Šajā laikā, dati ir sarežģītāki un tos var nedaudz apstrādāt:
Efekts ir šāds:
Pēdējie divi cipari ir dekodētais un tā apgrieztais kods. Šajā laikā, to var definēt kā makro, lai pielāgotu temperatūras slieksni:
Efekts ir šāds:
Infrasarkano staru daļas kods:
/* LIETOTĀJA KODA SĀKUMA galvene */
/**
******************************************************************************
* @fails : galvenais.c
* @īss : Galvenā programmas daļa
******************************************************************************
* @uzmanību
*
* <h2><centrs>&kopiju; Autortiesības (c) 2024 STMikroelektronika.
* Visas tiesības paturētas.</centrs></h2>
*
* Šis programmatūras komponents ir ST licencēts saskaņā ar BSD 3-Clause licenci,
* uz “Licence”; Jūs nedrīkstat izmantot šo failu, izņemot saskaņā ar
* Licence. Licences kopiju varat iegūt vietnē:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* LIETOTĀJA KODA BEIGAS galvene */
/* Ietver ——————————————————————*/
#ietver “galvenais.h”
#ietver “st.h”
#ietver “usart.h”
#ietver “gpio.h”
/* Privātie ietver ———————————————————-*/
/* LIETOTĀJA KODS SĀKUMI Ietver */
#ietver “stdio.h”
#ietver “string.h”
#definējiet MAXUP 157
#definējiet MAXDOWN 87
#definējiet MINUP 221
#definējiet MINDOWN 61
/* LIETOTĀJA KODA BEIGAS Ietver */
/* Privāts tips ———————————————————–*/
/* LIETOTĀJA KODS BEGIN PTD */
/* LIETOTĀJA KODA BEIGAS PTD */
/* Privāts definēt ————————————————————*/
/* LIETOTĀJA KODS SĀKT PD */
/* LIETOTĀJA KODA BEIGAS PD */
/* Privāts makro ————————————————————-*/
/* LIETOTĀJA KODS SĀKT PM */
/* LIETOTĀJA KODA BEIGAS PM */
/* Privātie mainīgie ———————————————————*/
/* LIETOTĀJA KODS SĀKUMA PV */
uint32_t upCount=0;
uint16_t ValueUp=0;
uint16_t ValueDown=0;
uint8_t isUpCapt=1;
uint16_t platums=0;
uint16_t buferis[128]={0};
uint16_t bufferId=0;
uint8_t rcvFalg=0;
/* LIETOTĀJA KODA BEIGAS PV */
/* Privāto funkciju prototipi ———————————————–*/
nav spēkā SystemClock_Config(nederīgs);
/* LIETOTĀJA KODS SĀKT PFP */
/* LIETOTĀJA KODA BEIGAS PFP */
/* Privāts lietotāja kods ———————————————————*/
/* LIETOTĀJA KODS SĀKT 0 */
spēkā neesošs HAL_TIM_PeriodElapsedAtzvans(TIM_HandleTypeDef *htim)
{
upCount++;
}
spēkā neesošs HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
ja(isUpCapt)//Ja tā ir augošā mala uztveršana
{
ValueUp=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4);
isUpCapt=0;
__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_4,TIM_ICPOLARITY_FALLING);
upCount=0;
}
cits{
ValueDown=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4);
isUpCapt=1;
__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);
width=ValueDown+upCount*65536-ValueUp;
ja(platums>4400&&platums<4600)
{
bufferId=0;
buferis[bufera ID++]= platums;
}
citādi, ja(bufera ID>0)
{
buferis[bufera ID++]= platums;
ja(bufera ID>32)
{
rcvFalg=1;
bufferId=0;
}
}
}
}
nederīgs bitBuffer2num(char num[])
{
num[0]=0;
num[1]=0;
num[2]=0;
num[3]=0;
priekš(int i=0;i<32;i++)
{
ja(buferis[i+1]<1000)
{
num[i/8]=numurs[i/8]<<1;
}
cits
{
num[i/8]=numurs[i/8]<<1;
num[i/8]|=0x01;
}
}
}
/* LIETOTĀJA KODA BEIGAS 0 */
/**
* @brief Pieteikuma ievades punkts.
* @retval int
*/
int galvenais(nederīgs)
{
/* LIETOTĀJA KODS SĀKT 1 */
char printbuff[128]={0};
char num[4]={0};
char taustiņš = 0;
/* LIETOTĀJA KODA BEIGAS 1 */
/* MCU konfigurācija——————————————————–*/
/* Visu perifērijas ierīču atiestatīšana, Inicializē Flash interfeisu un Systick. */
HAL_Init();
/* LIETOTĀJA KODS BEGIN Init */
/* LIETOTĀJA KODA BEIGAS Init */
/* Konfigurējiet sistēmas pulksteni */
SystemClock_Config();
/* LIETOTĀJA KODS SĀKT SysInit */
/* LIETOTĀJA KODA BEIGAS SysInit */
/* Inicializējiet visas konfigurētās perifērijas ierīces */
MX_GPIO_Init();
MX_TIM4_Init();
MX_USART1_UART_Init();
/* LIETOTĀJA KODS SĀKT 2 */
/* LIETOTĀJA KODA BEIGAS 2 */
/* Bezgalīga cilpa */
/* LIETOTĀJA KODS SĀKT KAMĒR */
HAL_GPIO_TogglePin(LED0_GPIO_Ports,LED0_Pin);
HAL_TIM_Base_Start_IT(&htim4);//Taimera atjaunināšana ģenerē pārtraukumu
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_4);//
kamēr (1)
{
ja(rcvFalg)
{
priekš(int i=0;i<4;i++)
{
bitBuffer2num(num);
sprintf(printbuff,”0xx “,num[i]);
HAL_UART_Pārsūtīt(&huart1,printbuff,stren(printbuff),HAL_MAX_DELAY);
}
// sprintf(printbuff,”%u “,buferis[i]);
// HAL_UART_Pārsūtīt(&huart1,printbuff,stren(printbuff),HAL_MAX_DELAY);
// }
HAL_UART_Pārsūtīt(&huart1,”\r\n”,2,HAL_MAX_DELAY);
rcvFalg=0;
}
printf(“%d\r\n”,num[3]);
ja(num[3]==157)
{
printf(“111111\r\n”);
}
HAL_Delay(1000);
/* LIETOTĀJA KODA BEIGAS LAIKĀ */
/* LIETOTĀJA KODS SĀKT 3 */
}
/* LIETOTĀJA KODA BEIGAS 3 */
}
/**
* @īsa sistēmas pulksteņa konfigurācija
* @retval Nav
*/
nav spēkā SystemClock_Config(nederīgs)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt









