Forum: Mikrocontroller und Digitale Elektronik Geschwindigkeitsregelung eines Schrittmotors


von Andi (Gast)


Lesenswert?

Hallo zusammen,

ich steuere einen Schrittmotor mit einem Mikrocontroller an.
Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor 
bewegt sich im linkslauf.
Mein Problem ist nun, das sich der Motor immer in maximaler 
Geschwindigkeit nach links bzw nach rechts bewegt.

Wie lässt sich die Geschwindigkeit des Motors regeln?

Falls eine Sollstellung erreicht wird, so soll sich der Motor kurz 
vorher etwas langsamer drehen und bei erreichen der gewünschten Stellung 
stehen bleiben. Diese Verlangsamung der Geschwindigkeit soll vermeiden, 
das der Motor über die gewünschte Stellung hinaus läuft.
Wie kann ich das am Besten realisieren?

Falls noch weitere bzw genauere Informationen notwendig sind, um dieses 
Problem zu klären, so stehe ich gerne zur Verfügung.
Leider habe ich von regelungstechnischen Problemen nicht genug Ahnung um 
dieses Problem selbst zu lösen.

Viele liebe Grüße Andi

von Floh (Gast)


Lesenswert?

Andi schrieb:
> Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
> PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor
> bewegt sich im linkslauf.

Schaltplan wäre hilfreich, weil das glaube ich dir nicht.
Würde nämlich sämtliche Vorteile des Schrittmotors übergehen. :-)

von spess53 (Gast)


Lesenswert?

Hi

>Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
>PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor
>bewegt sich im linkslauf.

Und wo kommt der Takt her? Welcher Treiber?

MfG Spess

von radiostar (Gast)


Lesenswert?

Andi schrieb:
> Wie lässt sich die Geschwindigkeit des Motors regeln?

indem Du dem Controller sagst, daß er langsamer tun soll.

von Udo S. (urschmitt)


Lesenswert?

Andi schrieb:
> Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
> PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor
> bewegt sich im linkslauf.

Ganz bestimmt nicht. Ein Schrittmotor wird über einzelne Schritte 
angesteuert, was im kontinuierlichen Betrieb dann einer 
Rechteckwechselspannung entspricht. Du hast hier also auf jeden Fall 
noch eine Schrittmotorsteuertung zwischen deinem µC und dem 
Schrittmotor. Wenn die nur einen einfachen logischen Eingang für Links 
oder rechts hat, dann kannst du mit dieser Steuerung keine 
Geschwindigkeit regeln.
Solange du aber nicht genauer sagst was du hast kann dir keiner helfen.

Andi schrieb:
> Leider habe ich von regelungstechnischen Problemen nicht genug Ahnung um
> dieses Problem selbst zu lösen.
Für dich lösen wird es hier nur mit viel Glück jemand. Hier gibt es 
hauptsächlich Hilfe zur Selbsthilfe.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Andi schrieb:
> und bei erreichen der gewünschten Stellung stehen bleiben

woher weist du, welche tatsächliche Stellung der Motor hat? Sowohl die 
angenommene aktuelle Stellung als auch die angenommene, angefahrene 
gewünschte Stellung könnten ja durchaus durch Schlupf etc. gar nicht die 
sein, welche sie sein sollen.

Beim Diskettenlaufwerk wurde das so gemacht, daß der Kopf zur 
Spurpositionierung solange Richtung "Spur 0" verfahren wurde, bis ein 
seperater Sensor (Lichtschranke) meldete "Ich bin jetzt auf Spur 0"

> Diese Verlangsamung der Geschwindigkeit soll vermeiden,
> das der Motor über die gewünschte Stellung hinaus läuft.

Schlupf kann nicht nur beim bremsen, sondern auch beim Beschleunigen 
auftreten. Ist beim Auto mit den durchdrehenden Reifen  beim Start auch 
nicht anders.

> Wie lässt sich die Geschwindigkeit des Motors regeln?

Wie beim Auto, wo man auf Gas oder Bremse tritt ;-)

Hier beim Schrittmotor durch abfahren einer "Rampe". D.h. du must z.B. 
100 Schritte verfahren, und teilst dann den Verfahrensweg auf in
10 Schritte beschleunigen
80 Schritte normalfahrt
10 Schritte abbremsen

die jeweiligen Phasen (beschleunigen, normalfahrt, abbremsen) 
unterscheiden sich "nur" dadurch, in welcher Geschwindigkeit die 
einzelnen Phasen deines Schrittmotors jeweils wechselweise angesteuert 
werden.

von Andi (Gast)


Lesenswert?

Hallo,

danke erstmal für die schnellen Antworten.

@radiostar: Genau das ist ja mein Problem, wie sage ich dem 
Mikrocontroller das er langsamer tun soll?? :-)

