Ultrasonic Level Meter Sensor Page in English
Ultrasonic Level Meter Sensor Page in English

Sensor

Sensor Der Sen­sor be­nutzt ei­nen re­la­tiv klei­nen Con­trol­ler vom Typ ATtiny2313. Um sei­ne Ka­pa­zi­tät nicht un­nö­tig zu for­dern ist die Firm­ware in As­sem­bler ge­hal­ten (schließ­lich wol­len wir auch das nicht ganz ver­ges­sen, oder?). Al­le Be­rech­nun­gen wer­den in der An­zei­ge­ein­heit durch­ge­führt, die in C pro­gram­miert ist. Auch die Ver­sor­gungs­span­nung des Sen­sors wird von die­ser fern­ge­schal­tet. En­er­gie­ver­brauch ist da­her nur am Ran­de ein The­ma da er nur so­lan­ge ein­ge­schal­tet ist wie er auch wirk­lich ar­bei­ten muss (in der ak­tu­el­len Ver­sion ma­xi­mal 10 s pro Mi­nu­te).

Das be­deu­tet aber auch, dass er sich kei­ne Wer­te im RAM mer­ken kann. Alles was er dau­er­haft wis­sen muss ist folg­lich im EEPROM ab­ge­legt. Bis zum ak­tu­el­len Soft­ware­stand muss er sich glück­li­cher­wei­se *nichts* mer­ken.

Ultraschallsender

Die Sen­der-Hard­ware ist die Stan­dard­schal­tung wie sie in vie­len An­wen­dun­gen ver­wen­det wird. Das Si­gnal in Form von 8 Pe­ri­oden ei­ner 40 kHz-Schwin­gung wird per Soft­ware im Mi­kro­con­trol­ler er­zeugt. Ver­su­che ha­ben ge­zeigt, dass das Emp­fangs­sig­nal wäh­rend der ers­ten 2-3 Pe­ri­oden deut­lich an­steigt (Re­so­nanz des Emp­fän­ger­kris­talls und ver­mut­lich auch des Sen­ders). Mehr als 8 Pe­ri­oden brin­gen je­doch kei­ne we­sent­li­che Ver­bes­se­rung.

Ultraschallempfänger

Die Emp­fän­ger­schal­tung wur­de in LTspice si­mu­liert und un­ter Be­rück­sich­ti­gung der Qua­li­tä­ten des ver­wen­de­ten Ope­ra­ti­ons­ver­stär­kers auf ma­xi­ma­le Ver­stär­kung bei 40 kHz op­ti­miert. Jede ein­zel­ne Pe­ri­ode des emp­fang­en­en Ul­tra­schall­si­gnals löst im Con­trol­ler ei­nen In­ter­rupt aus. Die­ser kann da­mit die Lauf­zeit des Im­pul­ses mes­sen und die Ent­fer­nung zur re­flek­tie­ren­den Ober­flä­che be­rech­nen.

Schallgeschwindigkeit

Die Schall­ge­schwin­dig­keit ist ab­hän­gig von der Tem­pe­ra­tur nach fol­gen­der For­mel:
v=v0tt0 wo­bei v0 die Ge­schwin­dig­keit bei 0 °C (331,5 m/s) und t0=273 K ist.
10 °C wür­den ei­nen Feh­ler von et­wa 2,4% be­wir­ken was et­wa 140 l in ei­ner 6000 l-Zis­ter­ne be­deu­tet.
Ei­ne Tem­pe­ra­tur­mes­sung in der Zis­ter­ne ist da­mit ob­li­ga­to­risch. Aller­dings soll­te man sich auch nicht zu viel da­von ver­spre­chen denn die Tem­pe­ra­tur in der Luft­säu­le ist be­son­ders im Som­mer sehr in­ho­mo­gen. Scheint die Son­ne auf den Zis­ter­nen­de­ckel er­reicht die Luft­tem­pe­ra­tur im obe­ren Be­reich lo­cker über 30 °C wäh­rend sie knapp über der Was­ser­ober­flä­che nur 15 °C be­trägt.

