RFC: eerste low power PIC ontwerp

Ik ben al lang van zin om eens een extra low power ontwerp te maken.
En ik heb het perfecte testje voor.

Ik wil een batterij gevoed temperatuurmeting maken die om de paar minuten (niet kritisch), de temperatuur doorstuurt naar een ontvanger.
De zender moet zo low power mogelijk zijn (als test project).

Ik heb wel enkele ontwerpvoorwaarden, meestal om dat ik bepaalde onderdelen heb liggen en er niet echt veel werk in wil steken (simpel te assembleren op gaatjesprint bijv).

Ik weet nu al dat ik bepaalde voorwaarden ga vergeten, maar zullen wel aan bod komen als de discussie vordert.

Dus, ik heb gekozen voor een PIC microcontroller die ik heb liggen: de 18F2620. ( https://www.microchip.com/en-us/product/PIC18F2620# ).
Ik wil als tempsensor de 1-wire DS18B20 gebruiken (die heb ik liggen).
Als zender een HC12 module. Die heb ik ook liggen.

Ik heb de aanbevelingen van Microchip gelezen over low power design ( https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source…), maar zie niet echt een voorkeur voor bepaalde suggesties voor niet gebruikte pins.
Het is niet dat ze zeggen "een unused pin moet aan VDD", ze geven gewoon per soort pin sugestie, maar geen best practice.

Het is niet echt de bedoeling om een toestel te maken dat op de markt moet komen, maar eerder een project waar ik eens de levensduur van een batterij mee kan testen.

Ik wil geen exotische batterijen, geen oplaadbare, gewone AAA's zijn voor mij ok.
Daarmee kom ik op de spanning: hoe lager hoe minder stroom?
Dan moet dit ding wel werken met 3 AAA's in serie? 4.5V, en zal pas stoppen als de minimum spanning van een van de aangesloten items onderschreden wordt?
Dan is volgens de datasheet een LF oscillator genoeg met een XTAL van 32khz? Deze verbruikt het minste stroom?
Kan de controller daar wel een goede 9600 baud van maken voor de HS12?

Voor het programma denk ik dat ik
1- de controller in sleep modus zet die na een minuut of twee de controller wekt.
2- na het wekken, de temperatuur sampled door de DS18B20 van VDD te voorzien, en dan via de 1 wire een sample neemt.
3- als deze hetzelfde is als de vorige meting terug in sleep.
4- is deze niet hetzelfde, via een FET (type nog te kiezen), de HC 12 van spanning voorziet en na een korte opstart tijd, de waarde van de sample doorstuurt.
5- na de temp sample de sensor terug zonder spanning zet, en na het versturen de HC12 ook zonder spanning zet...
6- na het versturen of het samplen terug in slaap gaat voor 2 minuten.

Volgens de ontwerpgegevens voor low power applications is het mss aangeraden de IO's als uitgangen aan te sturen?

Ik wil echt graag jullie input, maar wel met de zaken die ik al opnoemde qua gebruikte materialen (het is enkel een test).
Ik wil door slim programmeren, of de pins juist configureren zo lang mogelijk kunnen meten. Daarna mag het gewoon terug afgebroken worden. Het gaat me om de ervaring.

Hierbij al een voorlopig schema van hoe ik de opstelling zie:

Gaande weg kan ik jullie voorstellen implementeren tot ik echt ga solderen. Dus laat de suggesties maar komen..
Alle bruikbare hulp is welkom :-)

Niet gebruikte IOs zullen een paar nA gebruiken. Daar moet je je niet te veel zorgen over maken. De nerds bij Microchip zijn er achter dat bijvoorbeeld "hang aan GND, programmeer als output-nul" iets betere GND-binnen-de-chip oplevert. Mooi en wel, maar 1) Wat als je perongeluk toch die output op "hoog" programmeert? Dan kan je chip stukgaan. Op jou enkelstuks thuis-projectje weegt het voordeel (niet meetbaar zo weinig) niet op tegen het nadeel. 2) Wat als je uiteindelijk toch nog net 1 extra in/out nodig hebt. Als je dan al een print hebt waar die pin redelijk definitief aan GND zit, dan ben je de sjaak met redelijk veel "rework" werk om daar nog wat aan te prutsen. Laat hem gewoon open, of hang hem zelfs ergens aan een connectortje.

