Fråga:
Automatisk avstängning av Pi Zero på lågt batteri
Rignee Sigmund
2016-02-22 04:40:11 UTC
view on stackexchange narkive permalink

Jag försöker bygga ett batteridrivet Pi Zero med ett LiPo-batteri och Adafruit Powerboost 500. Jag skulle vilja kunna använda den låga batterinivån (LBO) på powerboost för att berätta för Pi att stänga av, hur genomförbart är det här?

LBO-utgångarna mellan 1,8v och 5v medan batteriet är användbart och 0v när den är död. Kan den anslutas (eventuellt via någon mellanhand) till GPIO-stiften?

ha! Jag använder samma Adafruit-kort med min Zero! Jag har också en massa problem med att konvertera signalen från LBO-stiftet till 3v3. Jag ställde en fråga här: http://electronics.stackexchange.com/questions/218427/do-bi-directional-level-converters-connect-either-input-directly-to-ground -CL. sa till mig att lägga till ett motstånd, det verkar fungera bra för mig!
LBO dras högt till vBAT såvida inte vBAT sjunker under 3,2v, vilket innebär att LBO bara kan vara någonstans mellan 4,7v och 3,2v då sjunker den till 0v. Detta är från schemat och inlärningsguiden från Adafruit.
Jag skulle vara frestad att flagga detta som något att flytta till EESE - men när det berör något som ligger mitt hjärta kommer jag inte 8-) (jag har en RPi UPS, en UPiS "Basic" men jag vill köra den UPS och resten av mitt hemautomationssystem från ett hemgjordt 12V SLA-batteri backade större UPS - så jag kan driva det elektriska dörrlåset även om nätströmmen misslyckas! behöver bara ett Common Emitter NPN-transistorsteg för att buffra den signalen och en pull-up - låt mig skriva upp det i ett svar ...
Två svar:
SlySven
2016-02-22 09:06:29 UTC
view on stackexchange narkive permalink

Det är inte uppenbart men LBO-utgångsstiftet på den PWB är anslutet till motsvarande stift på IC och till basen av ett PNP Common-Emitter-steg - dock har transistorn ett inbyggt motståndspar (en "serie" en mellan basingången och den faktiska transistorbasen och en "potentialdelare" mellan den faktiska transistorbasen och sändaren "tillsammans ger dessa någon form av pull-up på den utgången.

Om det "serie" motståndet är ganska stort är det inte möjligt att vara säker på att det skulle vara tillräckligt starkt för att också dra upp LBO-stiftet tillräckligt starkt för att driva en RPi GPIO-stift till högt tillstånd såvida det inte var konfigurerat för att ha sitt eget ingång konfigurerad med en "Pull-up" (vilket faktiskt är fallet för de första GPIO-stiften som standard tror jag, såvida det inte är för mycket i config.txt-filen eller på något annat sätt).

Karaktären hos en "open-drain" utgång är att den är nästan som en enpolig enkelriktad omkopplare mellan utgångsstiftet och jord- när utgången ut är i ett "högt" logiskt tillstånd är omkopplaren öppen och spänningen på stiftet flyter till vad som helst de externa komponenterna ställer in men när utgången är i ett "lågt" logiskt tillstånd är omkopplaren stängd och stiftet dras till marken hårt och kommer att dra ström från vad som helst (positiv spänningskälla) kretsar är anslutna. Den enda komplikationen är att det förmodligen inte är bra att låta den externa matningen till vad som helst "pull-up" används för att överskrida tillförseln till IC med "open-drain" -utgången om inte motståndet i serie med det är tillräckligt högt för att förhindra att skadade strömmar strömmar in i utgången via (parasitiska / skydd) dioder som vanligtvis finns mellan alla I / O-stift på en IC och den positiva matningsskenan (anod till stift, katod till positiv matningsskena) som hjälper till att skydda mot statisk skador på en naken IC och är ofta inneboende i den fysiska halvledarkonstruktionen!

Samma typ av parasit- / skyddsdioder finns på Raspberry Pi: s GPIO-stift och det betyder att när RPi är utan ström kommer en GPIO-stift att se ut som en diod på GPIO-stiftet med anoden på GPIO-stiftet och katod till (nu vid jordspänning eftersom enheten inte drivs) RPi 3,3V skena. Allt som är anslutet till RPi - som en öppen avloppsutgång från Powerboost-kortet, skulle också vara jordad via den dioden tillräckligt bra för att detta inte är ett problem när RPi är avstängd eftersom Powerboost har ett lågt batteri men en direkt anslutning av LBO-utgången med en pull-up till RPis 3,3 V-skena kommer också att lysa upp LBO-LED på Powerboost-kortet tills RPi är igång!

tl; dr;

Jag föreslår följande krets:

A simple Common Emitter stage with a 10KOhm pull up resistor (R1) onto the LBO pin and a series 47KOhm resistor (R2) to the base of a generic NPN transistor (Q1) stage with a collector resistor of 2.2KOhm (R3) to the RPi +3.3Volt supply and another 47K series resistor (R4) to an RPi GPIO (input) pin.

R1 ger tillräckligt med uppströmsström för att slå på Q1 under "normala" förhållanden, R2 förhindrar att den främre förspända bas-emitter-korsningen klämmer fast LBO-stiftet till endast 0,7 V över marken när transistorn är påslagen - annars LBO Lysdioden på Power Boost-kortet skulle lysa hela tiden, även om batteriet var över 3,2 volt! R3 tillåter tillräckligt med ström att strömma genom Q1 för att tillåta transistorn att mättas så att en typisk V CEsat på 0,5 volt kan uppnås vilket blir ingångsnivån via R4 som RPi kommer att se (ingen intern dragning -up eller pull-down ska ställas in på den GPIO-stiftet). När Power boost-batterinivån sjunker under 3,2 V-nivån är enheten till Q1-basen fortfarande tillräcklig för att fungera, men när LB-utgången dras till marknivå av IC på Power boost-modulen kommer det inte att finnas mer drivström, kommer Q1 att stäng av och dess kollektorspänning höjs till 3.3V RPi-nivån, genom inverkan av R3 så när RPi upptäcker en Hög nivå på den valda stiftet är det dags att ha ett GPIO-övervakningsskript som körs i bakgrunden från rc.local (eller vilken nyfångad metod som helst systemd tvingar sina användare att använda) för att utföra avstängning -h -p nu Batteriet är urladdat på PowerBoost-enheten!

Hoppas att det är till nytta.

PS Se min fråga på hur-gör-init-lära känna-om-kraft-händelser detta har ett Python-skript som övervakar en GPIO-pin för en förändring för att initiera en avstängning som du borde kunna ändra för att använda det här svaret.

PNDA
2016-02-22 04:49:15 UTC
view on stackexchange narkive permalink

Det bästa svaret skulle vara att du skaffar en DAC-omvandlare (digital-till-analog) och använder den för att mäta spänningen i nämnda LBO. Jag rekommenderar MCP3008-chipet. Då kan du ha ett skript som mäter spänningen där och stängs av när det går till det minimum du angav.

Om du vill ha en snabb fix kan du bara skapa en spänningsdelare och ordna den så att 5V på LBO är 3,3 V på GPIO. Den låga tröskeln för en GPIO-stift är cirka 1,1 V eller lägre. Så om LBO + -delaren är 1,1V eller lägre, ser Pi den som en låg. Det är upp till ditt skript hur du hanterar det.

Du kan inte skapa en spänningsdelare, eftersom stiften är öppen, så spänningsdelaren matar bara ut 0v, oavsett vad.
Att använda en ADC är överdriven och onödigt komplex. Till att börja med behöver du ett igångprogram för att övervaka. En mycket enklare och mer tillförlitlig metod om man använder en komparator. Jag har byggt många sådana kretsar med en LM311 även om det förmodligen finns bättre chips som kommer att rinna av 3.3V.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...