Indholdsfortegnelse:

Kør en trinmotor med en AVR -mikroprocessor: 8 trin
Kør en trinmotor med en AVR -mikroprocessor: 8 trin

Video: Kør en trinmotor med en AVR -mikroprocessor: 8 trin

Video: Kør en trinmotor med en AVR -mikroprocessor: 8 trin
Video: Автомобильный генератор для генератора с самовозбуждением с использованием ДИОДА 2024, November
Anonim
Kør en trinmotor med en AVR -mikroprocessor
Kør en trinmotor med en AVR -mikroprocessor

Har du nogle rensede trinmotorer fra printere/diskdrev/etc liggende?

Nogle sonderende med et ohmeter, efterfulgt af en enkel driverkode på din mikroprocessor, og du træder med stil.

Trin 1: Lær Steppers at kende

Lær Steppers at kende
Lær Steppers at kende
Lær Steppers at kende
Lær Steppers at kende

Grundlæggende bliver du nødt til at finde ud af, hvor alle de små ledninger går.

Første trin er at finde ud af, om det er en unipolar eller bipolar motor. Tag et kig på Jones on Steppers for en dybere baggrund, derefter på Ian Harries 'websted for en enkel metode til at finde ud af en ukendt motor. Læs lidt op, og slut mig derefter til en gennemgang af denne motor, jeg fik for billigt. (De er til salg for $ 0,99 lige nu. De er små, relativt lette, men har ikke meget drejningsmoment. Ved ikke, hvad det vil være godt til endnu.)

Trin 2: Find fælles grund

Find fælles grund
Find fælles grund
Find fælles grund
Find fælles grund

Så du har fem (eller fire eller seks) ledninger. Din motor kommer til at have to halvdele, og du kan sikkert endda se det bare ved at se hvilken side hver ledning tilhører.

Hvis du kun kigger på fire ledninger, har du held og lykke - det er en bipolar motor. Alt du skal gøre er at finde ud af, hvilke to ledninger der går sammen. Hvis du har en unipolar motor eller mere end 4 ledninger, bliver du nødt til at bryde dit ohmeter. Det du leder efter er den fælles (jord) ledning for hver halvdel. Du kan se, hvilken der er malet i en bipolar motor, fordi den har halv modstand mod hver af polerne, end polerne gør på tværs af sig selv. På billedet ses mine noter fra at tilslutte ledninger til ledninger og notere modstanden (eller hvis de overhovedet er tilsluttet). Du kan se, at Hvid er grunden til bundtrioen b/c, den har halvdelen af modstanden mod rød eller blå, som de har til hinanden. (Denne motor er mærkelig og har ikke en centerhane på den øverste magnetspole. Det er som om den er halvbipolær, halvunipolær. Måske kan du bruge dette til at mærke rotation i den rød-hvid-blå spole, når den sort-gule spolen køres.)

Trin 3: Find ud af trinordren

Find ud af trinordren
Find ud af trinordren

Jeg ville køre denne motor som en bipolar, så jeg ignorerer den hvide jordledning. Jeg har kun fire ledninger at bekymre mig om.

Du vil måske alligevel køre din unipolare motor som bipolar, fordi den bruger hele spolen i begge faser i stedet for at skifte mellem de to halvdele af hver spole. Mere spole = mere drejningsmoment. Kør strøm gennem et par (bemærk den polaritet, du valgte), og kør derefter strøm gennem det andet par på samme tid. Når du tilslutter det andet par, skal du se, hvilken vej motoren drejer. Skriv dette ned. Vend nu polariteten på det første par, du valgte. Tilslut derefter det andet par igen med deres polaritet også omvendt. Bemærk retningen. Ud fra dette skulle du være i stand til at finde ud af sekvensen for rotation af motoren i begge retninger. I mit eksempel endte begge med at dreje mod uret, så at træde igennem sekvensen på samme måde, som jeg valgte, vil trinere motoren CCW.

Trin 4: Tag motoren til et prøvekørsel

Tager motoren til et prøvekørsel
Tager motoren til et prøvekørsel

Hvis du ikke allerede har værktøj til programmering af mikroprocessorer, kan du gøre det værre end Ghetto Development Kit eller en af de forskellige PIC -programmører. Tilslut ledningerne direkte til din mikroproc og brænd den op med følgende kode:

/* Leger med at få kørt de små steppermotorer. */

/ * Inkluder forsinkelsesfunktion */ #define F_CPU 1000000UL #include/ * Pin defs for ATTiny2313 *// * Med uret */ #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define GUL _BV (PB3) #define DELAY 200 / * millisekunder mellem trin * / int main (void) {DDRB = 0xff; / * Aktiver output på alle B -benene */ PORTB = 0x00; / * Indstil dem alle til 0v */ while (1) {/ * hovedsløjfe her */ PORTB = BLÅ; _forsinkelse_ms (DELAY); PORTB = SORT; _forsinkelse_ms (DELAY); PORTB = RØD; _forsinkelse_ms (DELAY); PORTB = GUL; _forsinkelse_ms (DELAY); }} Hvor enkel er den kode? Virkelig enkelt. Alt det gør er at lave nogle fine definitioner, så jeg kunne henvise til ledningerne efter farve frem for deres pin-navne, og derefter skifter det dem i rækkefølge med en justerbar forsinkelse imellem. Til at begynde med valgte jeg en forsinkelse på et halvt sekund mellem trinene. Se den korte video for resultaterne. Hvis du virkelig er i gang med dit spil, skal du tælle antallet af trin pr. Cyklus for at finde ud af motorens enkelt-trinende vinkelopløsning. (Åh ja. PS. Kører uden belastning ved 3,6v let. Se batteri i video.)

