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
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. :-)
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
Andi schrieb: > Wie lässt sich die Geschwindigkeit des Motors regeln? indem Du dem Controller sagst, daß er langsamer tun soll.
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.
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.
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
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.
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 ....
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
Den Zähler langsamer laufen lassen. Das ist der Tackt b.z.w. die Schrittfrequenz. MfG JensM
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
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.
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
>P7DIR = 0x01; // Port 7.0 Taktausgang für Motorsteuerung
aha... also kommt der Takt doch von dir?
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.
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
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
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.
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!
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.
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.
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.
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
>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.
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
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!
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...
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.
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.
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.
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.
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.
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?
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!
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.
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
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
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.
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.
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
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.
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!
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
