CPE 133 afvalsorteerder - Ajarnpa
CPE 133 afvalsorteerder - Ajarnpa

Video: CPE 133 afvalsorteerder - Ajarnpa

Video: CPE 133 afvalsorteerder - Ajarnpa
Video: CPE 133 Lab 2 2025, Januari-
Anonim
CPE 133 Afvalsorteerder
CPE 133 Afvalsorteerder

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

Materialen
Materialen
Materialen
Materialen
Materialen
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

Beginnen met coderen
Beginnen met coderen
Beginnen met coderen
Beginnen met coderen
Beginnen met coderen
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

Beperkingen Bestand
Beperkingen Bestand
Beperkingen Bestand
Beperkingen Bestand

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

Flip Flop-bestand
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

Segmenten Bestand
Segmenten Bestand

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

Klok Divider Bestand
Klok 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

Servosignaalbestand
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

Servo Top-bestand
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

Topbestand
Topbestand
Topbestand
Topbestand
Topbestand
Topbestand
Topbestand
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

Solderen
Solderen
Solderen
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

Finale
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".