@spess53: Den Takt gibt ein Zähler vor. Die Treiberstufe ist ein 
Zukaufteil zum Motor und wurde speziell für diesen Schrittmotor 
entwickelt.

Gruß Andi

von Michael (Gast)


Lesenswert?

Andi schrieb:
> Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
> PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor
> bewegt sich im linkslauf.

Das heißt also, dass PIN erstmal nur die Richtung vorgibt (Direction). 
Und welcher Pin des µC gibt den Takt vor (Clock) und welcher Pin gibt 
den Motor frei bzw. sperrt ihn (Enable)? Das sind die drei wichtigsten 
Ansteuerwerte eines Schrittmotors für einen µC aber es gibt noch einige 
mehr (Strombegrenzung z.B.)

Es klingt für mich wie eine Aufgabenstellung und du hast noch keine Idee 
für die Lösung.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Andi schrieb:
> Dieser Schrittmotor wird vom Mikrocontroller über einen PIN angesteuert.
> PIN=1, dann dreht sich der Motor im rechtslauf, PIN=0 bedeutet der Motor
> bewegt sich im linkslauf.

und im Ruhezustand liegt immer was an? 0 oder 1? und dann dreht der 
Motor also im Ruhezustand immer linksrum oder rechtsrum???????


da fehlt doch noch was an Informationen oder Steuerleitungen ....

von spess53 (Gast)


Lesenswert?

Hi

>@spess53: Den Takt gibt ein Zähler vor. Die Treiberstufe ist ein
>Zukaufteil zum Motor und wurde speziell für diesen Schrittmotor
>entwickelt.

Viel schlauer bin ich jetzt auch nicht. Aber sinnvoll erscheint mir, den 
Zähler wegzulassen und den Takt durch den µC zu erzeugen.

MfG Spess

von JensM (Gast)


Lesenswert?

Den Zähler langsamer laufen lassen.
Das ist der Tackt b.z.w. die Schrittfrequenz.

MfG JensM

von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

@Michael: Es ist in der Tat eine Aufgabenstellung und diese soll ich 
wenn möglich bis morgen Mittag erfüllt haben. Leider habe ich wie gesagt 
nicht besonders viel Ahnung davon. :-(

@all: Ich drehe den Motor per Tasterbetätigung nach links oder nach 
rechts.
Es geht mir wirklich nur um die Geschwindigkeit des Motors.
Wie kann ich diese regeln?

Ich habe mal meinen bisher erstellten Code für den Controller angehängt!

Viele liebe Grüße Andi

von Michael (Gast)


Lesenswert?

Dann mache dich zunächst einmal mit der grundsätzlichen Funktionsweise 
eines Schrittmotors vertraut. Google hilft dir hierbei. Dir fehlen hier 
nämlich scheinbar zuviele Grundsätze um sie hier zu erklären.

von chick (Gast)


Lesenswert?

Aber bitte kein *.docx, für Code?

von Andi (Gast)


Lesenswert?

Hallo nochmal,

sorry. Ist gerade etwas stressig bei mir, deshalb habe ich die falsche 
Datei hochgeladen!! :-)

1
P4DIR   =   0x0F;       // Ports 4.0 - 4.3 Steuerausgänge
2
// P4.0 = Freigabe; P4.1, P4.2 = Fahrprofilauswahl // //(00=Hand, 01=rechts, 10=links); P4.3 Start
3
  
4
P4SEL   =   0x00;    // normale I/O Funktion
5
  
6
P7DIR   =   0x01;     // Port 7.0 Taktausgang für Motorsteuerung
7
P7SEL   =   0x00;     // normale I/O Funktion
8
9
P1DIR   |=   0x01;       // P1.0 output Kontroll-LED  
10
P1DIR   &=   0x7F;    // P1.7 input S1
11
P1SEL   =   0x00;     // normale I/O Funktion
12
P1IES   =   0x80;    // Interrupt bei fallender Flanke
13
  
14
P1IFG  =  0x00;     // Interrupt-Flag für P1 löschen
15
P1IE   =  0x80;    // nur P1.7 ist Interrupteingang
16
  
17
P2DIR   &=   0xFB;     // P2.2 input S2
18
P2SEL   =   0x00;     // normale I/O Funktion
19
P2IES   =   0x04;    // Interrupt bei fallender Flanke
20
21
P2IFG  =  0x00;     // Interrupt-Flag für P1 löschen
22
P2IE   =  0x04;    // nur P1.7 ist Interrupteingang
23
  
24
P8DIR  =     0xFF;    // P8 als Ausgang für Hilfsflags 
25
P8OUT   =   0x00;    // 8.0 Hilfsflag für S2.2 Toggle
26
27
//Timer initialisieren
28
TA0CCR0  =   160;    // max. Count für Timer im upmode (6E 4,8 kHz)
29
        //z zt max 160 => 3,3 kHz ohne Rampe
