Re: Trådlös körkontroll
Postat: 2016-09-17, 04:45
Här är kretsschemat för körkontrollen för den intresserade. "Adafruit Feather HUZZAH ESP8266" är ett färdigt kretskort med CPU och WiFi. Det är "ESP8266" som är själva CPU:n och den har stöd för Wifi, och på kretskortet finns lite kringkomponenter för USB-kommunikation, laddning av batteriet, m.m.
OLED1 är displayen och har 128x64 pixlars upplösning.
IC1 är en GPIO-expander. Den har 16 GPIO (General Purpose Input/Output) och används för att Feather Huzzah kretsen har alldeles för få I/O.
Tangentbordet är kopplat i en 4x4 matris. GPA0 - GPA3 är utgångar för tangentbordet och talar om vilken rad på tangentbordet som CPU:n vill läsa av, GPA4 - GPA7 är ingångar för tangentbordet och läser av en kolumn. Dioderna D1-D4 är skyddsdioder för utgångarna GPA0 - GPA3 ifall man trycker ner flera tangenter samtidigt.
GPB0 och GPB1 är utgångar för displayen. DC är Data/Command och väljer om man vill skicka ett data-ord eller ett kommando till displayen. Reset är för att nollställa skärmen.
GPB2 och GPB3 är för att slå på/av mätning av potentiometern resp. batteriet. Mätningen drar mycket ström eftersom ADC:n (IC2) kräver ganska låg impedans på ingångarna, så motstånden R1, R3 och R4 måste ha relativt låg resistans.
GPB4 och GPB7 styr lysdioden resp. summern.
IC2 är A/D-omvandlare, alltså omvandlar ett analogt värde till ett digitalt värde, och används för att läsa av potentiometern och batterispänningen. "Enable measure BAT" resp. "Enable measure Pot" måste vara låga (0 volt) för att mätning ska ske. R1 som är potentiometern är en spänningsdelare mellan +3,3 volt och GND.
R3 och R4 är en spänningsdelare för batterispänningen. Transistorn Q1 slår på/av mätning av batteriet. R7 är för att garantera att Q1 stänger av om "Enable measure BAT" är hög (alltså +3,3 volt). D6 och D7 behövs eftersom körkontrollen arbetar med 3,3 volt, medan batteriet kan ha 4,2 volt under laddning vilket är för mycket för kretsen i övrigt. Varje diod har ett spänningsfall på ca 0,7 volt vilket ger ett totalt spänningsfall på 1,4 volt vilket skyddar IC1 från för hög spänning.
IC3 är RAM-minne med batteribackup. Dioderna D8 och D9 har samma funktion som D6 och D7, att minska spänningen från batteriet så att IC3 inte får för hög spänning. CPU:n stänger av om batterispänningen sjunker under 3,3 volt, medan RAM-kretsen klarar sig på betydligt mindre spänning för att hålla kvar minnet.
Den uppmärksamme har kanske noterat ett avlångt hål i lådan, mellan knapparna S1 (Cancel) och S3 (Reverse). Där sitter strömbrytaren S17 som är en skjutströmbrytare som behöver slås om när man programmerar om körkontrollen, alltså uppgraderar programvaran. Men den strömbrytaren sitter avsiktligt svåråtkomligt då vanliga användare normalt inte ska slå om den. Vill man uppgradera programvaran så får man ta en penna eller motsvarande och peta i hålet så att strömbrytaren slås om. Programmering sker med Arduino-programvaran via USB.
SPI-bussen:
Kommunikationen mellan CPU:n och övriga kretsar sker med SPI-bussen. Den har tre signaler, MOSI (MasterOutSlaveIn, Master -> Slave), MISO (MasterInSlaveOut, Slave -> Master) och SCK (klocka). SPI-bussen fungerar i praktiken som ett shift-register. För att slavarna på SPI-bussen ska veta vilken slav som CPU:n (mastern) vill prata med har man även CS (Chip Select) mellan CPU och slav, som talar om för slavarna när CPU:n vill tala med en slav. Det är alltid CPU:n (mastern) som avgör om och när kommunikation sker.
Med vänlig hälsning
Daniel
OLED1 är displayen och har 128x64 pixlars upplösning.
IC1 är en GPIO-expander. Den har 16 GPIO (General Purpose Input/Output) och används för att Feather Huzzah kretsen har alldeles för få I/O.
Tangentbordet är kopplat i en 4x4 matris. GPA0 - GPA3 är utgångar för tangentbordet och talar om vilken rad på tangentbordet som CPU:n vill läsa av, GPA4 - GPA7 är ingångar för tangentbordet och läser av en kolumn. Dioderna D1-D4 är skyddsdioder för utgångarna GPA0 - GPA3 ifall man trycker ner flera tangenter samtidigt.
GPB0 och GPB1 är utgångar för displayen. DC är Data/Command och väljer om man vill skicka ett data-ord eller ett kommando till displayen. Reset är för att nollställa skärmen.
GPB2 och GPB3 är för att slå på/av mätning av potentiometern resp. batteriet. Mätningen drar mycket ström eftersom ADC:n (IC2) kräver ganska låg impedans på ingångarna, så motstånden R1, R3 och R4 måste ha relativt låg resistans.
GPB4 och GPB7 styr lysdioden resp. summern.
IC2 är A/D-omvandlare, alltså omvandlar ett analogt värde till ett digitalt värde, och används för att läsa av potentiometern och batterispänningen. "Enable measure BAT" resp. "Enable measure Pot" måste vara låga (0 volt) för att mätning ska ske. R1 som är potentiometern är en spänningsdelare mellan +3,3 volt och GND.
R3 och R4 är en spänningsdelare för batterispänningen. Transistorn Q1 slår på/av mätning av batteriet. R7 är för att garantera att Q1 stänger av om "Enable measure BAT" är hög (alltså +3,3 volt). D6 och D7 behövs eftersom körkontrollen arbetar med 3,3 volt, medan batteriet kan ha 4,2 volt under laddning vilket är för mycket för kretsen i övrigt. Varje diod har ett spänningsfall på ca 0,7 volt vilket ger ett totalt spänningsfall på 1,4 volt vilket skyddar IC1 från för hög spänning.
IC3 är RAM-minne med batteribackup. Dioderna D8 och D9 har samma funktion som D6 och D7, att minska spänningen från batteriet så att IC3 inte får för hög spänning. CPU:n stänger av om batterispänningen sjunker under 3,3 volt, medan RAM-kretsen klarar sig på betydligt mindre spänning för att hålla kvar minnet.
Den uppmärksamme har kanske noterat ett avlångt hål i lådan, mellan knapparna S1 (Cancel) och S3 (Reverse). Där sitter strömbrytaren S17 som är en skjutströmbrytare som behöver slås om när man programmerar om körkontrollen, alltså uppgraderar programvaran. Men den strömbrytaren sitter avsiktligt svåråtkomligt då vanliga användare normalt inte ska slå om den. Vill man uppgradera programvaran så får man ta en penna eller motsvarande och peta i hålet så att strömbrytaren slås om. Programmering sker med Arduino-programvaran via USB.
SPI-bussen:
Kommunikationen mellan CPU:n och övriga kretsar sker med SPI-bussen. Den har tre signaler, MOSI (MasterOutSlaveIn, Master -> Slave), MISO (MasterInSlaveOut, Slave -> Master) och SCK (klocka). SPI-bussen fungerar i praktiken som ett shift-register. För att slavarna på SPI-bussen ska veta vilken slav som CPU:n (mastern) vill prata med har man även CS (Chip Select) mellan CPU och slav, som talar om för slavarna när CPU:n vill tala med en slav. Det är alltid CPU:n (mastern) som avgör om och när kommunikation sker.
Med vänlig hälsning
Daniel