Es hat sich ge­zeigt, dass da­durch im Ta­ges­ver­lauf schein­ba­re Was­ser­zu­läu­fe (auch oh­ne Regen) im Be­reich von 30-50 l er­fol­gen weil sich der Schall in war­mer Luft schnel­ler aus­brei­tet und da­durch die Ober­flä­che für den Sen­sor fer­ner scheint als sie tat­säch­­lich ist.

In­te­res­sant­er­wei­se dehnt sich durch die Er­wär­mung auch das Edel­stahl-Be­fes­ti­gungs­seil und senkt da­mit den Sen­sor ein we­nig ab, was die­sem Ef­fekt ent­ge­gen­wirkt.

Totzeit

Wenn Ul­tra­schall­im­pul­se ge­sen­det wer­den, emp­fängt der Sen­sor nicht nur das Echo von der Was­ser­ober­flä­che son­dern zu­nächst ein­mal Vi­bra­tio­nen, die über das Ge­häu­se und die un­mit­tel­ba­re Um­ge­bung über­tra­gen wer­den. Des­halb ist es nö­tig, ei­ne Tot­zeit ein­zu­füh­ren. Vor Ab­lauf die­ser wer­den emp­fan­ge­ne Si­gna­le ver­wor­fen. Sie kann in Viel­fa­chen von 256×Timer1-Clocks an­ge­ge­ben wer­den. Erst Echos nach Ab­lauf der Tot­zeit be­wir­ken die Aus­lö­sung ei­ner Mes­sung. Prak­tisch be­deu­tet dies, dass kein Ob­jekt und kei­ne Was­ser­ober­flä­che ge­mes­sen wer­den kann, die nä­her als et­wa 30 cm am Sen­sor ist.

Mikrocontroller

Ver­wen­det wur­de der ATtiny2313 bei ei­ner Takt­fre­quenz von 3,6864 MHz. Die­se krum­me Fre­quenz er­laubt das feh­ler­lo­se Er­zeu­gen gän­gi­ger Baud­ra­ten.
Un­nö­tig hoch soll­te man die Takt­fre­quenz nicht wäh­len, da EMV-Pro­ble­me da­mit wahr­schein­li­cher wer­den und auch der Strom­ver­brauch prak­tisch li­ne­ar mit der Takt­fre­quenz an­steigt.

Die 40 kHz-Schwin­gung wird rein durch Soft­ware er­zeugt. Da beim Senden kei­ne In­ter­rupts frei­ge­ge­ben sind ist dies mög­lich und es ist so ein­fa­cher, ei­ne be­stimm­te An­zahl von Pe­ri­oden (acht) zu er­zeu­gen. Ein Pa­ket aus acht Pe­ri­oden ist 200 µs lang, bei rund 340 m/s Schall­ge­schwin­dig­keit ent­spricht das 6,8 cm. Ei­ne ein­zel­ne Pe­ri­ode und da­mit die the­o­re­ti­sche Ma­xi­mal­gren­ze der Ge­nau­ig­keit ent­spricht 8,5 mm. Nach dem Senden des Pa­kets wird Timer 1 ge­star­tet, mit dem die Lauf­zeit ge­mes­sen wird. Da, wie be­reits er­wähnt, das Emp­fangs­sig­nal wäh­rend der ers­ten Pe­ri­oden an­steigt kann es pas­sie­ren, dass mal die ers­te und mal die zwei­te oder gar drit­te Pe­ri­ode er­kannt wird und das Er­geb­nis so sprung­haft um Viel­fa­che von 8,5 mm stei­gen oder fal­len kann. Für den Fall dass im­mer die glei­che Pe­ri­ode er­kannt wird ist die Auf­lö­sung al­ler­dings sehr hoch (ei­ne Ti­mer­pe­ri­ode ent­spricht we­ni­ger als 0,1 mm) was aber nicht mit Ge­nau­ig­keit ver­wech­selt wer­den darf!

Der Emp­fän­ger lie­fert für je­de Pe­ri­ode des Pa­kets ei­ne Flan­ke, die ei­nen In­put-Cap­ture-In­ter­rupt aus­löst. Der Con­trol­ler hat da­mit ei­nen ex­ak­ten Zeit­stem­pel je­der ein­zel­nen Pe­ri­ode und könn­te so so­gar Dop­pler­mes­sun­gen vor­neh­men, was hier aber nicht nö­tig ist.

