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.