PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Monoflop - beide Flanken triggern



Majuz
24.05.2009, 22:51
Hallo zusammen,

ich entwickle gerade eine Steuerung für meine CNC-Fräse. Ich habe 3 Platinen mit einer Kombination von L297 und L6203. Diese möchte ich nun ansteuern. Wie bekannt sein dürfte macht der Schrittmotor bei steigender Flanke am Clock-Eingang des L297 einen Schritt.

Nun könnte ich ja auf diese Art programmieren:
PortA.1 = 1
'kurze Pause
PortA.1 = 0
usw.

Da es aber etwas geschickter ist einfach zu schreiben
Toggle PortA.1
würde ich das gerne so machen.
Dann macht er aber nur bei jedem zweiten mal einen Schritt. Deshalb würde ich gerne ein Monoflop zwischenschalten, das auf beide Flanken reagiert und dann einen Impuls von wenigen µS generiert (sowohl bei steigender als auch bei fallender Flanke)
Momentan habe ich das so gelöst wie im Anhang zu sehen. Da ich allerdings 3 Achsen habe brauche ich dann 3 ICs, 6 Widerstände und 6 Kondensatoren. Ziemlich viel Aufwand. Ich bekomms auf meiner Leiterplatte nicht mehr unter :-(

Weiß einer von euch eine einfachere Lösung?

Ich habe schon überlegt einfach beide Eingänge zu verbinden, dann bräuchte ich nur 2 ICs, 3 Widerstände und 3 Kondensatoren, aber im Datenblatt (hier zu finden (http://www.nxp.com/acrobat_download/datasheets/74HC_HCT123_4.pdf)) steht auf Seite 6 in der Funktionstagelle leider kein "X" bei dem jeweils anderen Eingang (Ich hoffe man versteht was ich meine). Daher weiß ich nicht, wie der IC dann reagieren würde.

radbruch
25.05.2009, 00:06
Das verstehe ich nicht wirklich:

Da es aber etwas geschickter ist einfach zu schreiben
Toggle PortA.1
würde ich das gerne so machen.Da es aber enormen Hardwareaufwand bedeutet würde ich es nicht so machen?


Dann macht er aber nur bei jedem zweiten mal einen Schritt.Man könnte zweimal hintereinander togglen.

Majuz
25.05.2009, 07:02
Denkansatz von mir (keine Ahnung ob so korrekt):
Ich betreibe den AVR mit 16Mhz. Dann bin ich bei Taktzeiten von wenigen Nanosekunden. Wenn ich also ohne Pause zwei mal Toggle hintereinander, ist der Impuls wahrscheinlich zu kurz. Genauso beim manuellen umschalten. Der IC L297 braucht laut Datenblatt minimum eine Taktlänge von 0,5µs. Da ich ungern an Grenzen gehe wären meiner Meinung nach 2-3µS perfekt (bei den Taktraten von den Motoren um 1kHz auch locker möglich.

Die Programmierung möchte ich mit Bascom machen und die einzelnen Takte per Timerinterrupt. Daher sollte die Interruptroutine möglichst kurz sein. Wenn ich da dann eine Pause einbaue ("waitus"), wird die CPU damit ja blockiert und könnte in dieser Zeit schon andere Dinge tun (Sachen auf LCD anzeigen, Schritte vorberechnen, Daten von SD-Karte holen usw.) Der AVR hat sowieso schon genug zu tun, da möchte ich nicht auch noch eine Zwangspause einprogrammieren. Wenn das ganze extern geschieht haben die Pulse immer die richtige Länge und das Programmieren wird einfacher.

Mir schwebt da eine Art FIFO buffer vor das von der CPU gefüllt wird und von der interruptroutine abgearbeitet wird, damit die Takte schön gleichmässig sind.

oZe
25.05.2009, 08:15
hmm was hälste denn davon einfach nen Tiny13 o.ä. dafür zu benutzen. Ist zwar eigentlich verschwendung aber dafür wohl ein sehr geringer hardwareaufwand. Gibts ja auch in SMD also denke ich mal wär das die Platzsparendste Variante. Wenn du den internen Takt nimmst kommst du allein mit dem Bauteil aus und brauchst keine externe beschaltung mehr (mal abgesehen von nem Abblocker).

Manf
25.05.2009, 08:42
Ganz früher hat man so etwas mit einem EXOR Gatter gemacht, Signal an beide Eingänge, einer über Tiefpass.

Majuz
25.05.2009, 10:36
@oZe
Du hast recht, das ist eigentlich die einfachste lösung. Bin ich noch garnicht drauf gekommen. Einen Tiny25 hab ich sowieso schon auf der Platine noch mit drauf. Dann werdens halt zwei. Wenn ich das mit Interrupts machen möchte, muss der dannn bei beiden Flanken auslösen. In der Bascom-Hilfe steht aber bei "CONFIG INTx": "CHANGE to generate an interrupt on the change of the edge. Not all microprocessors support CHANGE."
Weiß jemand ob das beim Tiny25 geht oder weiß wer einen anderen 8-pinner bei dem das sicher geht? Ansonsten mach ich es halt über die Hauptschleife :-)