Wenn Timer 1 über­läuft wird die Mes­sung ver­wor­fen. Dies wä­re bei di­rek­tem Sys­tem­takt nach 17,8 ms oder 6 m. Da dies je nach Form und Fas­sungs­ver­mö­gen der Zis­ter­ne et­was knapp sein kann (in der 6000 L-Zis­ter­ne des Au­tors hängt der Sen­sor et­wa 2,90 m (al­so 5,80 m hin und zu­rück) über dem Bo­den) mes­sen wir in die­sem Fall noch ein­mal mit clk/8. Wird kein Si­gnal emp­fan­gen läuft der Timer al­so nach wei­te­ren 142 ms ab. Spä­tes­tens dann be­kommt die An­zei­ge­ein­heit auch die In­for­ma­tion über die Lauf­zeit des Si­gnals.

Temperaturmessung

Da die Schall­ge­schwin­dig­keit tem­pe­ra­tur­ab­hän­gig ist muss auch die Tem­pe­ra­tur ge­mes­sen wer­den. Das kos­tet nicht viel, bringt aber, wie wir ge­se­hen ha­ben, ei­nen deut­li­chen Ge­nau­ig­keits­ge­winn. Der Con­trol­ler be­sitzt un­glück­li­cher­wei­se kei­nen AD-Wand­ler so wur­de auch die­ser in Soft­ware re­a­li­siert. Dazu wird Timer 1 als 8-Bit PWM be­trie­ben und das Aus­gangs­si­gnal durch ei­nen ein­fa­chen RC-Tief­pass ge­fil­tert. Die­se Span­nung wird vom in­te­grier­ten Kom­pa­ra­tor mit der über ei­nem NTC ver­gli­chen. Das PWM-Si­gnal hat da­bei ei­ne fes­te Fre­quenz von 14,4 kHz (3,6864 MHz/256).

Die For­mel für den Span­nungs­ver­lauf am Kon­den­sa­tor ei­nes RC-Glieds lau­tet be­kann­ter­ma­ßen:

U(t)=U0(1--tτ)

U0 ist da­bei die La­de­span­nung, al­so die Dif­fe­renz zwi­schen der Span­nung über dem Kon­den­sa­tor und der an­ge­leg­ten (kon­stan­ten) La­de­span­nung bei t=0. Die­se kann na­tür­lich auch ei­ne Ent­la­de­span­nung sein, d.h. die an­ge­leg­te Span­nung ist 0 V.

τ ist die Zeit­kon­stan­te des RC-Glie­des, al­so R×C.

Am Ran­de möch­te ich an­mer­ken: be­ach­ten Sie, wie schön das auch mit den Ein­hei­ten funk­tio­niert: Ω=VA und F=AsV . Bei R×C kür­zen sich al­so die Am­pere und die Volt he­r­aus und üb­rig bleibt ei­ne Zeit! Und die Zeit t ge­teilt durch R×C er­gibt dann ei­ne di­men­sions­lo­se Zahl, de­ren e-Funk­tion wir be­rech­nen kön­nen.

Fol­gen­de Um­for­mung tut uns da­bei gu­te Diens­te da sie sich tri­vial nach t bzw. τ auf­lö­sen lässt:

-ln(1-UU0)=tτ

Zwei Rand­be­din­gun­gen müs­sen für die kor­rek­te Funk­tion der Mes­sung er­füllt sein:

  1. Die Rest­wel­lig­keit des ge­fil­ter­ten PWM-Si­gnals muss klei­ner sein als ½ LSB
  2. Die Ein­schwing­zeit der ge­fil­ter­ten Span­nung bis auf ½ LSB muss ab­ge­war­tet wer­den

Restwelligkeit:

Die höchs­te Rest­wel­lig­keit ist in der Mit­te des Mess­be­reichs, bei 50 % Duty Cycle.
Die La­de­span­nung ist im ein­ge­schwun­ge­nen Zu­stand ½ VCC. Da­mit die Rest­wel­lig­keit des Si­gnals un­ter ½ LSB (U/U0=½/128) bleibt muss die Zeit­kon­stan­te des Fil­ters über 8,87 ms lie­gen (t ist hier ei­ne hal­be Pe­ri­oden­dau­er, al­so 34,7 µs).
Wir wäh­len Wer­te von 12 kΩ und 1 µF und da­mit ei­ne Zeit­kon­stan­te von 12 ms.