Trin 5: Sving det tilbage og frem

Så du kører det med uret. Noget mere interessant? Lidt kode-oprydning, og vi kan køre det frem og tilbage. Jeg satte sekvensen med uret i et array, så du kan gå gennem faserne med en simpel loop. Nu kan du køre løkken op eller ned for at gå med eller mod uret.

int main (void) {const uint8_t delay = 50; const uint8_t med uret = {BLÅ, SORT, RØD, GUL}; uint8_t i; DDRB = 0xff; / * Aktiver output på alle B -benene */ PORTB = 0x00; / * Indstil dem alle til 0v */ mens (1) {/ * hovedsløjfe her */ for (i = 0; i <= 3; i ++) {/ * gå gennem farverne med uret */ PORTB = med uret ; _forsinkelse_ms (forsinkelse); } for (i = 3; i> = 0; i-) { / * gå gennem farverne ccw * / PORTB = med uret ; _forsinkelse_ms (forsinkelse); }}} Se den racy video for back-and-forthing.

Trin 6: Jeg går aldrig et halvt trin, fordi jeg ikke er en halvsteg …

Quest lyrik til side, halv-trin din motor er, hvor det er på. Du får mere spidsstrøm, mere øjeblikkeligt drejningsmoment og dobbelt så stor vinkelopløsning. Halvt trin i en nøddeskal: I stedet for blå, sort, rød, gul, kører du motoren med blå, blå+sort, sort, sort+rød, rød, rød+gul, gul, gul+blå. Resultatet er, at du i halvdelen af tiden aktiverer begge magneter på én gang. Og i løbet af de tidspunkter, hvor begge sæt er i indgreb, peger motoren halvvejs mellem de to, og krymper vinklen mellem "trin" og får motoren til at dreje mere jævnt. Kan du se det fra videoen? Jeg er ikke sikker … Nu ser den del af koden, der foretager halvtrinnet, sådan ud:

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]; / * tilføj i halv trin */ _delay_ms (forsinkelse); }} Den første PORTB -kommando sætter en enkelt pol til positiv og resten til negativ. Så venter det. Derefter indstiller den anden PORTB -kommando en anden pol (på den anden vikling) til positiv, der engagerer begge viklinger for 1,4x drejningsmomentet (og 2x strømmen). En komplet programoversigt er vedhæftet herunder. To arrays er nu defineret (med uret, mod uret) og begge har 5 elementer hver for at tillade i+1 -indtastning i halfStepping -funktionen.

Trin 7: Tilføj en motordriver

Tilføj en motordriver
Tilføj en motordriver
Tilføj en motordriver
Tilføj en motordriver
Tilføj en motordriver
Tilføj en motordriver

Så langt så godt.

Eneste problem er, at motoren ikke ser ud til at have så meget drejningsmoment, hvilket kan skyldes, at mikroprocessoren kun slukker ~ 50mA pr. Det indlysende næste trin ville være at tilslutte den til en motordriver for at forsyne den med mere juice. Men så tænker jeg lidt: Jeg kører den kun med 5v, og spolevindningsmodstanden er ~ 125 ohm. Hvilket betyder, at motoren kun tegner 40mA pr. Stift, og den skal drives fint af (beefy!) AVR -chippen. Så for at få mere spænding til at køre motoren, tilsluttede jeg den til en SN754410 H-brochip. Kredsløbet er ret simpelt. Hver pin fra AVR går til en input, og de tilsvarende output pins går til motoren. Chippen har brug for 5v til den logiske sektion og kan tage meget mere spænding i motorsektionen. Det hjalp lidt med at køre den på 11,25v (tre 3,6v batterier). Mærkbart mere drejningsmoment til min finger, men det er stadig ikke et kraftcenter. Ikke dårligt for en motor, der er mindre end et nikkel, selv om. Og nu er kredsløbet blevet en generel bipolar stepper motor driver. Tilføjet 29. nov: Kørte motoren i aftes ved 12v i et stykke tid, og det begyndte at blive varmt. Jeg er ikke sikker på, om det var et resonansfrekvensproblem, eller om det simpelthen var for meget strøm til viklingerne. Uanset hvad, vær lidt forsigtig, hvis du kører denne lille motor med større spændinger.

Trin 8: Slutningen

Så hvad lærte jeg? Det er ret let at køre en trinmotor med en AVR (og en H-bro-chip), selv i den "smarte" halvtrinnende tilstand.

Jeg er dog ikke sikker på, hvad jeg skal gøre med de små steppermotorer endnu. Nogen forslag?

Anbefalede: