DS18B20 – meranie teploty pre FrSky D- prijímače.

Na DS18B20 ma upozornil lubo1, keď spomenul, že ho používa ako meranie teploty pre OpenXSensor ( tá jeho verzia OXS sa dá stiahnuť na konci článku tu ). No a keďže ja nie som o nič horší… tak by som také chcel tiež – ale dvakrát.

Prečo dvakrát: lebo DS18B20 nie je až taký drahý, je to digitálne meranie teploty ( digitálne mám rád ) a … FrSky Hub protokol podporuje najviac dve merania teploty.

Hardware.

Ja som použil Arduino Mini Pro + 6 pinový konektor + servokábel + dva DS18B20 snímače + odpor 4k7 + nejaké zvyšky plochého kábla.

Datasheet k DS18B20 je tu. Ja som použil DS18B20 v puzdre TO-92.

Zapojenie servokábla ( výstup sériovej linky a napájanie Arduina ):

Samotné snímače DS18B20 sú zapojené paralelne.

Odpor 4k7 je zapojený na Arduine z pinu č. 3 na  VCC.

Snímače DS18B20 som prispájkoval na nejaké zvyšky lepeného kábla. Vyzerá to nejako takto.

Ten Micro JST 1.25 4-Pin Male&Female Connector naľavo je pripravený na pripojenie GPS, pre meranie teploty nie je nutný.

Software.

Software som robil štandardne: opísal som ho 🙁

Prvé, čo som potreboval, bolo prečítanie adresy DS18B20. Výborný článok o meraní teploty s DS18B20 je tuná aj s výborným popisom a programami – vrátane programu na čítanie adresy.

Časť kódu som opísal od z jeho modifikácie OpenXSensor.

No a komunikáciu do prijímača D8R som ponechal od od R.Schloßhan z predchádzajúceho článku o Model_QID.

Takže čo program vie: číta teplotu z dvoch DS18B20 senzorov + posiela Model_QID kód. Program samotný je možné stiahnuť tu: DS18B20 and ModelQID_for_FrSky_D_v01 .

Komentár k programu:

  1. pin č.3 Arduina pre komunikáciu s DS18B20 je nastavený na riadku 36
  2. adresy oboch DS18B20 sú na riadkoch 50, 51
  3. Model_QID = 12 na riadku 99. Nastavenie Model_QID je rovnaké, ako v predchádzajúcom článku.
  4. rozlíšenie DS18B20 je nastavené na 10bit – stačí, FrSky Hub protokol umožňuje prenášať teplotu len s rozlíšením 1ºC.  Škoda 🙁
  5. samotné meranie a vysielanie je v troch cykloch: 0ms štart merania  – 400ms – prečítanie teploty1 – 700ms – prečítanie teploty2 – 1000ms – odvysielanie dát a zase štart merania. Takže vysielanie je 1x za sekundu.

Skúšanie.

V mrazničke. Do -12ºC fungovalo, ďalej som nechcel trápiť baterku 🙂

Záver:

Funguje to.

.

.

 Development zone: OpenXSensor & DS1820.

Actual code: openXsensor_15.

D1 - Code parts:
Temp1, Temp2, Alt - real measurement
AccX - fix value ( Model_QID = 12000)

...if ( ( millis() - lastTempRequest ) >= ds1820Delay ) // waited long enough??
 {

lastTempRequest = millis();

ds1820Temp1 = sensors.getTempC(Probe01);
 ds1820Temp2 = sensors.getTempC(Probe02);
 sensors.requestTemperatures();

test1.value = Model_QID ;
 test1.available = true ;
 test2.value = ds1820Temp1 ;
 test2.available = true ;
 test3.value = ds1820Temp2 ;
 test3.available = true ;
 
 }
...

D1 – Data chart:

D2 - Code parts:
Alt - real measurement
Temp1, Temp2 - real measurement, but sent fix value.
 AccX,Fuel - fix value