Einschwingzeit:

Die höchs­te Ein­schwing­zeit ist zwi­schen den Ex­tre­ma, d.h. von 0 auf 255. Da der höchs­te Schritt, den wir ab­war­ten müs­sen, je­doch nur von 0 auf 128 ist rech­nen wir nun mit u=127,5 und u0=128. Da­mit die Span­nung auf we­ni­ger als ½ LSB an den PWM-Soll­wert he­r­an­kommt muss das Si­gnal al­so we­nigs­tens 66,5 ms an­ste­hen. Auch hier wäh­len wir groß­zü­gig 100 ms. Für ei­nen Soft­ware-SAR-Wand­ler mit 8 Bit be­nö­ti­gen wir 8 Mes­sun­gen und er­hal­ten so­mit nach et­wa 800 ms das ge­naue Er­geb­nis.

Wir könn­ten die Ein­schwing­zeit für die fol­gen­den Schrit­te re­du­zie­ren da der Span­nungs­hub je­weils nur die Hälf­te des vor­her­ge­hen­den ist aber das ist hier nicht nö­tig und auch nicht er­wünscht.

Das war ziem­lich viel Ar­beit und ist min­des­tens 1000 mal lang­sa­mer als ein in­te­grier­ter Hard­ware-A/D-Wand­ler aber wie wir spä­ter noch se­hen wer­den ist dies nicht un­be­dingt ein Nach­teil.

Ei­ne An­mer­kung zu den Bau­teil­to­le­ran­zen: der ab­so­lu­te Wert des RC-Glie­des ist un­kri­tisch, selbst der Tem­pe­ra­tur­ko­ef­fi­zi­ent, da sich die Tem­pe­ra­tur im Lau­fe ei­ner Mes­sung nicht we­sent­lich än­dert. Ent­schei­dend ist le­dig­lich, dass die ge­sam­te Mi­nus-To­le­ranz nicht mehr als 26 % (8,87 ms/12 ms) und die Plus-To­le­ranz nicht mehr als 50% (100/66,5) be­trägt, was mit mo­der­nen Kon­den­sa­to­ren und Wi­der­stän­den durch­aus ein­zu­hal­ten ist (et­wa mit 20% C und 5% R).

Es ist al­so nicht nö­tig, be­son­ders hoch­wer­ti­ge Wi­der­stän­de oder Kon­den­sa­to­ren ein­zu­set­zen, das bil­ligs­te was Sie krie­gen kön­nen ist gut ge­nug (na ja, je­den­falls fast)...

Der Wi­der­stand R15 über dem Heiß­lei­ter soll­te je­doch ein 1%-Typ sein, da sein Feh­ler di­rekt in die Ge­nau­ig­keit der Mes­sung ein­geht. 1%-Wi­der­stän­de sind im­mer noch bil­lig. Ei­ne noch hö­he­re Prä­zi­sion geht schnell ins Geld und bräch­te kaum Ver­bes­se­rung da die To­le­ranz des Heiß­lei­ters viel grö­ßer ist.

Unter mei­nen Elek­tro­nik-Rech­nern kön­nen Sie in­zwi­schen ei­nen Rech­ner fin­den, mit dem Sie das RC-Glied ein­fach be­stim­men kön­nen.

Um Ver­fäl­schun­gen des Er­geb­nis­ses durch die Trei­ber­leis­tung des Port­pins zu ver­rin­gern le­gen wir das po­si­ti­ve En­de des Wi­der­stand/Heiß­lei­ter-Span­nungs­tei­lers nicht an VCC son­dern eben­falls an ei­nen Port­pin des sel­ben Ports (an­de­re mö­gen ab­wei­chen­de Trei­ber­leis­tung ha­ben) der wäh­rend der Mes­sung per­ma­nent 1 ist und ver­wen­den für den Wi­der­stand des RC-Glie­des ei­nen ähn­li­chen Wert wie für den Vor­wi­der­stand des Heiß­lei­ters, so dass ähn­li­che Strö­me flie­ßen. Dies hat zu­sätz­lich den Vor­teil, dass wir den Heiß­lei­ter ab­schal­ten kön­nen wenn wir ihn nicht be­nö­ti­gen und so nicht nur ein biss­chen Strom spa­ren son­dern auch die Ei­gen­erwär­mung des Heiß­lei­ters re­du­zie­ren. Die­se ist zwar bei 2,5 V und 10 kΩ noch kein echtes Pro­blem, be­trägt je­doch bei­spiels­wei­se bei ei­nem SMD-NTC mit 220 K/W schon mehr als 1/8 °C.

