Innholdsfortegnelse:

Kjør en trinnmotor med en AVR -mikroprosessor: 8 trinn
Kjør en trinnmotor med en AVR -mikroprosessor: 8 trinn

Video: Kjør en trinnmotor med en AVR -mikroprosessor: 8 trinn

Video: Kjør en trinnmotor med en AVR -mikroprosessor: 8 trinn
Video: Автомобильный генератор для генератора с самовозбуждением с использованием ДИОДА 2024, Juli
Anonim
Kjør en trinnmotor med en AVR -mikroprosessor
Kjør en trinnmotor med en AVR -mikroprosessor

Har du noen steppemotorer fra skrivere/diskstasjoner/etc som ligger?

Noen undersøkelser med et ohmeter, etterfulgt av en enkel driverkode på mikroprosessoren din, og du vil gå i stil.

Trinn 1: Bli kjent med Steppers

Bli kjent med Steppers
Bli kjent med Steppers
Bli kjent med Steppers
Bli kjent med Steppers

I utgangspunktet må du finne ut hvor alle de små ledningene går.

Første trinn er å finne ut om det er en unipolar eller bipolar motor. Ta en titt på Jones on Steppers for en dypere bakgrunn, deretter på Ian Harries 'nettsted for en enkel metode for å finne ut en ukjent motor. Les deg litt opp, og bli med på en gjennomgang av denne motoren jeg fikk billig. (De selges for 0,99 dollar akkurat nå. De er små, relativt lette, men har ikke mye dreiemoment. Vet ikke hva det vil være bra for ennå.)

Trinn 2: Finn felles grunn

Finn felles grunn
Finn felles grunn
Finn felles grunn
Finn felles grunn

Så du har fem (eller fire eller seks) ledninger. Motoren din kommer til å ha to halvdeler, og du kan sikkert til og med fortelle det bare ved å se hvilken side hver ledning tilhører.

Hvis du bare ser på fire ledninger, har du flaks - det er en bipolar motor. Alt du trenger å gjøre er å finne ut hvilke to ledninger som går sammen. Hvis du har en unipolar motor, eller mer enn 4 ledninger, må du bryte ut ohmmetret. Det du leter etter er den vanlige (bakken) ledningen for hver halvdel. Du kan se hvilken som er malt i en bipolar motor fordi den har halv motstand mot noen av polene enn polene gjør på tvers av seg selv. På bildet er notatene mine fra å koble ledninger til ledninger og merke motstanden (eller hvis de er koblet i det hele tatt). Du kan se at White er grunnen for bunntrioen b/c den har halv motstand mot Rød eller Blå som de har til hverandre. (Denne motoren er merkelig og har ikke en midtkran på den øverste magnetspolen. Det er som om den er halvbipolar, halvunipolar. Kanskje du kan bruke denne til å føle rotasjon i rød-hvit-blå spole når den svart-gule spolen blir drevet.)

Trinn 3: Finn ut trinnrekkefølgen

Finn ut trinnrekkefølgen
Finn ut trinnrekkefølgen

Jeg skulle kjøre denne motoren som en bipolar, så jeg ignorerer den hvite jordledningen. Jeg har bare fire ledninger å bekymre meg for.

Du vil kanskje kjøre din unipolare motor som bipolar uansett, fordi den bruker hele spolen i begge faser i stedet for å veksle mellom de to halvdelene av hver spole. Mer spole = mer dreiemoment. Kjør strøm gjennom et par (noter polariteten du valgte) og kjør deretter strøm gjennom det andre paret samtidig. Når du kobler til det andre paret, må du se hvilken vei motoren svinger. Skriv ned dette. Snu polariteten på det første paret du valgte. Koble deretter til det andre paret igjen med polariteten også omvendt. Legg merke til retningen. Fra dette bør du kunne finne ut sekvensen for å rotere motoren i begge retninger. I mitt eksempel endte begge med å snu mot klokken, så hvis du går gjennom sekvensen på samme måte som jeg valgte, vil motoren gå mot venstre.

Trinn 4: Ta motoren for en prøvekjøring

Tar motoren for en prøvekjøring
Tar motoren for en prøvekjøring

Hvis du ikke allerede har verktøy for programmering av mikroprosessorer, kan du gjøre det verre enn Ghetto Development Kit eller noen av de forskjellige PIC -programmørene. Koble ledningene direkte til mikroprosessen og brenn den med følgende kode:

/* Leker med å få de små steppermotorene drevet. */

/ * Inkluder forsinkelsesfunksjon */ #define F_CPU 1000000UL #include/ * Pin defs for ATTiny2313 *// * Med urviseren */ #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define GUL _BV (PB3) #define DELAY 200 / * millisekunder mellom trinn * / int main (void) {DDRB = 0xff; / * Aktiver utgang på alle B -pinnene */ PORTB = 0x00; / * Sett dem alle til 0v */ while (1) {/ * hovedsløyfe her */ PORTB = BLÅ; _forsinkelse_ms (DELAY); PORTB = SVART; _forsinkelse_ms (DELAY); PORTB = RØD; _forsinkelse_ms (DELAY); PORTB = GUL; _forsinkelse_ms (DELAY); }} Hvor enkel er den koden? Virkelig enkelt. Alt det gjør er å lage noen fine definisjoner, så jeg kunne referere til ledningene etter farge i stedet for pin-navnene deres, og deretter slår den dem på i rekkefølge med en justerbar forsinkelse i mellom. Til å begynne med valgte jeg et halvt sekund forsinkelse mellom trinnene. Se den korte videoen for resultatene. Hvis du virkelig er i spillet ditt, kan du telle antall trinn per syklus for å finne ut motorens en-trinns vinkeloppløsning. (Oh yeah. PS. Drives uten last på 3,6v enkelt. Se batteri i video.)