void calculateAllFields () {
...if (oXs_Voltage.voltageData.mVolt[0].available)
 oXs_Voltage.voltageData.mVolt[0].value = Model_QID ;

} // end of calculate all fields

...
if ( ( millis() - lastTempRequest ) >= ds1820Delay ) // waited long enough??
 {

lastTempRequest = millis();

ds1820Temp1 = sensors.getTempC(Probe01);
 ds1820Temp2 = sensors.getTempC(Probe02);
 sensors.requestTemperatures();

test1.value = Model_QID ;
 test1.available = true ;
// test2.value = ds1820Temp1 ;
 test2.value = 27 ;
 test2.available = true ;
// test3.value = ds1820Temp2 ;
 test3.value = 36 ;
 test3.available = true ;
 
 }

D2 – Data chart:

D3 - Code parts:
Alt - real measurement
Temp1, Temp2 - no measurement, sent fix value.
 AccX,Fuel - fix value

void calculateAllFields () {
...if (oXs_Voltage.voltageData.mVolt[0].available)
 oXs_Voltage.voltageData.mVolt[0].value = Model_QID ;

} // end of calculate all fields

...
if ( ( millis() - lastTempRequest ) >= ds1820Delay ) // waited long enough??
 {

lastTempRequest = millis();

// ds1820Temp1 = sensors.getTempC(Probe01);
// ds1820Temp2 = sensors.getTempC(Probe02);
// sensors.requestTemperatures();

test1.value = Model_QID ;
 test1.available = true ;
// test2.value = ds1820Temp1 ;
 test2.value = 27 ;
 test2.available = true ;
// test3.value = ds1820Temp2 ;
 test3.value = 36 ;
 test3.available = true ;
 
 }
D3 - Data chart:

Actual code: openXsensor_16.

D4 - Sync to data transmitt, 70ms:
Temp1, Temp2, Alt - real measurement 
AccX, Fuel_Level - fix values ( Model_QID) 

D4 - Data chart:
 

X6R testing:

D8R testing:

Code:

openXsensor_17.zip

Oscilloscope:

Communication on OneWire bus – data transmission detail.

Communication on OneWire bus – measurement period.

TIMING PROBLEM.

Legend:  YELLOW – TX to receiver, BLUE – OneWire bus

Delay TX to OneWire = approx 130ms – CORRECT

DS1820 measurement period – approx 1.05sec – PROBLEM, SHOULD BE 1SEC

Start od OneWire communication to start of TX – PROBLEM, SHOULD BE 70MS, IS 98.7MS = 70ms + 27ms OneWire communication.

TX to TX time including OneWire communication – PROBLEM, SHOULD BE 200MS, IS 230MS – SEEMS SYSTEM TIME IS INFLUENCED BY ONEWIRE COMMUNICATION.

RPM PROBLEM.

RPM measurement with TLE4905L hall sensor

Green – current, the higher current, the higher RPM should be; Red – RPM,one peak to zero, several peaks up.

Example of peak in table.

Atlitude an RPM: on Alt there are no problems.

RPM test: if ds1820BusCommunication == 1 then RpmValue = RpmPreviousValue

RPM PROBLEM – additional comparement measurement.

A, RPM sensor and two DS18B20 sensors connected, 1s telemetry logs saving period:

B, RPM sensor and two DS18B20 sensors connected, 0.1s telemetry logs saving period:

C, RPM sensor connected, DS18B20 sensors disconnected, 0.1s telemetry logs saving period:

Conclusion: disturbance on RPM measurent was highly probably caused by HW inerference from DS18B20 communication bus to RPM measurement line.

RPM PROBLEM – test of RC filter 10nF + 680R.

Conclusion: necessary to be deeply analyzed 🙂

To be continued.

Tento obsah bol zaradený v Modelársky SW, Technika a označkovaný ako , , . Zálohujte si trvalý odkaz.

Pridaj komentár