Ich muss ge­ste­hen, die­ser Teil der Schal­tung hat mir am meis­ten Spaß ge­macht. Ein­fach zu be­rech­nen, ein­fach zu bau­en und funk­tio­niert auf An­hieb!

Wenn Sie mal da­mit spie­len möch­ten, hier ei­ne klei­ne Si­mu­la­tion für LTspice. Die Span­nung der PWM ha­be ich hier auf 255 V ge­setzt. So kann man di­rekt das Er­geb­nis des DA-Wand­lers über­prü­fen. Für die Funk­tion ist ja der ab­so­lu­te Wert der Span­nung un­er­heb­lich.

Gehäuse

Das Ge­häu­se für den Sen­sor soll­te auf je­den Fall feuch­tig­keits­ge­schützt sein. Ich ha­be ein Bopla ET-210 ver­wen­det. Tem­pe­ra­tur­än­de­run­gen und da­mit die Ge­fahr der Be­tau­ung er­fol­gen zwar in ei­ner Zis­ter­ne nur sehr lang­sam, kön­nen aber durch die ge­rin­ge Ei­gen­erwär­mung des Sen­sors nicht völ­lig aus­ge­schlos­sen wer­den. Ins­be­son­de­re in der kal­ten Jah­res­zeit kühlt der Sen­sor von oben aus wäh­rend von un­ten re­la­tiv feucht-war­me Luft auf­steigt. Auch die Ein­füh­rung des Ka­bels soll­te des­halb durch ei­ne feuch­tig­keits­dich­te IP54-Ka­bel­ein­füh­rung er­fol­gen. Ich ha­be so­gar un­ter die Ul­tra­schall-Sen­so­ren noch Si­li­kon ge­spritzt um das Ein­drin­gen von Feuch­tig­keit durch die Bohr­lö­cher zu ver­hin­dern und kann dies auf­grund spä­te­rer Er­fah­run­gen nur drin­gend emp­feh­len! Die Sen­so­ren selbst sind der Feuch­tig­keit je­doch scho­nungs­los aus­ge­lie­fert. Es gibt auch feuch­tig­keits­be­stän­di­ge Ul­tra­schall­sen­so­ren, die­se sind je­doch schlecht er­hält­lich. Bei Be­fürch­tun­gen in die­ser Rich­tung kann na­tür­lich auch die Un­ter­was­ser-Aus­füh­rung he­r­an­ge­zo­gen wer­den. Ich ha­be die Un­ter­was­ser-Aus­füh­rung nur kurz ge­tes­tet, es scheint je­doch, dass die­se ei­ne er­heb­lich hö­he­re Trei­ber­leis­tung er­for­dern. Sie wür­den je­den­falls nicht oh­ne Schal­tungs­mo­di­fi­ka­ti­on funk­tio­nie­ren. Hier sind Sie ge­fragt!

Die Ty­pen UST40R und UST40S ha­ben je­doch meh­re­re Jah­re un­be­scha­det über­stan­den.

Auch ge­rin­ge Men­gen Feuch­tig­keit kön­nen zu­sam­men mit Ver­un­rei­ni­gun­gen auf der Lei­ter­plat­te (Fluss­mit­tel, Haut­fett etc.) kor­ro­si­ve und/oder leit­fä­hi­ge Be­lä­ge bil­den, die frü­her oder spä­ter zum Aus­fall füh­ren.