In jou project zal je stroom moeten besparen door op de hoofdzaken te concentreren: Minimaliseer de tijd dat de DS1820 aan is. Minimalizeer de tijd dat de HC12 aan is. Minimaliseer de tijd dat de HC12 aan het zenden is. /dat/ zijn de stroomvreters.

Eigenlijk is het beter om te plannen om goed te METEN wat je stroom verbruik is. Het is haast onvermijdelijk dat er wat "verrassingen" in zitten, dus meten, uitzoeken waar het verbruik zit en dan optimaliseren.

Om te meten kan je een jumper op de print zetten, waar je de stroom van batterij naar schakeling kan meten. Omdat je de DS en HC in software aan en uit kan zetten hoef je daar niet aparte stroom-meet-faciliteiten voor te maken.

Die 32kHz is waarschijnlijk idd een goeie om de chip weer uit sleep te krijgen. Of je interne oscillator nauwkeurig genoeg is om 9600 baud te maken weet ik niet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

ik weet niet of het bij een PIc ook kan (vast wel) maar wij gebruikte de externe 32KHz altijd om de interne RC oscillator te calibreren. Dat was voor low power atmel projectjes

32676 is die deelbaar door 9600, dat geeft 3.4, dus nee, daar kun je de seriele clock niet van maken.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
JoWi

Special Member

Op 10 augustus 2021 01:24:22 schreef MJU:
Ik ben al lang van zin om eens een extra low power ontwerp te maken.
...
Dus, ik heb gekozen voor een PIC microcontroller die ik heb liggen: de 18F2620. ( https://www.microchip.com/en-us/product/PIC18F2620# ).

Als ik op het linkje klik en naar de parametrics kijk zie ik daar staan: Low Power: No.

Dus als je voor het absolute minimum wil gaan moet je een XLP type gebruiken en geen 18F2620.

En de drie AA batterijen vervangen door twee AA batterijen.

32676 is die deelbaar door 9600, dat geeft 3.4, dus nee, daar kun je de seriele clock niet van maken.

Maar je gebruikt ook niet het 32kHz kristal voor een serieel signaal maar de interne RC klok, evt gecalibreerd zoals Stijnos meldde, je mag er best 5% naast zitten en die interne kloks zijn beter dan dat.

Ignorance is bliss

Nou, bij Atmel dus niet. Die zijn iets van +/- 10%. Formeel NIET genoeg om serieel te kunnen verzenden. Het werkt vaak wel, dus ze zitten vaak binnen 5%, maar officieel niet.

Door de RC te calibreren heb je een soort van PLL waarmee je toch redelijk nauwkeurige timing kan hebben. De STM32 die ik goed ken heeft calibratie stapjes van een half procent en kan je in het veld tussen ongeveer +/-15% aanpassen. (in de fabriek hebben ze meer range, ik dacht nog 2 bits extra. Daarmee zetten ze de middenfrequentie van de user-calibratie op +/- 1% van nominaal).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Niet gebruikte pinnen zet je het beste als digitale output en in lage toestand (dan gebruiken ze de minste stroom en zijn ze in een gedefinieerde toestand.)
Ik gebruik XLP (extreme low power) versies zoals de 16F1709

Voor zo laag mogelijk stroomverbruik moet je een kristal gebruiken. De kristaloscillator wordt n.l. helemaal uitgeschakeld tijdens 'sleep', de interne RC oscillator niet. (die blijft een kleine stroom gebruiken)

Tijdens de sleep alles uitzetten wat uit kan. (a/d, uart, d/a, ...)

Voor RF gebruik ik meestal de RFM69/RFM95 tranceivers van HopeRF, klein en simpel.

Een CR2477 is ook handig voor de voeding: klein, goedkoop, en kan 3V/1000mAh leveren...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik heb er niet zelf aan gemeten, maar ik dacht dat de hoog-of-laag niet zo veel uitmaakte. Om evt later het "hang-aan-gnd" ding toe te passen is output-low wel een idee. Een pullup of pulldown (in de chip) werkt net zo goed als een harde nul om de boel uit de tussen-spanningen te houden.

Wat wel funest kan zijn voor je stroomgebruik is idd dat er een tussen-nul-en-voeding spanning op zou komen te staan. Omdat je chip vaak tot 1.8V blijft werken, zijn de interne mosfetjes al heel redelijk "aan" als je 1 of anderhalve volt op de gate zet.

Het input-circuit van een GPIO is gebaseerd op een inverter: input aan twee gates: een N-fet en een P-fet die met hun drains mekaar hangen.

Zet je een nul op de input dan gaat de P-fet aan, de N-fet uit en er komt 5V op de twee drains te staan.
Zet je een 5V op de input dan gaat de N-fet aan en de p-fet uit. Er komt 0V op de drains te staan.

Maar ga je er tussenin zitten, bijvoorbeeld 2.5V, dan gaan zowel de N-fet als de P-fet aan. Er gaat via de P-fet stroom van de 5V naar de drains lopen en via de N-fet naar aarde. Ze staan te stoken! Bij "heftige" fets is dit funest. Deze dingen zullen niet direct kapot gaan, maar het is niet bevorderlijk voor het stroomverbruik....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Zeer bruikbare tips, dank jullie alvast.

Hoe ben ik er nu toe gekomen dat de voorgestelde chip XLP was? Moet dat toch ergens gelezen hebben? Vreemd. Mijn fout..

Denken jullie aan de hand van de gegevens of de 32khz Xtal die 9600 baud nu wel of niet nauwkeurig kan leveren? Ik heb er geen idee van.

Die tip over de batterij is ook prima, al denk ik niet dat de HC12/DS18B20 op 3V gaan werken (nog checken).

De tip over de ongebruikte pins zijn zeer goed, ik neem het mee.

Toch, ondanks mijn fout over de low power, wil ik even doorgaan met dit projectje. Ben gewoon benieuwd hoe lang die gaat lopen op een paar batterijen. 1 dag of 14 jaar :-)