30
        //TA0CCR0  =   0x0001;                  // max. Count für Timer im upmode 
31
  
32
TA0CTL   =   TASSEL_2 + TACLR + TAIE;      // ACLK, clear TAR, enable interrupt
33
  
34
  
35
 //__bis_SR_register(LPM0_bits + GIE);        // Enter LPM3, enable interrupts
36
  _enable_interrupts();
37
38
P4OUT   =  0x05;  // Freigabe, uC-Steuersatz, Rechtslauf
39
40
while(1)
41
{  
42
    //main wartet auf Interrupt
43
}
44
  
45
}
46
47
// S2.2 Interrupt-Routine
48
#pragma vector=PORT2_VECTOR
49
__interrupt void Port_2(void)
50
{
51
                  //  int i;
52
  
53
if(P2IFG & 0x04)   // Lese Interrupt-Flag für Byteport P1 aus
54
      // gab es an P1.7 (0x80) einen Interrupt?
55
  {
56
57
    
58
  P8OUT   ^=   0x01;      
59
  if(P8OUT==  0x01)
60
  {
61
  P4OUT  = 0x03;        //Rechtslauf
62
  TA0CTL   |= MC_1;      // starten Timer
63
  }      
64
  else
65
  {
66
  P4OUT  = 0x03;        // Stop
67
  TA0CTL   &=~ MC_1;      // Timer anhalten
68
  P1OUT   &=   0xFE;      // LED ausschalten
69
  P7OUT   = 0x00;
70
  }
71
}
72
  P2IFG = 0x00;
73
}
74
75
76
77
// S1.7 Interrupt-Routine
78
#pragma vector=PORT1_VECTOR
79
__interrupt void Port_1(void)
80
{ 
81
//  int i;
82
  
83
if(P1IFG & 0x80)         // Lese Interrupt-Flag für Byteport P1 aus
84
                  // gab es an P1.7 (0x80) einen Interrupt?
85
  {
86
    
87
    
88
    P8OUT   ^=   0x01;      
89
    if(P8OUT==  0x01)
90
    {
91
    P4OUT  =  0x0D;      // Linkslauf
92
    TA0CTL   |=   MC_1;      // starten Timer
93
    }      
94
    else
95
    {
96
    P4OUT  =  0x05;      // Stop
97
    TA0CTL   &=~ MC_1;      // Timer anhalten
98
    P1OUT   =   0xFE;      // LED ausschalten
99
    }
100
  }
101
  P1IFG = 0x00;
102
}
103
104
// Timer0_A5 Interrupt Vector (TAIV) handler
105
#pragma vector=TIMER0_A1_VECTOR
106
__interrupt void TIMER0_A1_ISR(void)
107
{
108
  switch(__even_in_range(TA0IV,14))
109
  {
110
    case  0: break;                         // No interrupt
111
    case  2: break;                         // CCR1 not used
112
    case  4: break;                         // CCR2 not used
113
    case  6: break;                         // reserved
114
    case  8: break;                         // reserved
115
    case 10: break;                         // reserved
116
    case 12: break;                         // reserved
117
    case 14: P7OUT ^= 0x01;                 // overflow
118
           P1OUT ^= 0x01;      // Takt für Motorsteuerung, Anzeige LED         
119
             break;
120
    default: break; 
121
  }
122
}

Viele Grüße Andi

von Taktfinder (Gast)


Lesenswert?

>P7DIR   =   0x01;     // Port 7.0 Taktausgang für Motorsteuerung


aha... also kommt der Takt doch von dir?

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> Es geht mir wirklich nur um die Geschwindigkeit des Motors.
> Wie kann ich diese regeln?


> Den Takt gibt ein Zähler vor. Die Treiberstufe ist ein
> Zukaufteil zum Motor und wurde speziell für diesen Schrittmotor
> entwickelt.

Zeig doch mal.
Die Geschwindigkeitsregelung macht dieses Zukaufteil. Bei dem musst du 
nachsehen, wie das geht ....
.... wenn das was du sagst, tatsächlich stimmt.
Allerdings ist das dann eine Fehlentwicklung, da man dadurch den 
Schrittmotor zu einem normalen Motor degradiert hat und somit alle 
Vorteile eines Schrittmotors verliert. Daher glaube ich eher, dass die 
Leute, die das entwickelt haben, mehr Ahnung haben als du und du daher 
da irgendetwas falsch verstanden hast. Also zeig mal alles was du von 
diesem Zukaufteil weißt bzw. was du an Unterlagen hast.

von Harald W. (wilhelms)


Lesenswert?

Andi schrieb:
> Hallo,
>
> @Michael: Es ist in der Tat eine Aufgabenstellung und diese soll ich
> wenn möglich bis morgen Mittag erfüllt haben. Leider habe ich wie gesagt
> nicht besonders viel Ahnung davon. :-(

Dann wirst Du wohl einen Nürnberger Trichter brauchen, um Dir
das nötige Wissen, das andere in Jahren erworben haben, innerhalb
eines Tages anzueignen.

> Es geht mir wirklich nur um die Geschwindigkeit des Motors.
> Wie kann ich diese regeln?

Du meinst einstellen?
Üblicherweise gibt man die Geschwindigkeit durch einen Takt,
den man im Steuer-Prozessor erzeugt, vor. Wenn Du einen
externen Taktgeber hast, wird der wophl auch irgendwie,
z.B. durch eine Steuerspannung einstellbar sein.
Gruss
Harald

von Andi (Gast)


Lesenswert?

Hallo,

hier die Daten der Motorsteuerung:

Betriebsspannung: 12-24 V DC

Phasenstrom: max. 2,7 A

Schnittstelle: RS485 4-Draht oder CANopen

Betriebsmodus: RS485: Position, Drehzahl, Flagposition, Takt-Richtung,
Analog, Joystick

CANopen: Position, Drehzahl, Referenzfahrt, Interpolated-
Position (gemäß CAN-Standard DS402)

Schrittauflösung: 1/1, 1/2, 1/4, 1/5, 1/8, 1/10, 1/32, 1/64

Schrittfrequenz: 16 kHz im Vollschritt, im Mikroschritt entsprechende
Vielfache (z.B. bis zu 1MHz bei 1/64)

Eingänge: 6 Digitaleingänge (TTL), 1 Analogeingang +10/–10V

Ausgänge: 3 Open Collector, 24 V / 0,5 A max.

Stromabsenkung: einstellbar 0 - 150%

Schutzschaltung: Überspannung, Unterspannung und
Kühlkörpertemperatur > 80 °C

Temperaturbereich: 0 bis + 40 °C


Viele Grüße Andi

von Floh (Gast)


Lesenswert?

Andi schrieb:
> //Timer initialisieren
> TA0CCR0  =   160;    // max. Count für Timer im upmode (6E 4,8 kHz)
>         //z zt max 160 => 3,3 kHz ohne Rampe
>         //TA0CCR0  =   0x0001;                  // max. Count für Timer im 
upmode
>
> TA0CTL   =   TASSEL_2 + TACLR + TAIE;      // ACLK, clear TAR, enable interrupt

Das da musst du entsprechend im Betrieb manipulieren. Mehr sag ich 
nicht.

von Syntax (Gast)


Lesenswert?

aus einem datenblatt kopieren kann jeder vollidiot.
die wichtigen daten rauslesen, kann nicht jeder vollidiot. beispiel 
siehe hier.

ist es so schwer, hier kurz mitzudenken?

GIB DEN SCHALTPLAN ODER BAUPLAN MIT NAMEN HER UND LAD DEINEN KOMPLETTEN 
CODE RAUF!

von Udo S. (urschmitt)


Lesenswert?

Andi schrieb:
> Eingänge: 6 Digitaleingänge (TTL

Genau da setzt dein µC wahrscheinlich an.
Du musst also:
- die verschaltung des µC mit dem Steuergerät verstehen
- die Verwendung der Pins verstehen
- das Programm verstehen

und dann einfach eine Rampe dazuprogrammieren.

Wenn du aber eine regelung brauchst, dann musst du den Ist-Wert des 
Motors erfassen.

von Taktfinder (Gast)


Lesenswert?

Ich wette drauf das das eine Steuerung von Nanotec ist.

http://de.nanotec.com/schrittmotorsteuerung_smci12.html

Und falls das der Fall sein sollte dann programmier dein Fahrprofil 
direkt mit der mitgelieferten Software in deiner Endstufe (die kann das 
nähmlich) und du gibst dann nur noch den Startbefehl.
Satzanwahl über binäre Eingänge der Endstufe.
Alles andere schaffst du bis morgen nicht.

von Clemens M. (panko)


Lesenswert?

Flo hats doch geschrieben: es sieht doch wirklich so aus, als ob der 
Timer ta0 irgendeinen relevanten Takt erzeugt.
Ob man den Timer jetzt zur Laufzeit beliebig schneller oder langsamer 
machen darf hängt sicher auch davon ab, ob noch Anderes darauf 
zurückgreift, sieht aber in dem Code nicht so aus.

Das pin setzen und Motor läuft los wird wohl nur ein enable sein 
unabhängig vom Takt?
Versuch doch mal den Timer nackt anders einzustellen.

P.S. Komisch ist nur die while(1) schleife. Das compiliert so? Will 
sagen du müsstest wenigstens die zweite geöffnete KLammer mitposten find 
ich.

von Andi (Gast)


Lesenswert?

Hallo,

@Clemens M:
Wie kann man denn während eines Durchlaufs einen Zähler schneller oder 
langsamer werden lassen?

@Taktfinder:
Es handelt sich tatsächlich um eine Steuerung von Nanotec und die 
passenede Software ist auch dabei.
Allerdings benötige ich für meinen Controller die Regelung der 
Geschwindigkeit! :-(

Viele Grüße Andi

von Taktfinder (Gast)


Lesenswert?

>Allerdings benötige ich für meinen Controller die Regelung der
>Geschwindigkeit! :-(

In deinem ersten Post spricht du von Position anfahren.
Das kann deine Nanotec Endstufe ganz alleine, AUCH das mit dem 
beschleunigen. Soweit ich weis zwar nur konstante Beschleunigung, aber 
das wird für dich reichen.

Lies doch mal im Handbuch nach welche Betriebsarten unterstützut werden.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Andi schrieb:
> die Regelung der Geschwindigkeit!


"Regelung" ist etwas anderes wie "Steuerung".

Wenn du regeln möchtest, brauchst du eine Rückmeldung über die 
tatsächliche Geschwindigkeit (Ist-Geschwindigkeit). Damit passt du dann 
eine Stellgröße entsprechend an (mehr Strom, mehr Takt, mehr sonstewas.

Was du meinst ist vermutlich die "Steuerung" der Sollgeschwindigkeit, 
ohne Rückmeldung der tatsächlichen Größe.

[STeuerung=] Wie bei einem Wasserhahn, den du halt zu 1/4 oder 1/2 
aufdrehst. Ob da viel oder wenig Wasser rauskommst weißt du nicht, 
solange du nicht die Wassermenge (Durchfluss) nachmisst

von Elko4 (Gast)


Lesenswert?

Andi schrieb:
> @Clemens M:
> Wie kann man denn während eines Durchlaufs einen Zähler schneller oder
> langsamer werden lassen?

Du könntest z.B. bei jedem Timer-Interrupt den Inhalt des Registers 
"TA0CCR0" verändern. --> größerer Wert = langsamerer Takt und umgekehrt!

Aber um dir richtig helfen zu können wäre es sinvoll, wenn du endlich 
mal deine gesamten Unterlaen inkl. Schaltplan posten würdest!

von Udo S. (urschmitt)


Lesenswert?

Taktfinder hat es doch geschrieben.
Die Steuerung kann das komplett alleine. Du musst sie nur noch richtig 
programmieren und mit deinem µC die digitalen Eingänge entsprechend 
ansteuern.
Irgendwas stimmt doch da nicht.
Du hast weder grundlegende Ahnung über Schrittmotoren, noch sind dir 
Dinge wie "Rampenansteuerung" ein Begriff, du kennst auch nicht den 
Unterschied zwischen Steuern und Regeln.
Trotzdem sollst du bis morgen die Ansteuerung dieses Schrittmotors 
machen. Entweder du hast dich hier massiv übernommen, oder dein Chef hat 
keine Ahnung was du kannst.
So wird das doch nix...

von Udo S. (urschmitt)


Lesenswert?

Elko4 schrieb:
> Aber um dir richtig helfen zu können wäre es sinvoll, wenn du endlich
> mal deine gesamten Unterlaen inkl. Schaltplan posten würdest!

Das nützt nix, dazu müsstest du die kompletten Unterlagen des Nanotec 
Treibers sowie die gewählte Betriebsart wissen.

von Karl H. (kbuchegg)


Lesenswert?

Udo Schmitt schrieb:
> Elko4 schrieb:
>> Aber um dir richtig helfen zu können wäre es sinvoll, wenn du endlich
>> mal deine gesamten Unterlaen inkl. Schaltplan posten würdest!
>
> Das nützt nix, dazu müsstest du die kompletten Unterlagen des Nanotec
> Treibers sowie die gewählte Betriebsart wissen.

Wenn man wenigstens mal wüsste welcher das ist, dann würde sich unter 
Umständen jemand hier erbarmen und sich die Doku zumindest soweit 
reinziehen um erst mal zu wissen, was der Treiber von alleine kann und 
was er nicht kann und wie man das ganze grundsätzlich angehen muss. Denn 
wenn es stimmt, dass der Treiber die Rampe ganz von alleine fahren kann, 
bzw eine bestimmte Schrittanzahl ganz von alleine inkl Rampe abfahren 
kann, dann muss man das alles ganz anders angehen, als Andi das macht.

Andi scheint allerdings die Uunterlagen nicht studiert zu haben. Ich 
denke auch, dass er am Holzweg ist. Aber um das definitiv beurteilen zu 
können, müsste man halt erst mal wissen, was das für eine Treiberplatine 
ist und was die alles kann.

von Taktfinder (Gast)


Angehängte Dateien:

Lesenswert?

ich bin mir sehr sicher dass ich oben genau seine Steuerung erwischt 
habe.

Wäre Andi in der Lage in die Doku zu schauen würde er folgendes Bild 
finden.

von Clemens M. (panko)


Lesenswert?

Ist der source code denn jetzt aus der Firmware von diesem 
Controllerboard? Denn das wird über ein Windows tool konfiguriert oder 
wie ist der Screenshot zu verstehen.
Ich bin jetzt echt verwirrt.

von Udo S. (urschmitt)


Lesenswert?

Clemens M. schrieb:
> Ist der source code denn jetzt aus der Firmware von diesem
> Controllerboard? Denn das wird über ein Windows tool konfiguriert oder
> wie ist der Screenshot zu verstehen.
> Ich bin jetzt echt verwirrt.

Dann les den Thread. Der Source Code ist von dem TO
Der Schrittmotorcontroller ist ein richtig komfortables Teil, das -wenn 
ich richtig gelesen habe- sogar in einer Java ähnlichen Sprache 
richtiggehend programmiert werden kann.
Das Bild zeigt daß so Dinge wie Rampen zu den basics des Controllers 
gehören.
Man muss sich halt mit dem Teil auseinandersetzen.

von Clemens M. (panko)


Lesenswert?

Ich habe das Handbuch mal -überflogen- obwohl es mich so sehr nun dann 
doch nciht interessiert.
Anscheinend wird der Treiber dann doch im sog.  Takt/Richtungsmodus 
betrieben und somit müsste der TE doch selber für beschleunigen und 
bremsen sorgen. (warum sollte seine Software sonst das Richtungssignal 
und Takte erzeugen)
Wenn das so ist - würde ich dazu raten einfach mal mit dem Timer rum zu 
spielen und eben eine Rampe zu erzeugen.
Hast du die Software vorgesetzt bekommen? Kannst du den Ersteller dieser 
Fragen zu seiner Planung stellen?

von Syntax (Gast)


Lesenswert?

Andi schrieb:
> Es handelt sich tatsächlich um eine Steuerung von Nanotec und die
> passenede Software ist auch dabei.

bist du analphabet?

WIE HEISST DAS TEIL???

Syntax schrieb:
> aus einem datenblatt kopieren kann jeder vollidiot.
> die wichtigen daten rauslesen, kann nicht jeder vollidiot. beispiel
> siehe hier.
>
> ist es so schwer, hier kurz mitzudenken?
>
> GIB DEN SCHALTPLAN ODER BAUPLAN MIT NAMEN HER UND LAD DEINEN KOMPLETTEN
> CODE RAUF!

von Marwin (Gast)


Lesenswert?

Hier leben mal wieder einige ihren Helferkomplex aus. Und dann im 
naechsten Thread darueber meckern, dass in den Firmen ueberall nur noch 
Trottel sitzen, die nichts koennen und sich nur durchgeschummelt haben.

von Chris (Gast)


Lesenswert?

Hallo nochmal,

Bei meinem Schrittmotor handelt es sich ebenfalls um einen Motor der 
Firma Nanotec. (ST4209L1704)
Die Treiberstufe ist wie bereíts erwähnt auch von Nanotec. (SMCI12)

Es handelt sich bei meinem Problem wie bereits mehrmals und auch in der 
Überschrift erwähnt um eine Regelung, nicht um eine Steuerung.

@Taktfinder: Die Software habe ich bereits verwendet und alle 
Einstellungen funktionieren auch soweit, auch mit der Rampensteuerung 
klappt alles soweit. Aber ich darf wie bereits erwähnt nicht diese 
Sorftware verwenden, sondern muss für meinen Mikrocontroller einen Code 
erstellen.


Und da sind meine Schwierigkeiten, bei der Codeerstellung für die 
Regelung der Geschwindigkeit.
Nicht bei der Einstellung über die Firmsoftware oder ob ich weiß was ne 
Steuerung ist!! :-)
Es geht mir um die Erstellung eines Codes, mit dem ich diese 
Geschwindigkeit regeln kann!!

Das mit der Sollstellung habe ich nicht ausführlich erklärt:
Der Motor soll nach sechs Umdrehungen stehen bleiben, zuvor aber etwas 
langsamer werden.

Genau da liegt mein Problem. Wie kann ich das in einem Code realisieren, 
das mein Motor langsamer werden soll!

Viele Grüße Andi

von Andi (Gast)


Lesenswert?

Hallo nochmal,

Bei meinem Schrittmotor handelt es sich ebenfalls um einen Motor der
Firma Nanotec. (ST4209L1704)
Die Treiberstufe ist wie bereíts erwähnt auch von Nanotec. (SMCI12)

Es handelt sich bei meinem Problem wie bereits mehrmals und auch in der
Überschrift erwähnt um eine Regelung, nicht um eine Steuerung.

@Taktfinder: Die Software habe ich bereits verwendet und alle
Einstellungen funktionieren auch soweit, auch mit der Rampensteuerung
klappt alles soweit. Aber ich darf wie bereits erwähnt nicht diese
Sorftware verwenden, sondern muss für meinen Mikrocontroller einen Code
erstellen.


Und da sind meine Schwierigkeiten, bei der Codeerstellung für die
Regelung der Geschwindigkeit.
Nicht bei der Einstellung über die Firmsoftware oder ob ich weiß was ne
Steuerung ist!! :-)
Es geht mir um die Erstellung eines Codes, mit dem ich diese
Geschwindigkeit regeln kann!!

Das mit der Sollstellung habe ich nicht ausführlich erklärt:
Der Motor soll nach sechs Umdrehungen stehen bleiben, zuvor aber etwas
langsamer werden.

Genau da liegt mein Problem. Wie kann ich das in einem Code realisieren,
das mein Motor langsamer werden soll!

Viele Grüße Andi

von Karl H. (kbuchegg)


Lesenswert?

Andi schrieb:

> @Taktfinder: Die Software habe ich bereits verwendet und alle
> Einstellungen funktionieren auch soweit, auch mit der Rampensteuerung
> klappt alles soweit. Aber ich darf wie bereits erwähnt nicht diese
> Sorftware verwenden,

Ach?
Wo genau hast du das erwähnt?

> Genau da liegt mein Problem. Wie kann ich das in einem Code realisieren,
> das mein Motor langsamer werden soll!

In dem du die Takte, die den Schrittmotor den Schritt machen lassen, 
eben langsamer oder schneller generierst.

Vielleicht irre ich mich ja, aber ich denke du solltest dir erst mal 
über ein paar Zusammenhänge klar werden, ehe du auf Timer und Interrupts 
setzt.

von Marwin (Gast)


Lesenswert?

Andi schrieb:
> Genau da liegt mein Problem.

Nein, dein Problem liegt vor Allem darin, dass du im Unterricht nicht 
aufgepasst hast und nun dumm aus der Waesche guckst. In zweiter Linie 
darin, dass du nicht richtig liest, was man dir schreibt, oder das 
Gelesene nicht kapierst. Und zu guter Letzt dann noch darin, dass du 
offensichtlich nie gelernt hast, dir eine Loesung fuer deine Probleme zu 
erarbeiten.

Der einzige, der dir helfen kann, bist du selbst. Und vieleicht ist dein 
jetziges Versagen der Startschuss dazu - wenn dir nicht wieder einer der 
ueblichen Verdaechtigen aus der Patsche hilft.

von Harald W. (wilhelms)


Lesenswert?

Chris schrieb:

> Es handelt sich bei meinem Problem wie bereits mehrmals und auch in der
> Überschrift erwähnt um eine Regelung, nicht um eine Steuerung.

Aha, und wo berkommst Du das geschwindigkeitsabhängige Signal her?
Hast Du einen Tachogenerator oder einen optischen Weggeber auf der
Achse Deines Scrittmotors befestigt?
>
> @Taktfinder: Die Software habe ich bereits verwendet und alle
> Einstellungen funktionieren auch soweit, auch mit der Rampensteuerung
> klappt alles soweit.

Interessant, das man die wichtigsten Details erst so spät erfährt.
Ist das hier eine Art Ratespiel ala Jauch?
> Und da sind meine Schwierigkeiten, bei der Codeerstellung für die
> Regelung der Geschwindigkeit.

Regeln kannst Du nur, wenn Du auch einen entsprechenden Geber hast.

> Es geht mir um die Erstellung eines Codes, mit dem ich diese
> Geschwindigkeit regeln kann!!

Da musst Du einen Soll/Istwertvergleich machen.

> Das mit der Sollstellung habe ich nicht ausführlich erklärt:

Nicht nur das...

> Der Motor soll nach sechs Umdrehungen stehen bleiben, zuvor aber etwas
> langsamer werden.

Bei sechs Umdrehungen lohnt es sich ja gar nicht erst, überhaupt
eine hohe Geschwindigkei zu erzeugen.

> Genau da liegt mein Problem. Wie kann ich das in einem Code realisieren,
> das mein Motor langsamer werden soll!

Das hängt u.a. davon ab, ob Du den Taktgeber der Nanotec Steuerung
benutzen willst, oder ob Du den Takt selbst erzeugen willst. Falls
lezteres frage ich mich allerdings, warum Du die Steuerung über-
haupt dazwischengeschaltet hast.
Gruss
Harald

von Clemens M. (panko)


Lesenswert?

Manchmal hat man ja auch ein Brett vorm Kopf oder lechzt sonstwie nach 
Hilfe.
Also entscheidend ist: ist das dein Code? Dann hast du ein Brett vorm 
Kopf, machst früh Schluss, gehst in die Kneipe und morgen ist alles gut.
Wenn du den Code vorgesetzt bekommen hast wird es schwerer. Kannst du 
jemand um Rat fragen tus, denn das ist dann die Hilfe zur Selbsthilfe 
die ja mehr oder weniger charmant im Raum steht ;-)

Wann läuft der Motor schneller? Wenn er schnellere Takte bekommt. Die 
werden vom Timer erzeugt. Wenn der von langsam immer schneller abläuft, 
gibt das doch bei linearem Zuwachs eine Rampe. Ebenso rückwärts. Timer 
weniger oft überlaufen lassen.
Du siehst jetzt zu, daß du bis zu einem Endwert die Takte schneller 
generierst. Dann kommt der Rest von allein.
Wo du den Timer verstellst musst du dir überlegen.

Aber, und das wurde auch schon erwähnt, es muss halt irgendeine Sensorik 
geben vond er du erfährst, WO dein Motor überhaupt ist. Woher soll er 
sonst wissen wann er bremst.

Ich hoffe geholfen zu haben. Und auch daß das nichts mit einem Komplex 
zu tun hat.


Ach ja: eine Umdrehung eines Schrittmotors hat ja ohne Schlupf eine 
bestimmte Anzahl von Schritten.

von Syntax (Gast)


Lesenswert?

ANDI ODER CHRIS ODER WIE AUCH IMMER DU HEIßEN MAGST:
KRIEG DEINEN ARSCH IN DIE LUFT, FANG ZU DENKEN AN UND
                      !!!POSTE DIE INFOS!!!

so hirnverbrannt kann doch kein mensch sein!
DU willst hier hilfe, also stell wenigstens infos bereit.

herrgott...

Syntax schrieb:
>> GIB DEN SCHALTPLAN ODER BAUPLAN MIT NAMEN HER UND LAD DEINEN KOMPLETTEN
>> CODE RAUF!




Harald Wilhelms schrieb:
> Aha, und wo berkommst Du das geschwindigkeitsabhängige Signal her?
> Hast Du einen Tachogenerator oder einen optischen Weggeber auf der
> Achse Deines Scrittmotors befestigt?

> Interessant, das man die wichtigsten Details erst so spät erfährt.
> Ist das hier eine Art Ratespiel ala Jauch?

Karl Heinz Buchegger schrieb:
> Ach?
> Wo genau hast du das erwähnt?

Clemens M. schrieb:
> Ist der source code denn jetzt aus der Firmware von diesem
> Controllerboard?

> Ich bin jetzt echt verwirrt.

Udo Schmitt schrieb:
> Das nützt nix, dazu müsstest du die kompletten Unterlagen des Nanotec
> Treibers sowie die gewählte Betriebsart wissen.

Elko4 schrieb:
> Aber um dir richtig helfen zu können wäre es sinvoll, wenn du endlich
> mal deine gesamten Unterlaen inkl. Schaltplan posten würdest!

von Udo S. (urschmitt)


Lesenswert?

@Andi.

1. Programmiere erst mal überhaupt eine Rampe.
Sprich du hast
Schrittfrequenz full speed
Schrittfrequenz lowest speed
Anzahl Schritte
Jetzt schreibst du dir eine Softwar die in dieser Anzahl Schritte die 
Schrittfrequenz von high speed zu lowest speed runterfährt.

Wenn das funktioniert baust du eine Einfachregelung:
Sobald istwert nur noch weniger oder gleich der gewählten Anzahl 
Schritte für die Rampe weg ist fängst du mit der Rampe an.

Als nächstes musst du das auch eine Rampe fürs Beschleunigen bauen, 
sowie beim Beschleunigen prüfen ob du nicht schon wieder bremsen musst 
(Restanzahl Schritte)

Wenn du das jetzt nicht hinkriegst dann solltest du die Aufgabe an 
jemand anderen übergeben.

von Clemens M. (panko)


Lesenswert?

Mein letzter Rat zur "Regelung" denn so langsam komme ich mir vor wie 
bei versteckter Kamera. Ist das üblich? Dann muss ich in viel mehr 
threads reinlesen.
Vielleicht ist ja tatsächlich da der brainbug und du siehst klarer.
Wenn du (woher auch immer) weißt, daß noch eine Umdrehung fällig ist und 
das für mich einfach mal als Wert 1000 Schritte sind, dann zähl doch 
einfach bei jedem Takten von da an deine verbleibenden Schritte runter.
Sind noch 800 übrig stellst du den Timer auf 80% max Frequenz ein, sind 
noch 200 übrig auf 20%.... dann bremst er linear ab. Außer linear in der 
Zeit..aber Prinzip ist ja klar
Eine Regelung ist das nicht wirklich, du darfst keine Schritte 
verlieren, aber laut deiner Anforderung könntest du so straightforward 
vorgehen.

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.