Nach et­wa drei Jah­ren Be­trieb riss bei mei­nem Sen­sor das Hal­te­seil, der Sen­sor fiel in die Zis­ter­ne und saug­te sich mit Was­ser voll. Des­halb ent­schied ich mich, den nächs­ten kom­plett mit Epoxyd­harz zu ver­gie­ßen. Ei­ne Schal­tung an die man nicht mehr he­r­an­kommt ist bes­ser als ei­ne ka­put­te Schal­tung!

Dafür ha­be ich Robnor PX804D/BK ver­wen­det. Es sieht aus wie Alt­öl und ist et­was zäh­flüs­si­ger als die­ses. Man be­nö­tigt et­wa 200 g. Nach der hal­ben Menge et­was Schwen­ken da­mit auch die Hohl­räu­me aus­ge­füllt wer­den. Zum Schluss mit dem Gerät ein paar mal auf den Tisch klop­fen da­mit die Luft­bla­sen auf­stei­gen. Ideal wä­re na­tür­lich der Ver­guss im Va­ku­um aber für un­se­re Zwe­cke geht es auch so.

Falls Sie über Va­ku­um-Ver­guss nach­den­ken wür­de ich Ihnen Kühl­schrank-Kom­pres­so­ren ans Herz le­gen. Sie sind bil­lig (kos­ten­los aus al­ten Kühl­schrän­ken) und er­zeu­gen ein durch­aus brauch­ba­res Va­ku­um (et­wa bis 0.1 Bar). Va­ku­um-Tech­ni­ker lachen an die­ser Stel­le für ge­wöhn­lich, aber die Luft­bla­sen in un­se­rem Sen­sor wä­ren dann im­mer­hin nur noch 1/10 so groß! Ver­gie­ßen, Va­ku­um an, et­was war­ten bis die Blasen hoch­ge­stie­gen sind und Va­ku­um aus be­vor das Harz be­ginnt fest zu wer­den.

Au­ßer­dem eig­nen sie sich auch her­vor­ra­gend um mü­he­los Fahr­rad- oder Au­to­rei­fen auf­zu­pum­pen...

Sensor-Ansteuerung

Der Sen­sor wird in ei­nem fes­ten Zeit­ras­ter ein­mal pro Mi­nu­te an­ge­steu­ert.
Dieses Zeit­ras­ter stammt aus ei­ner frü­hen Ent­wick­lungs­pha­se des Pro­jekts und ist in sei­nem jet­zi­gen Stand kaum von Vor­teil. Da es aber auch nicht von Nach­teil ist wur­de es ein­fach bei­be­hal­ten...

Se­kun­de Ak­tion
0 Re­ser­viert für Boot-Vor­gang
Wer Boot­zei­ten von PCs ge­wöhnt ist mag ei­ne Se­kun­de für kurz hal­ten aber Booten be­schränkt sich bei der An­zei­ge auf das Ini­ti­a­li­sie­ren der be­schei­de­nen Hard­ware und das An­sprin­gen der Haupt­schlei­fe.
1 Die Strom­ver­sor­gung wird ein­ge­schal­tet. Der Sen­sor führt da­r­auf­hin selbst­tä­tig a­syn­chron Tem­pe­ra­tur- und Lauf­zeit­mes­sun­gen durch und sen­det die Er­geb­nis­se an die An­zei­ge.
Jede emp­fan­ge­ne Lauf­zeit­mes­sung wird als Füll­stand "live" an­ge­zeigt.

Die An­zei­ge mit­telt 10 Lauf­zeit­mes­sun­gen (was grob auch et­wa 10 Se­kun­den dau­ert) und er­rech­net da­r­aus die Füll­men­ge der Zis­ter­ne. Mit dem Er­halt der 10. Mes­sung schal­tet sie die Ver­sor­gung wie­der ab. Die An­zei­ge zeigt nun bis zur nächs­ten Mi­nu­te den ge­mit­tel­ten Wert.

Die Ab­schal­tung er­folgt a­syn­chron, sie hängt ab von der tat­säch­­lich be­nö­tig­ten Zeit für 10 Mes­sun­gen, die ja von der Lauf­zeit des Si­gnals bzw. schlimms­ten­falls vom Time­out der­sel­ben ab­hängt. Die be­nö­tig­te Zeit liegt bei et­wa 10 Se­kun­den.