Trinn 5: Swing It Back and Forth

Så du kjører den med klokken. Noe mer interessant? Litt kode-opprydding, så kan vi kjøre den frem og tilbake. Jeg satte sekvensen med klokken i en matrise slik at du kan gå gjennom fasene med en enkel loop. Nå kan du kjøre løkken opp eller ned for å gå med eller mot klokken.

int main (void) {const uint8_t delay = 50; const uint8_t med urviseren = {BLÅ, SVART, RØD, GUL}; uint8_t i; DDRB = 0xff; / * Aktiver utgang på alle B -pinnene */ PORTB = 0x00; / * Sett dem alle til 0v */ mens (1) {/ * hovedløkke her */ for (i = 0; i <= 3; i ++) {/ * gå gjennom fargene med klokken */ PORTB = med klokken ; _forsinkelse_ms (forsinkelse); } for (i = 3; i> = 0; i-) { / * gå gjennom fargene ccw * / PORTB = med klokken ; _forsinkelse_ms (forsinkelse); }}} Se den raske videoen for back-and-forthing.

Trinn 6: Jeg går aldri et halvt trinn, fordi jeg ikke er en halvsteg …

Søk lyrikk til side, halvtrapping av motoren er der den er. Du får mer toppstrøm, mer øyeblikkelig dreiemoment og dobbelt så stor vinkeloppløsning. Halvtrinn i et nøtteskall: I stedet for blå, svart, rød, gul, kjører du motoren med blå, blå+svart, svart, svart+rød, rød, rød+gul, gul, gul+blå. Resultatet er at du i halvparten av tiden bruker begge magnetene samtidig. Og i løpet av tidene som begge settene er koblet inn, peker motoren halvveis mellom de to, og krymper vinkelen mellom "trinn" og får motoren til å rotere jevnere. Kan du se det fra videoen? Jeg er ikke sikker … Nå ser delen av koden som gjør halvtrinnet slik ut:

void halfStepping (uint16_t forsinkelse, uint8_t retning ) {uint8_t i; for (i = 0; i <= 3; i ++) {PORTB = retning ; / * single-coil part */ _delay_ms (forsinkelse); PORTB | = retning [i+1]; / * legg til i halv trinn */ _delay_ms (forsinkelse); }} Den første PORTB -kommandoen setter en enkelt pol til positiv og resten til negativ. Så venter det. Deretter setter den andre PORTB -kommandoen en andre pol (på den andre viklingen) til positiv, og aktiverer begge viklingene for 1,4x dreiemomentet (og 2x strømmen). En fullstendig programliste er vedlagt nedenfor. To matriser er nå definert (med klokken, mot klokken) og begge har 5 elementer hver for å tillate i+1 -oppføringen i halfStepping -funksjonen.

Trinn 7: Legg til en motordriver

Legg til en motordriver
Legg til en motordriver
Legg til en motordriver
Legg til en motordriver
Legg til en motordriver
Legg til en motordriver

Så langt så bra.

Eneste problem er at motoren ikke ser ut til å ha så mye dreiemoment, noe som kan skyldes at mikroprosessoren bare slipper ut ~ 50mA per pinne. Det åpenbare neste trinnet ville være å koble den til en bilfører for å forsyne den med mer juice. Men da tenker jeg litt: Jeg kjører den bare med 5v, og spolevindingsmotstanden er ~ 125 ohm. Noe som betyr at motoren bare tegner 40mA per pinne, og den bør drives fint av (biffete) AVR -brikken. Så for å få mer spenning som driver motoren, koblet jeg den til en SN754410 H-brobrikke. Kretsen er ganske enkel. Hver pinne fra AVR går til en inngang, og de tilsvarende utgangspinnene går til motoren. Brikken trenger 5v for logikkdelen, og kan ta mye mer spenning i motorseksjonen. Å kjøre den på 11,25v (tre 3,6v batterier) hjalp litt. Merkbart mer dreiemoment for fingeren min, men det er fortsatt ikke et kraftverk. Ikke dårlig for en motor som er mindre enn en nikkel, skjønt. Og nå er kretsen blitt en bipolar steppermotordriver for generelle formål. Lagt til 29. november: Kjørte motoren i går kveld på 12v en stund, og det begynte å bli varmt. Jeg er ikke sikker på om det var et resonansfrekvensproblem eller om det bare var for mye strøm for viklingene. Uansett, vær litt forsiktig hvis du kjører denne lille motoren med større spenninger.

Trinn 8: slutten

Så hva lærte jeg? Å kjøre en steppermotor med en AVR (og en H-bro-chip) er ganske enkelt, selv i den "fancy" halv-trinnsmodusen.

Ikke sikker på hva jeg skal gjøre med de små stepper motorene ennå, skjønt. Noen forslag?

Anbefalt: