Inhoudsopgave:
- Stap 1: Materialen
- Stap 2: Beginnen met coderen
- Stap 3: Bestand met beperkingen
- Stap 4: Flip Flop-bestand
- Stap 5: Segmentenbestand
- Stap 6: Clock Divider-bestand
- Stap 7: Servosignaalbestand
- Stap 8: Servo Top-bestand
- Stap 9: Topbestand
- Stap 10: Testen in Vivado
- Stap 11: Introductie van hardware bouwen
- Stap 12: Voorbereiding
- Stap 13: Solderen
- Stap 14: Finale
Video: CPE 133 afvalsorteerder - Ajarnpa
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Voor onze CPE 133-les bij Cal Poly werd ons verteld een VHDL/Basys 3-project te maken dat het milieu zou helpen en dat eenvoudig genoeg was om het te implementeren met onze nieuwe kennis van digitaal ontwerp. Het idee achter ons project dat mensen over het algemeen niet nadenken over waar ze hun afval gooien. We besloten een machine te maken die mensen zou dwingen na te denken over waar ze hun afval neerzetten. Onze afvalsorteerder neemt gebruikersinvoer door drie schakelaars, die elk ofwel afval, recycling of compost vertegenwoordigen. Zodra de gebruiker het soort afval heeft geselecteerd dat hij wil afvoeren, drukt hij op een knop. Deze knop zorgt ervoor dat de bijbehorende containerdeksels worden geopend. De machine gebruikte ook het display op de Basys 3 om aan te geven of een van de deksels momenteel open is. Wanneer de knop wordt losgelaten, gaan de deksels weer dicht zodat de machine klaar is voor de volgende gebruiker.
Stap 1: Materialen
De benodigde materialen voor dit project zijn:
Basys 3 bord
Computer waarop Vivado is geïnstalleerd
3x servo*
3 voet koperdraad
Draadknipper/Stripper
Soldeerbout en soldeer
* omdat servo's duur zijn en we studenten zijn, hebben we een weerstand van 68 ohm en een LED voor elke servo als prototype vervangen (code werkt op dezelfde manier)
Stap 2: Beginnen met coderen
Er moet veel code worden geschreven voor dit project. We zullen VHDL-code gebruiken die is geschreven in Vivado. Om te beginnen willen we een nieuw project maken. Eerst geeft u het project een naam en specificeert u het projecttype. Zorg ervoor dat u dezelfde instellingen selecteert als op de afbeelding. Wanneer u bij het bronnenscherm bent aangekomen, wilt u zes bronnen toevoegen met de namen "top", "flip_flop", "segments", "servo_top", "servo_sig" en "clk_div". Zorg ervoor dat u VHDL selecteert voor de taal van elk bestand, niet Verilog. Op het scherm met beperkingen moet u één bestand maken voor de pintoewijzing. De naam van dit bestand is niet belangrijk. U wordt dan gevraagd om het bord te selecteren dat u gaat gebruiken. Zorg ervoor dat u de juiste selecteert. Referentie foto's voor de juiste selectie. In de laatste stap wordt u gevraagd om de in- en uitgangen van elk bronbestand te specificeren. Deze stap kan later worden gecodeerd, dus klik op volgende.
Stap 3: Bestand met beperkingen
In deze stap zullen we het bestand met beperkingen schrijven. Dit vertelt Vivado welke pinnen welke signalen van het circuit zullen verzenden/ontvangen. We hebben de klok nodig, drie schakelaars, het zevensegmentendisplay (zeven kathoden en vier anodes), een knop en de drie PMOD-uitgangspinnen die de servo / LED zal gebruiken. Referentiefoto's voor hoe de code eruit moet zien.
Stap 4: Flip Flop-bestand
Het volgende bestand dat we gaan schrijven is het bronbestand flip_flip. Dit wordt een VHDL-implementatie van een D-flip-flop. Met andere woorden, het zal zijn invoer alleen doorgeven aan de uitvoer op de stijgende flank van het kloksignaal en wanneer de knop wordt ingedrukt. Het heeft klok, D en de knop nodig als invoer en zal Q uitvoeren. Verwijs naar de foto's voor code. Het doel van dit bestand is om de bakken alleen te laten openen wanneer de knop wordt ingedrukt in plaats van direct te openen telkens wanneer de schakelaar wordt omgedraaid en alleen te sluiten wanneer de schakelaar terug wordt gedraaid.
Stap 5: Segmentenbestand
Het volgende bestand dat moet worden geschreven, is het segmentenbestand. Dit neemt de knop zoals in invoer- en uitvoerwaarden voor de zeven kathoden en vier anodes van het zevensegmentendisplay van de Basys 3. Dit bestand zorgt ervoor dat het display met zeven segmenten een "C" toont wanneer de bakken gesloten zijn en een "O" wanneer de bakken open zijn. Voor code zie bijgevoegde foto.
Stap 6: Clock Divider-bestand
Servo's werken door een PWM-signaal op te nemen met een frequentie van 64k Hz, terwijl de klok die in de Basys 3 is ingebouwd, werkt op 50M Hz. Het klokverdelerbestand converteert de standaardklok naar een vriendelijke frequentie voor de servo. Het bestand neemt de klok en een resetsignaal als invoer en geeft een nieuw kloksignaal af. Zie de bijgevoegde foto voor de code.
Stap 7: Servosignaalbestand
Het servosignaalbestand heeft een klokinvoer, een reset-invoer en een gewenste positie-invoer. Het zal een PWM-signaal uitvoeren dat de servo naar de gewenste positie zal sturen. Dit bestand gebruikt het kloksignaal dat in het laatste bestand is gemaakt om een PWM-signaal voor de servo te maken met verschillende werkcycli, afhankelijk van de gewenste positie. Hierdoor kunnen we de servo's draaien die de deksels van de vuilnisbakken aansturen. Zie de bijgevoegde foto voor de code.
Stap 8: Servo Top-bestand
Het doel van dit bestand is om de laatste twee bestanden te compileren tot een functionele servodriver. Het zal een klok, een reset en een positie als invoer vergen en het servo PWM-signaal uitvoeren. Het zal zowel de klokverdeler als het servosignaalbestand als componenten gebruiken en zal een intern kloksignaal bevatten om de gewijzigde klok van de klokverdeler door te geven aan het servosignaalbestand. Zie foto's op
Stap 9: Topbestand
Dit is het belangrijkste bestand van het project, omdat het alles omvat wat we samen hebben gemaakt. Het zal de knop, de drie schakelaars en de klok als invoer gebruiken. Het geeft de zeven kathodes, de vier anodes en de drie servo/LED-signalen als uitgangen. Het gebruikt de flip-flop, segmenten en servo_top-bestanden als componenten en heeft een interne schakelaar en een intern servosignaal.
Stap 10: Testen in Vivado
Voer Synthese, implementatie en schrijf bitsream uit in Vivado. Als u foutmeldingen tegenkomt, zoekt u de locatie van de fout en vergelijkt u deze met de gegeven code. Doorloop eventuele fouten totdat al deze runs met succes zijn voltooid.
Stap 11: Introductie van hardware bouwen
In deze stap maakt u de LED-hardware die we in ons prototype hebben gebruikt. Als u servo's gebruikt, moet het project klaar zijn voor gebruik zolang de juiste pinnen worden gebruikt. Als u LED's gebruikt, volgt u de onderstaande stappen.
Stap 12: Voorbereiding
Knip de draad in zes gelijke stukken. Strip de uiteinden van elk stuk draad voldoende zodat er gesoldeerd kan worden. Scheid LED's, weerstanden en draden in drie groepen. Soldeerbout opwarmen.
Stap 13: Solderen
Soldeer elk van de 68 ohm weerstanden aan de negatieve kant van hun corresponderende LED. Soldeer een draad aan de positieve kant van de LED en een andere draad aan de kant van de weerstand die niet aan de led is gesoldeerd. U zou drie van de hierboven afgebeelde LED-constructies moeten hebben.
Stap 14: Finale
Steek elke positieve draad in de corresponderende PMOD-pin en elk negatief in een geaarde PMOD-pin. Voeg optioneel kartonnen bakken toe om vuilnisbakken weer te geven en verberg uw soldeerpuin. Zodra de draden correct zijn aangesloten en de code correct is geüpload naar het bord zonder fouten, zou de machine moeten werken zoals bedoeld. Als er iets misgaat, ga dan terug naar de vorige stappen om het probleem op te lossen. Veel plezier met je nieuwe "vuilnissorteerder".