15 Die Mit­tel­wer­te wer­den be­rech­net und auf die An­zei­ge ge­schrie­ben.
59 Letzte Feh­ler­checks wer­den durch­ge­führt. Wenn die An­zahl der emp­fang­en­en Lauf­zeit­mes­sun­gen nicht ge­nau 10 ist wird der ent­spre­chen­de Feh­ler an­ge­zeigt.
Die Strom­ver­sor­gung wird ab­ge­schal­tet um ei­nen si­che­ren Re­set aus­zu­lö­sen.

Dieses Ver­fah­ren mag lang­wei­lig oder bü­ro­kra­tisch er­schei­nen, es ver­hin­dert je­doch auf ein­fa­che Weise das Zu­stan­de­kom­men von Race-Con­di­tions und lässt doch Raum für Er­wei­te­run­gen (so­fern nicht mehr als 60 Schrit­te be­nö­tigt wer­den). Der Sen­sor hat auf je­des Kom­man­do ei­ne knappe Se­kun­de Zeit und kann si­cher sein, nicht ge­stört zu wer­den. Zu­sätz­lich ver­schwen­det der steu­ern­de Con­trol­ler kei­ne CPU-Zeit in un­nö­ti­gen War­te­schlei­fen auf Er­geb­nis­se. Man könn­te dies auch oh­ne das star­re und trä­ge Zeit­ras­ter mit ei­ner State-Ma­chine lö­sen, die­se wä­re je­doch un­über­sicht­li­cher und da­mit feh­ler­träch­ti­ger und bräch­te im kon­kre­ten Fall kei­ne Vor­tei­le.

Sensorprotokoll

Der Sen­sor ist ver­gleichs­wei­se ein­fach auf­ge­baut und führt, ab­ge­se­hen von der Tem­pe­ra­tur-Look­up­table kei­ne Be­rech­nun­gen durch. Er kom­mu­ni­ziert grund­sätz­­lich bi­när und spon­tan mit Te­le­gram­men im 9-Bit-For­mat.

Ist das 9. Bit 0 han­delt es sich um ein Da­ten­byte, bei 1 um ein Kenn­byte wie folgt:

Kenn­byte Ant­wort Da­ten­bytes fol­gen
0x00 En­de des Da­ten­sat­zes 0
't' Tem­pe­ra­tur in  °C/2. So ent­spricht z.B. 3510 ei­ner Tem­pe­ra­tur von 17.5 °C
Raw-Wert des Soft­ware-SAR-Kon­ver­ters
1
1
'T' Lauf­zeit des Ul­tra­schall­im­pul­ses in Timer1-Clocks
Mul­ti­pli­ka­tor für Timer1 in CPU-Clocks (1 oder 8)
Tot­zeit in 256×Timer1-Clocks
2
1
1

Nach je­dem Da­ten­satz (vor dem 0x00-Byte) wird ein Check­sum­men-Byte ge­sen­det, das sich aus der Ex­klu­siv-Oder-Ver­knüp­fung der Da­ten und des ers­ten Kenn­bytes er­rech­net.

Tem­pe­ra­tu­ren grö­ßer 63.5 °C wer­den als 63.5 °C, sol­che klei­ner als -64 °C als -64 °C ge­mel­det. Der aus­wert­ba­re Tem­pe­ra­tur­be­reich ist da­her von -63.5 °C bis +63 °C. Es bleibt an­zu­mer­ken, dass die Auf­lö­sung in der Mit­te des Mess­be­reichs am größ­ten ist (teil­wei­se bes­ser als 0.5 °C) wäh­rend am Ran­de des Mess­be­reichs Sprün­ge von bis zu 5,5 °C/ LSB vor­kom­men, was bei -64 °C aber kei­ne Rol­le mehr spie­len dürf­te...

Wurde kein Echo emp­fan­gen ist die Lauf­zeit 0.

Der Sen­sor führt kon­ti­nu­ier­lich Mes­sun­gen durch bis die Ver­sor­gungs­span­nung ab­ge­schal­tet wird. Die re­la­tiv lan­ge Mess­zeit von et­wa 800 ms des Soft­ware-AD-Wand­lers für die Tem­pe­ra­tur sorgt ne­ben­bei auch da­für, dass al­le Ul­tra­schall-Echos in der Zis­ter­ne ver­klun­gen sind. Mit ei­nem schnel­len Hard­ware-ADC an Bord müss­ten wir an die­ser Stel­le ei­ne War­te­schlei­fe ein­fü­gen...

So er­weist sich der ver­meint­li­che Nach­teil der lang­sa­men AD-Wand­lung durch den Soft­ware-SAR als nütz­lich (ge­treu dem Mot­to It's not a bug, it's a feature!)

Programmierung des Sensors

Zur erst­ma­li­gen Pro­gram­mie­rung des Sen­sors mit dem AVRISP ist es er­for­der­lich dass die Sen­sor-Ver­sor­gung per­ma­nent ein­ge­schal­tet ist. Die ein­fachs­te Me­tho­de dies zu er­rei­chen ist über das Kom­man­do Ca­li­brate. Drü­cken Sie Re­turn bis die Mel­dung Please enter the re­al Value for Switched Unreg er­scheint. Der Sen­sor ist an bis sie er­neut Re­turn drü­cken und Sie kön­nen ihn ganz nor­mal mit dem AVRISP pro­gram­mie­ren.
Hin­weis: das AVRISP be­wirkt ei­nen Re­set des Sen­sors ei­ni­ge 100 ms nach­dem die Sen­sor-Ver­sor­gung ein­ge­schal­tet wird. Ein Up­date-Kom­man­do wird folg­lich fehl­schla­gen so­lan­ge das AVRISP mit dem Sen­sor ver­bun­den ist! Es hat mich Stun­den ge­kos­tet he­r­aus­zu­fin­den, wa­r­um das Boot­loa­der-Hello im­mer zwei­mal kam...

Fuses

Programmierfenster in ATStudio Wenn Sie den Sen­sor pro­gram­mie­ren reicht es nicht, nur das Sen­sor­pro­gramm selbst zu pro­gram­mie­ren! Achten Sie auch auf die Fuses. Ins­be­son­de­re die Clk/8-Fuse muss de­ak­ti­viert sein da sonst der Sen­sor nicht mit 3.6864 MHz läuft son­dern nur mit 461 kHz und da­mit kei­ne Kom­mu­ni­ka­tion mit dem Dis­play mög­lich ist! Ebenso muss die SELFPRGEN-Fuse ge­setzt sein sonst ist kein Firm­ware-Up­date über den Boot­loa­der mög­lich.

Test

Bevor Sie den Sen­sor ver­gie­ßen, tes­ten Sie un­be­dingt die Kom­mu­ni­ka­tion mit dem Dis­play. Ver­su­chen Sie auch ein Up­date-Kom­man­do. Erst wenn al­les Funk­tio­niert soll­ten Sie es ris­kie­ren, den Sen­sor in der Zis­ter­ne zu ver­sen­ken (bit­te nicht wört­lich neh­men :-)).

Befestigung

Der montierte Sensor in der ZisterneWenn Ih­re Zis­ter­ne ei­nen leich­ten Holz­de­ckel hat kön­nen sie ihn na­tür­lich ein­fach mit Edel­stahl­schrau­ben da­r­an be­fes­ti­gen. Mei­ne hat ei­nen 50 kg-Be­ton­de­ckel und ich wür­de den Sen­sor si­cher zer­stö­ren wenn er ein­fach un­ten fest­ge­schraubt wä­re und ich den De­ckel zur Sei­te wuch­te.
Ich ha­be in den Zis­ter­nen­hals vier Edel­stahl-Ha­ken ge­schraubt, ei­ne Edel­stahl­ket­te durch sie ge­spannt und den Sen­sor be­fes­tigt. Dazu ha­be ich auf das Sen­sor-Ge­häu­se ein Rest­stück Loch­ras­ter­plat­te be­fes­tigt (na­tür­lich mit Edel­stahl­schrau­ben) un­ter dem ich die Kette ge­spannt ha­be. Auf dem Fo­to ist das Sen­sor-Ka­bel noch teil­wei­se au­ßer­halb der Zis­ter­ne und da­mit nicht in sei­ner end­gül­ti­gen La­ge.