Laat de tips maar komen!

Zeer bruikbare tips, dank jullie alvast.

Hoe ben ik er nu toe gekomen dat de voorgestelde chip XLP was? Moet dat toch ergens gelezen hebben? Vreemd. Mijn fout..

Denken jullie aan de hand van de gegevens of de 32khz Xtal die 9600 baud nu wel of niet nauwkeurig kan leveren? Ik heb er geen idee van.

Die tip over de batterij is ook prima, al denk ik niet dat de HC12/DS18B20 op 3V gaan werken (nog checken).

De tip over de ongebruikte pins zijn zeer goed, ik neem het mee.

Toch, ondanks mijn fout over de low power, wil ik even doorgaan met dit projectje. Ben gewoon benieuwd hoe lang die gaat lopen op een paar batterijen. 1 dag of 14 jaar :-)

Laat de tips maar komen!

Op 11 augustus 2021 01:19:40 schreef MJU:
Ben gewoon benieuwd hoe lang die gaat lopen op een paar batterijen. 1 dag of 14 jaar :-)

Een goede microcontroller in SLEEP kost iets van 1 µA.

Op 2200 mAh doe je dan 2.2 miljoen uur: 250 jaar. Dit is als je alle andere verbruikers geheel kunt uitschakelen.

Stel nu dat je de thermometer 1 seconde op de 60 aan hebt staan. Dat kost ongeveer 1 mA. Dat is dus gemiddeld 16 µA. Als dit het enige zou zijn, reduceert dat de batterij-levensduur naar 16 jaar.

Als je gedurende die seconde je CPU laat staan tollen, dan zal die wel ongeveer 20mA gebruiken. Dat is gemiddeld 0.3mA . Dit reduceert de batterij-duur naar 290 dagen.

Je ziet, dat sommige "kom je niet onder uit" (DS18B20) stroomkosten significante impact hebben. Andere "zou te voorkomen zijn" (volledig 20mA trekken tijdens dat de DS aan is) zijn ook zeer significant.

Het radio ding heb ik nog niet meegenomen. Dat hangt er van af wat je "is de temp veranderd?" beschouwt. Dit soort beslissingen die jij in de software gaat maken valt niet vantevoren uit te rekenen. Als jij wat aannames maakt, kan je zelf makkelijk uitrekenen wat ie zou moeten halen.

Het doel is dan om dat te gaan benaderen. Mijn ervaring is dat dit tricky is. Er zijn altijd sluipverbruikers die meer stroom trekken dan je had gedacht. Door te meten kan je die opsporen en proberen daar wat aan te doen.

IK zou zeggen dat als je heel zuinig gaat doen, een 200 dagen batterij-levens-duur haalbaar zou kunnen zijn. Maar daar zal je heel goed je best voor doen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Wederom bedankt.

Nieuw probleem: de FET's die ik hier liggen heb zijn er nog die een RDSon van 15Ohm hebben, dat kan beter.

Krijg maar eens snel FET's in handen. Overal in shops dit ik hier in de buurt ken zijn het POWER FETS...

Nog suggesties iemand?
Is mijn schema wat ok?

Arco

Special Member

Schakelen in de min doe ik nooit, dat kan allerlei problemen geven.
Een hi-side switch als de SIP32508 kost maar 14 dollarcent...
https://www.arrow.com/en/products/search?cat=&q=sip32508&r=tru…

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Welke FET's moet je hebben ? (is wat makkelijker zoeken )

I love it when a plan comes together !
benleentje

Golden Member

Voor zo laag mogelijk stroomverbruik moet je een kristal gebruiken. De kristaloscillator wordt n.l. helemaal uitgeschakeld tijdens 'sleep', de interne RC oscillator niet.

Als in sleep de oscilator uitstaat hoe kan je dan na 2 minuten weer ontwaken? Zonder kristal zijn er toch oog geen klokpulsen om de tijd mee te gaan tellen? Of mis ik iets?

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Shiptronic

Overleden

Wie de vraag stelt, zal met het antwoord moeten leren leven.
Arco

Special Member

De watchdog timer loopt op z'n eigen RC oscillatortje en kan een maximale sleep van iets van 2min 18sec bereiken...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Er zit al een 32kHz oscillator in de PIC !
Verder zou je 8 uitgangen kunnen gebruiken om je HC12 te poweren
De frequentie van 8Mhz voor je 9600 baud heeft een max afwijking van 5 %, misschien werkt dat wel ( Omschakelen van 32kHz naar 8 MHz en vice versa )

Guus@Sint-Michielsgestel

Er zit al een 32kHz oscillator in de PIC !
Verder zou je 8 uitgangen kunnen gebruiken om je HC12 te poweren
De frequentie van 8Mhz voor je 9600 baud heeft een max afwijking van 5 %, misschien werkt dat wel ( Omschakelen van 32kHz naar 8 MHz en vice versa )
Eigenlijk heb je geen 32KHz nodig

Guus@Sint-Michielsgestel
Arco

Special Member

De interne oscillator gebruikt meer stroom zoals gezegd...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 11 augustus 2021 19:03:35 schreef ritmeester:
Welke FET's moet je hebben ? (is wat makkelijker zoeken )

Ik dacht nog wel wat meer variatie in huis te hebben, maar blijken echt wel oudere types te hebben in low power.
Wil gewoon niet te veel energie verspillen in de FET (RDSon), ten kosten van de batterij (en de opzet van de test).

Dus goed verkrijgbare lage RDSon. 3V om aan te sturen minimum en max stroom 100mA. Liefst through hole.

Het lastige is dat de elektronicawinkels waar ik zo kan binnenwandelen enkel ook oudere (of high current versies hebben), voor een prijs waar ik er in China 200 voor heb.

Op 11 augustus 2021 20:21:14 schreef Waters:
Er zit al een 32kHz oscillator in de PIC !
Verder zou je 8 uitgangen kunnen gebruiken om je HC12 te poweren
De frequentie van 8Mhz voor je 9600 baud heeft een max afwijking van 5 %, misschien werkt dat wel ( Omschakelen van 32kHz naar 8 MHz en vice versa )

Bedoel je dat 8 uitgangen genoeg stroom leveren voor de HC12?
Mag ik alle stromen bij elkaar tellen?
Zou nog niet zo een slecht idee zijn :-)

Ik heb al een test gedaan met ontwaken van een PIC met de interne watchdog, werkt goed. Dat was wel met een dev-board op 16mhz.

In tabel 2.2 van de datasheet staat dat de LP osc met een 32khz werkt.
Deze zou het minste stroom verbruiken.
Maar het verschil in stroomverbruik tussen LP,HS en XT zie ik niet onmiddellijk. Of welke factor deze verschillen.

Ik heb nog wel een paar SI2165 mosfetjes voor je. RDSON van 20mOhm (milliohm. 7500x beter dan wat jij hebt met 150 ohm.

Dit zijn P-fets, met de source aan voeding, belasting aan de drain en de gate naar een pootje... gaat de belasting aan bij het laagtrekken van dat pootje.

Met 32khz oscillator kan je de CPU op 32khz laten lopen. Dat is heel traag. Meestal zit er intern een "real time clock" module in de CPU. Vaak is die "zuinig" en "in staat om de CPU weer wakker te maken". Maar ik ken de PIC niet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Stroomverbruik in de diverse modes staat in de datasheet blz 325...335
In sleep mode is de kristaloscillator als gezegd het zuinigst.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com