Pi Servo Hat-aansluitgids
Inleiding
Met de SparkFun Pi Servo Hat kan je Raspberry Pi tot 16 servomotoren aansturen via een I2C-verbinding. Dit bespaart GPIO en stelt u in staat de ingebouwde GPIO voor andere doeleinden te gebruiken. Bovendien voegt het Pi Servo Shield een seriële terminalverbinding toe waarmee je een Raspberry Pi kunt openen zonder hem op een monitor en toetsenbord aan te sluiten.
Vereiste materialen
Dit is wat u naast deze zelfstudie moet volgen. We raden aan om een lege microSD-kaart te kopen in plaats van een NOOBS-ready-kaart, omdat de NOOBS-ready-kaarten mogelijk geen nieuw genoeg besturingssysteem hebben om de Pi Zero W te ondersteunen.
Bovendien wil je een soort servomotor om de opstelling te testen. Probeer de voorbeelden verderop in de tutorial eerst te testen met de algemene sub-microservo.
Vereiste hulpmiddelen
Er is geen speciaal gereedschap nodig om deze productmontage te volgen. Je hebt een soldeerbout, soldeer en algemene soldeeraccessoires nodig.
Hardwareoverzicht
Er zijn maar een paar interessante items op het bord, omdat het een hoed is die is ontworpen om minimaal moeilijk te gebruiken te zijn.
USB Micro B-connector - Deze connector kan worden gebruikt om alleen de servomotoren van stroom te voorzien, of om de servomotoren en de Pi die op de hoed is aangesloten, van stroom te voorzien. Het kan ook worden gebruikt om verbinding te maken met de Pi via een seriële poortverbinding om te voorkomen dat u een monitor en toetsenbord hoeft te gebruiken voor het instellen van de Pi.
Isolatiejumper voeding – Deze jumper kan worden gewist (deze is standaard gesloten) om de servo-voedingsrail te isoleren van de Pi 5V-voedingsrail. Waarom zou je dat willen doen? Als er meerdere servo's zijn, of grote servo's die zwaar worden belast, kan het geluid dat door de servomotoren op de voedingsrail wordt veroorzaakt, een ongewenste werking in de Pi veroorzaken, tot een volledige reset of uitschakeling. Houd er rekening mee dat, zolang de Pi wordt gevoed, de seriële interface nog steeds werkt, ongeacht de status van deze jumper.
Servomotor pin headers - Deze headers zijn uit elkaar geplaatst om het gemakkelijker te maken om servomotoren eraan te bevestigen. Ze zijn in de juiste volgorde vastgemaakt voor de meeste servomotorconnectoren van het hobbytype.
Hardwareassemblage
We raden aan om de mannelijke headers op de Pi Zero W te solderen.
Mijn favoriete truc voor dit soort situaties is om één pin vast te solderen, vervolgens het soldeer op die pin te smelten met het strijkijzer in mijn rechterhand en mijn linkerhand te gebruiken om de header aan te passen totdat deze plat zit, zoals hieronder weergegeven. Zorg ervoor dat u soldeert met de kortere kant van de header en dat de langere pinnen zich aan de componentkant bevinden. Nadat je één pin hebt vastgemaakt, soldeer je alle pinnen vast aan de Pi Zero W.
Herhaal de stappen met de vrouwelijke header en de Pi Servo Hat.
Zorg ervoor dat u de korte pinnen vanaf de onderkant van het bord plaatst en soldeer aan de componentzijde toevoegt, zodat de Pi Servo Hat bovenop de mannelijke koppinnen van de Pi Zero W wordt gestapeld. Je moet er ook voor zorgen dat de header waterpas staat voordat je alle pinnen vast soldeert.
Nadat de headers zijn gesoldeerd, stapelt u de Pi Servo Hat op de Pi Zero W. Sluit vervolgens een hobbyservo aan op een kanaal "0" op basis van de servo die u gebruikt. Kijk eens naar de datasheet van de hobbyservo of verwijs naar enkele van de standaard servoconnector-pin-outs die in deze tutorial worden vermeld. Met behulp van een voldoende 5V-muuradapter kunnen we de Pi Zero W van stroom voorzien. Steek de muuradapter in een stopcontact voor stroom en sluit de micro-B-connector aan die is aangeduid als de "PWR IN" -poort op de Pi Zero W.
Software – Python
We zullen hier in detail bespreken hoe u toegang krijgt tot de pi-servohoed in Python en deze gebruikt.
De volledige voorbeeldcode is beschikbaar in de GitHub-repository van het product.
Toegang tot SMBus-bronnen instellen
Eerste punt:in de meeste interacties op OS-niveau, de I
2
C-bus wordt SMBus genoemd. Zo krijgen we onze eerste regels code. Dit importeert de smbus-module, maakt een object van het type SMBus en koppelt het aan bus "1" van de verschillende SMBuses van de Pi.
import smbus
bus =smbus.SMBus(1)
We moeten het programma het adres van het onderdeel vertellen. Standaard is het 0x40, dus stel een variabele in voor later gebruik.
addr =0x40
Vervolgens willen we de PWM-chip inschakelen en hem vertellen om de adressen automatisch te verhogen na een schrijfbewerking (waardoor we multi-byte-schrijfbewerkingen met één bewerking kunnen uitvoeren).
bus.write_byte_data(addr, 0, 0x20)bus.write_byte_data(addr, 0xfe, 0x1e)
Schrijf waarden naar de PWM-registers
Dat is alle setup die moet worden gedaan. Vanaf nu kunnen we gegevens naar de PWM-chip schrijven en verwachten dat deze reageert. Hier is een voorbeeld.
bus.write_word_data(addr, 0x06, 0)bus.write_word_data(addr, 0x08, 1250)
Het eerste schrijven is naar het "starttijd" -register voor kanaal 0. Standaard is de PWM-frequentie van de chip 200 Hz, of één puls per 5 ms. Het starttijdregister bepaalt wanneer de puls hoog wordt in de cyclus van 5 ms. Alle kanalen zijn gesynchroniseerd met die cyclus. Over het algemeen moet dit naar 0 worden geschreven. Het tweede schrijven is naar het "stoptijd" -register en het bepaalt wanneer de puls laag moet worden. Het bereik voor deze waarde is van 0 tot 4095, en elke telling vertegenwoordigt één segment van die periode van 5 ms (5 ms/4095), of ongeveer 1,2 us. De hierboven geschreven waarde van 1250 vertegenwoordigt dus ongeveer 1,5 ms hoge tijd per periode van 5 ms.
Servomotoren krijgen hun stuursignaal van die pulsbreedte. Over het algemeen levert een pulsbreedte van 1,5 ms een "neutrale" positie op, halverwege tussen de uitersten van het motorbereik. 1,0 ms levert ongeveer 90 graden uit het midden op en 2,0 ms levert -90 graden uit het midden. In de praktijk kunnen die waarden iets meer of minder dan 90 graden zijn en kan de motor in beide richtingen iets meer of minder dan 90 graden bewegen.
Om andere kanalen te adresseren, verhoogt u eenvoudig het adres van de twee registers hierboven met 4. Dus de starttijd voor kanaal 1 is 0x0A, voor kanaal 2 is 0x0E, kanaal 3 is 0x12, enz. en het stoptijdadres voor kanaal 1 is 0x0C, voor kanaal 2 is 0x10, kanaal 3 is 0x14, enz. Zie de onderstaande tabel.
Kanaal # | Startadres | Stopadres |
---|---|---|
Kr 0 | 0x06 | 0x08 |
Kl. 1 | 0x0A | 0x0C |
Ch 2 | 0x0E | 0x10 |
Kr 3 | 0x12 | 0x14 |
Ch 4 | 0x16 | 0x18 |
Kr 5 | 0x1A | 0x1C |
Ch 6 | 0x1E | 0x20 |
Hoofdstuk 7 | 0x22 | 0x24 |
Ch 8 | 0x26 | 0x28 |
Ch 9 | 0x2A | 0x2C |
Ch 10 | 0x2E | 0x30 |
Kr 11 | 0x32 | 0x34 |
Kr 12 | 0x36 | 0x38 |
Kr 13 | 0x3A | 0x3C |
Ch 14 | 0x3E | 0x40 |
Ch 15 | 0x42 | 0x44 |
Als u een 0 naar het startadres schrijft, vereist elke verschuiving van 90 graden 4,6 tellen naar het stopadres. Met andere woorden, vermenigvuldig het aantal graden offset van neutraal dat u wilt bereiken met 4,6, en tel dat resultaat dan op bij 1250 of trek het af, afhankelijk van de bewegingsrichting die u wenst. Een afwijking van 45 graden vanaf het midden is bijvoorbeeld 207 (45×4,6) tellingen, ofwel meer of minder dan 1250, afhankelijk van de richting waarin u de beweging wilt hebben.
Lees meer informatie...
Pi Servo Hat-aansluitgids
Productieproces
- Gids voor CNC-prototyping
- FLIR Lepton Hookup Guide
- Raspberry Pi 3 Starter Kit Aansluitgids
- Qwiic HAT voor Raspberry Pi Hookup Guide
- Voorgemonteerde 40-pins Pi Wedge Hookup Guide
- Simple Pi Robot
- Gids voor krachthamers
- Gids voor smeden van smeden
- Precisie gietgids
- Beknopte handleiding voor GD&T-parallellisme
- Een inleiding tot servopers