AVR446

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • habe jetzt mal andere Einstellungen (Prescaler, Steps) probiert, es ist so, wie Du geschrieben hast, immer beim letzten Increment (Verdoppelung) steigt er aus.
      Mit dieser Kombination erreiche ich die Wunschdrehzahl nicht.
      Da muss ich mir wohl etwas anderes überlegen, mal sehen, ob ich den Timer 1 freischaufeln kann, vielleicht läuft der Schrittmotor (ja, da ist auch einer dran) mit Timer 2, der muss nicht so schnell laufen (max. 72min-1)
      Gruß
      Hans

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Hans_L ()

    • Man könnte das auch mal mit dem timer1 und beide Stepper mit dem timer1 gesteuert probieren. Mit Servos geht das ja auch, also sollte das auch mit stepper gehen.
      Ich denke dabei an den ctc-Modus. Bei Servos brauche ich eine bestimmte Pulsbreite, beim stepper einen bestimmten Pulsabstand. Innerhalb des Pulsabstandes muss natürlich auch ein Puls, steigende Flanke, kleine Pause, fallende Flanke, eingebaut sein. Ich denk' mal bisschen drüber nach...

      Was braucht dein Treiber als Mindestpulslänge?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Grobplanung:
      der timer läuft einfach durch
      compare-interrupt schaltet pin für den Puls ein und setzt den nächsten comparewert um die gewünschte Pulsweite weiter.
      compare-interrupt schaltet pin ab und setzt den comparewert um den gewünschten Pulsabstand zu erreichen
      in diesem Aufruf könnte man die steppersteps mitzählen, oder eine Vorgabe runter zählen und bei Erreichen den compare disablen (stepper bleibt stehen).
      Auch könnte man in diesem Aufruf beschleunigen, Geschwindigkeit halten und abbremsen.
      Da es 2 compare für den timer gibt, kann man auch 2 stepper steuern.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • 16Mhz, keine Vorteilung
      aber nun ist mir noch etwas aufgefallen, habe bei Prescaler 32 mal Preload 254 eingestellt,
      Ergebnis: der Timer2 bremst den Atmega so gewaltig aus, dass eine PCint_isr nicht mehr zum Zuge kommt, d.h. die darin enthaltenen Anweisungen werden nicht mehr ausgeführt, kann das sein?
      Ich dachte immer, wenn sich etwas beisst, geht halt ein Teil verloren?
      Timer0 und Timer1 scheinen jeden falls problemlos zu arbeiten,
      hat mich jetzt doch etwas Zeit gekostet, diese Erkenntnis (ist es eine?)
      jedenfalls habe ich nichts anderes geändert als den Preload...
      Gruß
      Hans
    • Nach 32 Systemticks läuft dann der timer über und löst einen interrupt aus. Dabei werden ja 32 Register auf den hwstack geschafft, braucht schon allein 32 Takte (jetzt wäre schon wiederein interrupt fällig), dann die isr abgearbeitet und wieder die Register aus dem stack geholt und noch bisschen Firlefanz gemacht. Dann in das Programm zurück gesprungen, einen Befehl dort abgearbeitet, Zack, wieder der interrupt ausgelöst...
      Das ist zuviel interrupt. Die 1,5µs Puls schafft man nicht, muss man aber auch nicht.
      375 U/min, bei 1600 steps/U sind das 600000steps/min= 10000 steps/s. 100µs/step. Bei prescale von 64 hätte man dazu 24 timerticks, das heißt man könnte 12 ticks als Pulslänge nehmen und die restlichen 12 ticks als Ergänzung für die Pulsfrequenz. 12x64=768 Sytemticks, das könnte schon klappen. Entspannter wäre es, wenn du auf 800 step/U gehen könntest.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @Hans_L Welchen Controller verwendest du denn?
      Normalerweise hat der PCINT eine höhere Priorität als die Timer.
      Aber dein Timer macht wirklich alle 64 Takte einen Interrupt, sodass immer einer ansteht, weil das Speichern und Zurückholen der Register schon über 100 Takte benötigt.

      @tschoeatsch CTC Mode bedeutet ja, dass der Timer bei Erreichen des Comparewertes auf 0 gesetzt wird. Das macht der Timer normalerweise (immer?) nur für den A-Kanal. D.h. die beiden Kanäle laufen immer mit der gleichen Frequenz. Falls OCRnB<OCRnA ist, schaltet der entsprechende Ausgang auch, ansonsten überhaupt nicht. Wenn du unterschiedliche Frequenzen haben willst, geht das nur ganz begrenzt über einen Timer (wenn der Compare Wert immer größer oder immer kleiner wird).
    • Guenther schrieb:

      CTC Mode bedeutet ja, dass der Timer bei Erreichen des Comparewertes auf 0 gesetzt wird.
      wenn das auf 0 Stellen den ctc-Modus bedeutet, dann meine ich das nicht. Das kann man ja abschalten timer clear=0, dann sollte der timer doch einfach durchlaufen und ich kann durch Addition den coparewert immer weiter in die Zukunft versetzen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Zeitkritische Sachen ohne Registersicherung machen, die paar Register + SREG manuell mit PUSH/PULL rück-/sichern, dann schafft man unter 4-5 Mikrosekunden bei 16MHz, je nach Aufgabe. Alles andere in der Main erschlagen. Sonst ist Frust quasi vorprogrammiert ?(
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • also euer compare-dingsbummskirchens und ctc... kapier ich (noch) nicht, damit habe ich mich noch nicht befasst, aber ich habe jetzt mal auf 400 Steps umgestellt, da fehlen aktuell nur 2 Werte, 241 geht, 243 bräuchte ich (als Preload) und die anderen Interrupts werden nicht gebremst.
      mal schauen...
      Die Variante mit einem Ausgang beide Motoren laufen zu lassen, habe ich auch schon überlegt (und geprüft) allerdings bekomme ich damit leider das Drehzahlverhältnis nicht hin, entweder zu hoch oder zu niedrig.
      Gruß
      Hans
    • Hans_L schrieb:

      also euer compare-dingsbummskirchens und ctc... kapier ich (noch) nicht,
      Ist nicht schlimm. Übersetzt heißt compare vergleichen. Wenn der timer den Stand erreicht, der als compare-Wert angegeben wurde, dann wird ein interrupt ausgelöst. Während der timer weiterläuft kann man in der Interruptroutine unter anderem den compare-Wert auf einen Wert einstellen, den der timer erst in der Zukunft erreicht. Dann wird wieder ein interrupt ausgelöst, usw.

      Jetzt gib mal deine hardware/Kontroller bekannt und welche pins du wofür verwendest, dann kann man mal ein codeschnipselchen zusammenschreiben. Wäre dann auch interessant, wie die stepper arbeiten sollen. Gibst du die Anzahl der Stepps und die max Geschwindigkeit vor, sodass automatisch Beschleunigung, Lauf und Abbremsen als code herauskommen soll, oder sollen die stepper nur auf eine bestimmte Drehzahl gebracht werden, wo sie dann einfach eine zeitlang laufen sollen, ohne Mitzählen der Schritte. Mach's doch nicht so spannend.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • ich versuchs mal so kurz und prägnant als möglich.
      Ich habe eine Stepper welcher über eine angeflanschte Kugelgewindespindel (Steigung 1mm) den Drahtleger einer Spulenwickelmaschine bewegt.
      Die Wickelspindel wird ebenfalls von einem Stepper angetrieben, an dieser ist ist ein Drehgeber (ROD 426) welcher die Umdrehungen ermittelt, grundsätzlich gilt, je Umdrehung wird ein Drahtvorschub ausgelöst.
      Ziel wäre es, dass Vorschub und Wickelspindel "synchron" laufen.
      Dazu kommen noch ein paar Feinheiten, die Eingabe der Daten erfolgt über eine Fernbedienung (Philips RC5), und der Drahtvorschub wird abhängig von der Drahtstärke bei jeder Umdrehung etwas früher ausgelöst (legt mal Blechwinkel ineinnander, und man sieht, dass der Knick nach unten wandert, also immer früher erfolgt)
      Nun zur Hardware:
      DSC00421.JPG

      DSC00422.JPG
      DSC00423.JPG
      ist mittlerweile etwas weiter

      und das ist der "Entwicklungsplatz mit identischer Umgebung
      (will ja nicht permanent in den Keller rennen)
      Prozessor: Atmega 328P, 16MHz
      Stepper Vorschub 200Steps/U
      Stepper Wickelspindel 200Steps/U

      Driver Vorschub: üblich China-Ware einstellbar 200, 400, 800 usw, eingestellt auf 400
      an Timer 1, Prescale 64, Preload 65286, funktioniert einwandfrei

      Driver Spindel M860, auch mit den üblichen Einstellmöglichkeiten, daran arbeite ich gerade,

      So, das wars in Kurzform

      Falls die Frage kommt:
      Wie es begann:
      Ja, das ist ein reines Bastelprojekt, über das ich zu Bascom kam, weil die ursprünglich dafür gekaufte Hard- und Software mich nicht so ganz zufriedenstellte, der Verkäufer den Quellcode (auch Hobbybastler und reger Schreiber in anderen Foren) mir nicht geben wollte, und auch ansonsten wenig Lust hatte, auf meine Wünsche einzugehen.
      Also alles einfach eine Fingerübung mit Allem was man für ein solches Projekt braucht, Hardware, Software, Überlegungen und viel Geduld.
      (habe zwischen durch auch schon einen Trafo gewickelt!)

      Arbeitsplatz.jpg

      Ist jetzt wahrscheinlich nicht komplett, aber es gibt einen Überblick.
      Gruß
      Hans
    • Schöne Sachen hast du da.
      Der Wickelmotor ist der Schnellläufer, nehme ich an, mit seinen Umdrehungen wird der Drahtschieber gesteuert. Gibst du dann dem Wickler die Umdrehungen vor, oder soll der nur beschleunigen und wird dann bei Erreichen der gezählten Umdrehungen (durch den Drehgeber) einfach gestoppt?
      Hast du ein Datenblatt von deinen steppern, ist das Drehmoment bei der gewünschten Drehzahl noch ausreichend?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Noch bisschen über deine Maschine nachgedacht. Nachdem du ja praktisch ein elektrisches Getriebe brauchst, wo der Drahtverschub nur eine Ableitung (Untersetzung/Übersetzung) vom Aufwickler ist, muss man ja nur eine Steppersteuerung aufbauen. Der Drahtverschub bekommt alle x steps vom Wickler auch einen step. X ist von der Drahtstärke abhängig. Bei 1mm Draht, laufen Wickler und Verschubstepper mit gleicher Geschwindigkeit. Je nach Drahtdurchmesser wird dann am Richtungsumkehrpunkt des Verschiebers eine fixe steppzahl zugegeben/pausiert, damit die neue Lage Draht zwischen den Drähten der alten Lage zu liegen kommt, bei 1mm Draht wäre dann 1/2 U der Verschiebesteppers nötig, die schnell eingefügt/übersprungen werden muss.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • ich geb noch ein paar Erklärungen zum Aufbau:
      Der Vorschubmotor ist der Mitte hinten, angeflanscht ist ein Mini-Rod, welcher auf den Heidenhain-Zähler geht, damit kann ich den exakten Vorschub überprüfen (funktioniert auch sehr exakt, ich kann 1/1000mm Vorschub einstellen) Der zugehörige Treiber liegt davor.
      Der Motor ganz rechts mit dem ROD426 simuliert momentan die Spindel, läuft also "frei", die Signale des Drehgebers werden im Atmega ausgewertet und für die Windungszahlüberwachung und die Lage des Windungssprunges verwendet (funktioniert auch einwandfrei) Die Spindel wird aktuell über einen Step-Generator freilaufend mit Poti (hier nicht aufgebaut, ist aber an der Wickelmaschune so verbaut) gesteuert.
      Der Stepper, welcher danebenliegt, simuliert den Spindelantrieb, welcher eben zukünftig auch aus dem Atmega angesteuert werden soll.
      Den Rest später, (habe auch noch etwas anderes zu tun, meine Frau macht Stress, der WAF ist momentan im Sinken)
      Nachtrag: der Spindelmotor ist mit Sicherheit ausreichend, in der Maschine ist ein NEMA 34 verbaut, wahrscheinlich zu groß, aber halt in der Kiste vorhanden,
      der Kleine dient nur zum Erproben
      Gruß
      Hans