Forum: Mikrocontroller und Digitale Elektronik Schrittmotor lin. anfahren lassen


von Mark (Gast)


Lesenswert?

Hallo Forum,

Ich habe einen ATMEGA8 und einen Treiber für Schrittmotoren. Das ganze 
läuft auch schon.. Nun habe ich das Problem wenn ich schneller fahren 
möchte muss ich eine Rampe in die Software einbauen. Zurzeit schalte ich 
den Step pin im Timer0, ich verändere den Reloadwert vom Timer und 
bekomme so eine Rampe - klar ist das sie nicht lin. ist. Aber wie 
bekomme ich ein lin. Rampe... Wie wird das sonst gemacht..

danke,
lg mark

von spess53 (Gast)


Lesenswert?

Hi

>Wie wird das sonst gemacht..

So wie es ATMEL vormacht:

http://www.atmel.com/Images/doc8017.pdf

http://www.atmel.com/Images/AVR446.zip

MfG Spess

von Mark (Gast)


Lesenswert?

Gibt es da nichts einfacheres , ich verwende als Treiber den 
A4982SLPTR-T

danke!!

von Karl H. (kbuchegg)


Lesenswert?

dann musst du dich fragen

> ich verändere den Reloadwert vom Timer und bekomme so eine Rampe
> - klar ist das sie nicht lin. ist

wieso das klar ist.
Wenn du den Reloadwert korrekt veränderst, kriegt man da auch eine 
lineare Rampe hin.

Anfahren ist doch einfach - Abbremsen ist die Kunst!

von Mark (Gast)


Lesenswert?

hallo,

ich muss eh auch bremsen...

Das ganze wird ein Gerät für eine Tombola, auf einer Scheibe sind 
38Felder wo man etwas gewinnen kann. Die Scheibe soll bei Tastenklick 
weg fahren und beim nächsten Tastenklick beginnen zu bremsen.. wo sie 
dann stehen bleibt .....

Ich habe jetzt versuche das ganze nich im timer zu machen sondern 
einfach den Takt in der Main zu generieren-->

while(1)
    {
    PORTA.0=1;
    wait_us(start_speed);
    PORTA.0=0;
    wait_us(start_speed);
    }

im timer verändere ich die start_speed.. --> start_speed++;

aber das ist auch alles andere als linear...

ich verstehe es nicht ..

danke.

von Karl H. (kbuchegg)


Lesenswert?

Mark schrieb:

> aber das ist auch alles andere als linear...
> ich verstehe es nicht ..

Natürlich nicht.
Denn
  f = 1/t
und das ist nun mal eine Hyperbel.


Aber: wozu braucht man bei so einem Ding eine lineare Rampe?

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Karl Heinz Buchegger schrieb:
> Mark schrieb:
>
>> aber das ist auch alles andere als linear...
>> ich verstehe es nicht ..
>
> Natürlich nicht.
> Denn
>   f = 1/t
> und das ist nun mal eine Hyperbel.

d.h. wenn du deine Zeiten linear variierst, bedeutet das nicht, dass 
sich dadurch die Frequenz linear verändert.

von mark (Gast)


Lesenswert?

verstehe.

wie kann ich es machen damit von min.drehzahl zur max.drehzahl 
anfahre/bremse eine gerade ist ?

danke...

von Karl H. (kbuchegg)


Lesenswert?

mark schrieb:
> verstehe.
>
> wie kann ich es machen damit von min.drehzahl zur max.drehzahl
> anfahre/bremse eine gerade ist ?

Indem du die Drehzahl linear variierst und dann zurückrechnest, welche 
Stepperzeit du für die nächste zu erzielende Drehzahl brauchst?
(Und dem Schrittmotor auch ein wenig Zeit geben, damit er auch auf diese 
Drehzahl beschleunigen kann. Du weißt schon ... träge Masse und so)


Dein µC hat alle Zeit der Welt. Wenn der beim Glücksrad für eine 
derartige Berechnung 1 Millisekunde oder 1.5 Millisekunden dafür 
braucht, dann merkt das kein Mensch.
Was anderes ist es, wenn eine 2 Tonnen CNC-Maschine den Fräskopf auf ein 
hunderstel Millimeter genau an einer bestimmten Position zum Stehen 
bringen muss. Aber den Fall hast du ja nicht.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Indem du die Drehzahl linear variierst und dann zurückrechnest, welche
> Stepperzeit du für die nächste zu erzielende Drehzahl brauchst?
> (Und dem Schrittmotor auch ein wenig Zeit geben, damit er auch auf diese
> Drehzahl beschleunigen kann. Du weißt schon ... träge Masse und so)

Und um ehrlich zu sein, würde ich mir die entsprechenden Werte in deinem 
Fall im voraus einfach ausrechnen und in Form einer Tabelle ablegen. 
Wenn da die Vorgabewerte für 3 oder 4 Sekunden beschleunigen/abbremsen 
mit einer Auflösung von 0.1 Sekunden drinnen enthalten sind, dann reicht 
das ja völlig aus.

2 Timer.
Der eine erzeugt die Schrittmotorpulse laut Vorgabe mittels CTC und ISR 
(oder Fast-PWM)
Der andere jubelt dem Schrittmotortimer alle 0.1 Sekunden den jeweils 
nächsten Wert aus der Tabelle unter, je nachdem ob zu beschleunigen oder 
zu bremsen ist.


Edit: Wobei
Den 2.ten Timer braucht es noch nicht mal. Die Hauptschleife hat eh 
nichts zu tun, und ob die bei einem Durchgang nach Prüfung der Taste 
noch den Schrittmotortimer beschickt und dann noch einen _delay_ms(100) 
macht um auf das Timing zu kommen, ist auch schon wurscht.

jetzt muss man halt mal klären, welche CTC Werte sich durch die 
vorgesehenen Drehzahlen ergeben und ob man mit einer einfachen Variation 
des ICR-Wertes durchkommt, oder ob man dem Timer auch noch den Prescaler 
im laufenden Betrieb umschalten muss. Ist zwar auch kein Beinbruch aber 
drauf achten hat noch niemandem in der Vorbereitungsphase eines 
Programms geschadet.

von Lottoking (Gast)


Lesenswert?

Mark schrieb:
> Das ganze wird ein Gerät für eine Tombola, auf einer Scheibe sind
> 38Felder wo man etwas gewinnen kann. Die Scheibe soll bei Tastenklick
> weg fahren und beim nächsten Tastenklick beginnen zu bremsen.. wo sie
> dann stehen bleibt .....

Da hat man dann nach drei Versuchen raus an welcher Stelle man zum 
zweiten Mal drücken muss, damit die Scheibe beim Hauptgewinn 
stehenbleibt.
Du wirst deine ganzen Preise innerhalb kürzester Zeit los sein!

von Spess53 (Gast)


Lesenswert?

Hi

>wie kann ich es machen damit von min.drehzahl zur max.drehzahl
>anfahre/bremse eine gerade ist ?

Hat doch Atmel schon alles vorgekaut:

Beitrag "Re: Schrittmotor lin. anfahren lassen"

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.