Pico.Lab is een veelzijdige, open-source bring-up tool gebaseerd op de Raspberry Pi RP2350 microcontroller. Het meest opvallende kenmerk is de web-gebaseerde gebruikersinterface die direct vanaf het apparaat wordt geserveerd via een virtuele USB-Ethernetverbinding, waardoor externe software of stuurprogramma's overbodig zijn.
Belangrijkste functionaliteiten:
- Meetinstrumenten: Bevat een 4-kanaals oscilloscoop (400kHz bandbreedte) en een 8-kanaals logic analyzer (100MS/s).
- Voeding: Een via I2C instelbare buck-boost converter (1V tot 5V) met real-time monitoring van stroom en spanning.
- Communicatie: Geïntegreerde bus-masters voor UART, SPI en I2C, evenals directe GPIO-besturing.
- Compatibiliteit: Ondersteunt spanningsniveaus van 1,65V tot 5,5V dankzij dedicated level shifters.
Technische details: De software maakt gebruik van TinyUSB en lwIP om de microcontroller als netwerkadapter te laten fungeren. De web-interface wordt vanuit het SPI-flashgeheugen geserveerd en communiceert met de firmware via HTTP-verzoeken en Server-Sent Events (SSE) voor efficiënte telemetrie.
Hoewel de firmware op standaard Pico-boards draait, is er een custom PCB ontwikkeld voor volledige functionaliteit, inclusief een analoge front-end met hoge ingangsimpedantie en ESD-bescherming. De behuizing is gerealiseerd middels 3D-resinprinting voor een professionele uitstraling en leesbaarheid.
Pico.Lab - Web-GUI Embedded Multitool
Belangrijkste kenmerken
- Gebruiksvriendelijke en krachtige web-gebaseerde GUI.
- Werkt met vrijwel elk besturingssysteem en elke browser.
- Ontworpen voor het Pico.Lab-board, maar draait op elke Raspberry Pi Pico.
- 4-kanaals oscilloscoop met 400kHz bandbreedte.
- 8-kanaals logic analyzer met 100MS/s.
- Instelbare voeding (MPS MP28167) met stroommeting.
- Directe UART/SPI/I2C-communicatie.
- Ondersteuning voor spanningsniveaus van 1,65 tot 5,5V.
- Bescherming tegen ESD, overspanning en overstroom.
Layout-bestanden, code en STL's zijn beschikbaar op GitHub: https://github.com/CoretechR/picolab
Achtergrond en motivatie
Tijdens het werken aan hardwareprojecten is er vaak weinig ruimte op het bureau. Daarom is er een voorkeur voor compacte tools, zoals de Saleae Logic of PPK2, boven volledige oscilloscopen en voedingen. Het doel was om enkele van de meest gebruikte tools te combineren in een DIY-multitool. Bestaande projecten en producten zijn vaak ofwel erg duur, of niet gebruiksvriendelijk omdat ze enkel een command-line interface (CLI) bieden.
De inspiratie voor de interface kwam van het GP2040-CE project voor Raspberry Pi Pico-gamepads. De mogelijkheid om een webinterface te hosten over een eenvoudige USB-verbinding leidde tot de ontwikkeling van Pico.Lab, een instrument dat maximale prestaties uit de hardware van de Pico haalt. Hoewel Pico.Lab een eigen PCB heeft, draait de firmware (met kleine beperkingen) op elke standaard Raspberry Pi Pico.
Software en Web-interface
De webinterface wordt mogelijk gemaakt doordat de RP2350 volledige controle heeft over de USB-interface en kan fungeren als een netwerkadapter. Een lwIP-server handelt inkomende webverzoeken af voor het IP-adres, vergelijkbaar met het openen van de configuratie-interface van een wifi-router. Dit is gerealiseerd met TinyUSB en lwIP binnen de Raspberry Pi Pico SDK.
Om de website vanaf de Pico te hosten, wordt de volledige inhoud opgeslagen in het SPI-flashgeheugen. Via de CMake-functie picosetlwiphttpdcontent worden HTML-, JS- en CSS-bestanden tijdens de compilatie automatisch geconverteerd naar C-code.
Datacommunicatie
Voor de communicatie tussen de webinterface en de firmware op de RP2350 is gekozen voor een combinatie van HTTP GET/POST-verzoeken en Server-Sent Events (SSE), omdat WebSockets te complex en CPU-intensief bleken voor deze microcontroller.
- Telemetry: De status van alle 8 ADC's en 8 GPIO-pinnen wordt continu gestreamd via SSE op 100Hz. De data wordt verzonden als een 36-tekens lange uppercase hexadecimale string. Dit verbruikt ongeveer 1% van de USB 1.1-bandbreedte (12 Mbit/s) en dient tevens als heartbeat-signaal.
- Web-interface bediening: Acties zoals het indrukken van een knop of het aanpassen van een waarde gebeuren via HTTP GET. Sliders zijn voorzien van 'throttling' om te voorkomen dat de server overspoeld wordt met verzoeken.
- Grote datablokken: Bij een trigger van de oscilloscoop of logic analyzer wordt de buffer via SSE naar de browser gepusht. Oscilloscoop-samples zijn Base64-gecodeerd; logic analyzer-samples zijn Run-Length Encoded (RLE) en worden in Base64-chunks verzonden. Tijdens deze transfers wordt de achtergrond-telemetrie gepauzeerd.
- Kleine datatransfers: De UART-terminal gebruikt HTTP GET voor de baudrate, HTTP POST voor uitgaande data en SSE voor inkomende data. I2C- en SPI-masters werken op een vergelijkbare manier.
De gebruikersinterface is ontworpen als een venstersysteem waarbij elk instrument als een aparte 'app' wordt weergegeven, waardoor tools naast elkaar kunnen worden gebruikt.
Hardware en Behuizing
De behuizing is een 3D-ontwerp bestaande uit een boven- en onderkant, twee beugels voor de boot-knop en een ring rond de USB-C poort, samengevoegd met vier M3-schroeven.
Er is gebruikgemaakt van een resin-printservice van JLC om de leesbaarheid van de kleine pin-labels te garanderen en om een transparante look te realiseren. De onderkant is zwart, de bovenkant transparant en de beugels zijn gekleurd. De transparante delen zijn geschuurd en gespoten voor een matte 'frosted-glass' uitstraling. Een nadeel van de resin-prints is dat het lastig is om schroefdraad te tappen zonder dat het materiaal verpulvert; hitte-inserts zijn niet mogelijk omdat resin geen thermoplast is.
Elektronica
Hoewel de firmware op een standaard Pico draait, is er een custom PCB ontworpen om volledige functionaliteit en robuustheid te bieden.
Microcontroller en Analoge sectie
Er is gekozen voor de RP2350B vanwege de 48-pin behuizing met meer GPIO's en 8 ADC-kanalen (tegenover 4 bij de RP2350A). De ADC's worden verdeeld over de oscilloscoop en het monitoren van stroom en spanning. Voor een hogere nauwkeurigheid is een spanningsreferentie (LM4040) toegevoegd aan de VRef-ingang. Een 90°-tactiele schakelaar op de rand van het bord dient voor de USB-bootloader en is tevens aangesloten op een GPIO-pin.
Voeding en Monitoring
Voor de software-instelbare uitgangsspanning is de MPS MP28167-A buck-boost converter gebruikt. Deze wordt volledig via I2C aangestuurd, waarbij de uitgangsspanning in stappen van 0,8mV kan worden ingesteld tussen 1V en 5V. De stroomlimiet is eveneens configureerbaar. Omdat de MP28167 zelf geen uitgangsspanning of -stroom kan uitlezen, zijn een spanningsdeler en een current-sense amplifier toegevoegd die direct verbonden zijn met de ADC's van de RP2350. Er is ook stroommeting toegevoegd voor de 3,3V en 5V rails. Een ideale diode (LM66100) beschermt alle uitgangsrails tegen omgekeerde stroom.
Instrumenten
- Oscilloscoop: De analoge front-end bevat een hoge ingangsimpedantie, een op-amp als bufferversterker en een RC-filter, waardoor voltages tot circa 12V gemeten kunnen worden.
- Digitale GPIO's: Er zijn 8 digitale GPIO's voor de logic analyzer en directe besturing. Om compatibiliteit met verschillende target-voltages (1,2V tot 5V) te garanderen, is de SN74LVC1T45DBV level shifter gebruikt. Elke poort heeft een schakelbare pull-up weerstand.
- Bus-masters: Voor UART, SPI en I2C zijn dedicated pinnen gebruikt. Omdat I2C open-drain signalen vereist, is hiervoor de gespecialiseerde PI4ULS5V202 level shifter toegevoegd.
Pico.Lab - Web-GUI Embedded Multitool
Belangrijkste kenmerken
- Gebruiksvriendelijke en krachtige web-gebaseerde GUI.
- Werkt met vrijwel elk besturingssysteem en elke browser.
- Ontworpen voor het Pico.Lab-board, maar draait op elke Raspberry Pi Pico.
- 4-kanaals oscilloscoop met 400kHz bandbreedte.
- 8-kanaals logic analyzer met 100MS/s.
- Instelbare voeding (MPS MP28167) met stroommeting.
- Directe UART/SPI/I2C-communicatie.
- Ondersteuning voor spanningsniveaus van 1,65 tot 5,5V.
- Bescherming tegen ESD, overspanning en overstroom.
Layout-bestanden, code en STL's zijn beschikbaar op GitHub: https://github.com/CoretechR/picolab
Achtergrond en motivatie
Tijdens het werken aan hardwareprojecten is er vaak weinig ruimte op het bureau. Daarom is er een voorkeur voor compacte tools, zoals de Saleae Logic of PPK2, boven volledige oscilloscopen en voedingen. Het doel was om enkele van de meest gebruikte tools te combineren in een DIY-multitool. Bestaande projecten en producten zijn vaak ofwel erg duur, of niet gebruiksvriendelijk omdat ze enkel een command-line interface (CLI) bieden.
De inspiratie voor de interface kwam van het GP2040-CE project voor Raspberry Pi Pico-gamepads. De mogelijkheid om een webinterface te hosten over een eenvoudige USB-verbinding leidde tot de ontwikkeling van Pico.Lab, een instrument dat maximale prestaties uit de hardware van de Pico haalt. Hoewel Pico.Lab een eigen PCB heeft, draait de firmware (met kleine beperkingen) op elke standaard Raspberry Pi Pico.
Software en Web-interface
De webinterface wordt mogelijk gemaakt doordat de RP2350 volledige controle heeft over de USB-interface en kan fungeren als een netwerkadapter. Een lwIP-server handelt inkomende webverzoeken af voor het IP-adres, vergelijkbaar met het openen van de configuratie-interface van een wifi-router. Dit is gerealiseerd met TinyUSB en lwIP binnen de Raspberry Pi Pico SDK.
Om de website vanaf de Pico te hosten, wordt de volledige inhoud opgeslagen in het SPI-flashgeheugen. Via de CMake-functie picosetlwiphttpdcontent worden HTML-, JS- en CSS-bestanden tijdens de compilatie automatisch geconverteerd naar C-code.
Datacommunicatie
Voor de communicatie tussen de webinterface en de firmware op de RP2350 is gekozen voor een combinatie van HTTP GET/POST-verzoeken en Server-Sent Events (SSE), omdat WebSockets te complex en CPU-intensief bleken voor deze microcontroller.
- Telemetry: De status van alle 8 ADC's en 8 GPIO-pinnen wordt continu gestreamd via SSE op 100Hz. De data wordt verzonden als een 36-tekens lange uppercase hexadecimale string. Dit verbruikt ongeveer 1% van de USB 1.1-bandbreedte (12 Mbit/s) en dient tevens als heartbeat-signaal.
- Web-interface bediening: Acties zoals het indrukken van een knop of het aanpassen van een waarde gebeuren via HTTP GET. Sliders zijn voorzien van 'throttling' om te voorkomen dat de server overspoeld wordt met verzoeken.
- Grote datablokken: Bij een trigger van de oscilloscoop of logic analyzer wordt de buffer via SSE naar de browser gepusht. Oscilloscoop-samples zijn Base64-gecodeerd; logic analyzer-samples zijn Run-Length Encoded (RLE) en worden in Base64-chunks verzonden. Tijdens deze transfers wordt de achtergrond-telemetrie gepauzeerd.
- Kleine datatransfers: De UART-terminal gebruikt HTTP GET voor de baudrate, HTTP POST voor uitgaande data en SSE voor inkomende data. I2C- en SPI-masters werken op een vergelijkbare manier.
De gebruikersinterface is ontworpen als een venstersysteem waarbij elk instrument als een aparte 'app' wordt weergegeven, waardoor tools naast elkaar kunnen worden gebruikt.
Hardware en Behuizing
De behuizing is een 3D-ontwerp bestaande uit een boven- en onderkant, twee beugels voor de boot-knop en een ring rond de USB-C poort, samengevoegd met vier M3-schroeven.
Er is gebruikgemaakt van een resin-printservice van JLC om de leesbaarheid van de kleine pin-labels te garanderen en om een transparante look te realiseren. De onderkant is zwart, de bovenkant transparant en de beugels zijn gekleurd. De transparante delen zijn geschuurd en gespoten voor een matte 'frosted-glass' uitstraling. Een nadeel van de resin-prints is dat het lastig is om schroefdraad te tappen zonder dat het materiaal verpulvert; hitte-inserts zijn niet mogelijk omdat resin geen thermoplast is.
Elektronica
Hoewel de firmware op een standaard Pico draait, is er een custom PCB ontworpen om volledige functionaliteit en robuustheid te bieden.
Microcontroller en Analoge sectie
Er is gekozen voor de RP2350B vanwege de 48-pin behuizing met meer GPIO's en 8 ADC-kanalen (tegenover 4 bij de RP2350A). De ADC's worden verdeeld over de oscilloscoop en het monitoren van stroom en spanning. Voor een hogere nauwkeurigheid is een spanningsreferentie (LM4040) toegevoegd aan de VRef-ingang. Een 90°-tactiele schakelaar op de rand van het bord dient voor de USB-bootloader en is tevens aangesloten op een GPIO-pin.
Voeding en Monitoring
Voor de software-instelbare uitgangsspanning is de MPS MP28167-A buck-boost converter gebruikt. Deze wordt volledig via I2C aangestuurd, waarbij de uitgangsspanning in stappen van 0,8mV kan worden ingesteld tussen 1V en 5V. De stroomlimiet is eveneens configureerbaar. Omdat de MP28167 zelf geen uitgangsspanning of -stroom kan uitlezen, zijn een spanningsdeler en een current-sense amplifier toegevoegd die direct verbonden zijn met de ADC's van de RP2350. Er is ook stroommeting toegevoegd voor de 3,3V en 5V rails. Een ideale diode (LM66100) beschermt alle uitgangsrails tegen omgekeerde stroom.
Instrumenten
- Oscilloscoop: De analoge front-end bevat een hoge ingangsimpedantie, een op-amp als bufferversterker en een RC-filter, waardoor voltages tot circa 12V gemeten kunnen worden.
- Digitale GPIO's: Er zijn 8 digitale GPIO's voor de logic analyzer en directe besturing. Om compatibiliteit met verschillende target-voltages (1,2V tot 5V) te garanderen, is de SN74LVC1T45DBV level shifter gebruikt. Elke poort heeft een schakelbare pull-up weerstand.
- Bus-masters: Voor UART, SPI en I2C zijn dedicated pinnen gebruikt. Omdat I2C open-drain signalen vereist, is hiervoor de gespecialiseerde PI4ULS5V202 level shifter toegevoegd.