Schnittstelle mit (zwei) Vollbrücken-PWM-Motortreibern zur Steuerung eines Schrittmotors

Ich arbeite an einer Schnittstelle mit einer vorhandenen Leiterplatte mit integrierten Vollbrücken-PWM-Motortreiberchips , die einen Schrittmotor antreiben. Dem Interface fehlen jegliche Art von Standardschritt- (Clock) oder Richtungssignalen und ich kann nur die Eingangssignale verwenden, die vorhanden sind. Es gibt zwei Chips, um jeden Schrittmotor anzutreiben, sie sind Allegro A3959 . Ich möchte alles so lassen, wie es ist, also kann ich nur mit dem arbeiten, was ausgebrochen ist, aber ich kann einen Schnittstellenchip hinzufügen, der die verfügbaren Eingänge verwendet.

Ich möchte einen neuen Controller hinzufügen, um die Chips anzusteuern, der nur die Standardausgänge "Schritt (Takt) und Richtung" liefern kann. Wie kann ich das erreichen? Ich habe darüber nachgedacht, einen L297-Schrittmotor-Controller-Chip als Vermittler zu verwenden, aber mit nur begrenzten Eingängen (und ohne Zugriff auf Messwiderstände) glaube ich nicht, dass ich ihn verwenden kann. Selbst wenn ich Zugang zu den Messwiderständen hätte, weiß ich nicht, wie ich sie verbinden würde.

Der Einfachheit halber. Ich habe ein sehr verallgemeinertes Diagramm dessen erstellt, was mir zur Verfügung steht (die Pinbelegungen sind verallgemeinert):

Stromverteilungsplatine

Wie Sie sehen können, habe ich nur die folgenden Pins zur Verfügung:

  • Phase A (Richtung)
  • V REF A (Stromregelung)
  • Phase B (Richtung)
  • V REF B (Stromregelung)
  • Sleep (dies steuert viele Chips auf dem Board und kann nicht zum Pulsen in Betracht gezogen werden)

Soweit ich weiß, kann ich die Richtung leicht über die Phase-A/B-Pins steuern. Digitalsignal 0 für eine Richtung, Digitalsignal 1 für die entgegengesetzte Richtung. Wie steuere ich die V REF jedoch mit einem Takteingangssignal?

Das Datenblatt für den A3959 besagt Folgendes:

" Stromregelung. Der Laststrom wird durch eine interne PWM-Steuerschaltung mit fester Ausschaltzeit geregelt. Wenn die Ausgänge der DMOS-H-Brücke eingeschaltet werden, steigt der Strom in der Motorwicklung an, bis er einen Auslösewert erreicht, der durch den externen Messwiderstand bestimmt wird (R S ) und der angelegten analogen Referenzspannung (V REF ):

ICH TRIP = V REF / (10 * R S )

Am Auslösepunkt setzt der Sense-Komparator den Source-Enable-Latch zurück und schaltet den Source-Treiber aus. Die Lastinduktivität bewirkt dann, dass der Strom für die festgelegte Ausschaltzeit rezirkuliert. Der Strompfad während der Rezirkulation wird durch die Konfiguration langsamer/gemischter/schneller Stromabfallmodus bestimmt.“

Ist das ähnlich wie ein Taktsignal? (Hinweis: I TRIP ist bereits perfekt für den Motorstrom berechnet, wenn V REF volle 5 Volt beträgt.)

Wenn ich 100% V REF liefern würde , würde es sich auf 100% aufbauen, einen einzigen Schritt erzeugen, auslösen und dann die festgelegte Zeit abwarten , bevor es wieder geht?

Würde eine konstante V REF den Motor am Laufen halten und automatisch pulsieren?

Die vollständigen Einstellungen für die Chips in der aktuellen Konfiguration lauten wie folgt:

  • Enable-Pin wird konstant hoch gehalten.

"Wenn die Freigabe hoch gehalten wird, steigt der Strom an, bis er den durch die interne Stromsteuerschaltung festgelegten Pegel erreicht."

  • Der EXT-Modus wird konstant niedrig gehalten. Zerfall = schnell.

"Mit EXT MODE Low, Fast Decay-Modus wird das gegenüberliegende Paar ausgewählter Ausgänge während des Aus-Zyklus aktiviert."

  • Interne Stromsteuerungsmodus-Pins werden konstant hoch gehalten. Abfall = Schnell, %t AUS = 100 %.
  • Der PWM-Leerzeitgeber wird konstant niedrig gehalten. T BLANK = 6 / F OSZILATOR .
  • F OSCILATOR soll einen typischen Wert von 4 MHz haben.
  • Die feste Ausschaltzeit beträgt bei einem 4-MHz-Oszillator typischerweise 24 μs.
  • Die Schlaflogik wird verwendet, um den Stromverbrauch zu minimieren. Es darf nicht als Ersatz für die Aktivierung verwendet werden.

Normalerweise habe ich ein wirklich gutes Verständnis für Schrittmotortreiber. Alle Schrittmotortreiber, mit denen ich schnittstelle, haben jedoch so ziemlich immer Schritt (Takt) / Richtung als Standardeingang. Da dies eine Phasen- / Aktivierungs-Chopper- Schaltung ist, ist mehr Fachwissen (oder ein spezialisierter Controller-Chip) erforderlich, um dies herauszufinden.

Was ist der beste Ansatz?

Dies war hilfreich, hilft mir aber nicht bei der tatsächlichen Implementierung: embedded.com/print/4217719
Das sieht vielversprechend aus: ti.com/lit/an/slva416/slva416.pdf

Antworten (1)

Der A3959 sieht so aus, als wäre er für die Steuerung eines Gleichstrommotors mit Bürsten vorgesehen, bei dem das Anlegen einer Spannung in eine Richtung eine kontinuierliche Drehung erzeugt, sodass der PHASE-Eingang als Vorwärts- / Rückwärtssteuerung fungiert. Bei einem Schrittmotor müssen Sie die beiden Phasensignale in der richtigen Reihenfolge bereitstellen, um eine Bewegung in beide Richtungen zu erhalten Geben Sie hier die Bildbeschreibung ein(dies ist Abbildung 3 von Ihrem Link - https://www.embedded.com/print/4217719 ).

Als Ergebnis haben Sie zwei dieser Treiberchips und müssen dieses Signal für beide erzeugen. Das erledigt der L297 mit Takt- und Richtungseingang. Sie müssen nur zwei der Ausgänge verwenden, z. B. A und C im "Normalmodus", da der A3959 den komplementären Antrieb auf der anderen Seite der Brücke erzeugt.

"Ist das einem Taktsignal ähnlich? (Anmerkung: ITRIP ist bereits perfekt für den Motorstrom berechnet, wenn VREF volle 5 Volt beträgt.)" Nein, es ist eine Gleichspannung, die den Pegel festlegt, bei dem die Strombegrenzung arbeitet.

"Wenn ich 100 % VREF liefern würde, würde es sich auf 100 % aufbauen, einen einzigen Schritt erzeugen, auslösen und dann die festgelegte Auszeit abwarten, bevor es wieder geht?" Ja, sehen Sie den Sägezahn in der Abbildung? Das ist der Strom, der auf den Grenzwert ansteigt und zerhackt wird, wenn er für die festgelegte Zeitdauer abfällt, bevor die Brückentransistoren wieder einschalten. Der Strom steigt dann immer weiter auf den Grenzwert an.

"Würde eine konstante VREF den Motor am Laufen halten und automatisch pulsieren?" Nein, der Motor dreht sich bei jeder Phasenbetätigung nur um einen Schritt und bleibt dort, tatsächlich in dieser Position verriegelt, wenn der Phasenstrom eingeschaltet bleibt, bis der nächste Schritt geschaltet wird. Es gibt Halbschrittstrategien (detailliert im L297-Datenblatt), bei denen eine Phase bei alternativen Schritten keinen Strom hat, aber mit den auf den A3959 verfügbaren Steuerungen haben Sie diese Option nicht, Sie müssen einen Vollschritt ausführen - es sei denn, Sie können a fummeln deaktivierter Zustand durch Absenken des Vref-Eingangs auf Low. Es ist nicht dazu gedacht, auf diese Weise zu arbeiten, es gibt einen separaten ENABLE-Pin, der für die PWM-Steuerung vorgesehen ist. An diesem Punkt wäre ich versucht, einen PIC zu programmieren, um die Impulssequenz zu erzeugen, aber der L297 wird Ihnen einen funktionierenden Antrieb verschaffen.

Theoretisch muss ich also nur meinen Vref-Strom einstellen und dann die Phase A / B mit den komplementären A / C-Paaren von L297 manipulieren? Ich würde die Messwiderstände von L297 ignorieren und den Oszillator des L297 auf ungefähr 4 MHz einstellen, um mit dem Oszillator im A3959 übereinzustimmen. Ich denke darüber nach, ATtiny85-Chips zu verwenden, um eine benutzerdefinierte Mikroschrittlösung zu schreiben, aber L297 würde auch funktionieren.
Ja, erden Sie einfach die Sense-Eingänge am L297 und überlassen Sie den A3959 die Stromsteuerung. Da Sie nicht viele Funktionen des L297 verwenden, ist dies ein bisschen verschwendet, etwas, das auf einem ATtiny basiert, wäre billiger, es ist eine Frage der Zeit, die aufgewendet wird, um etwas mit einem Mikrocontroller einzurichten. Es gibt einen App-Hinweis auf der Microchip-Website (sie besitzen jetzt Atmel) zu diesem microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en591569
Ich habe mich entschieden, den Code auf einen ATtiny85 zu portieren, der genau das tun sollte, wonach ich suche, und über Mikroschritte verfügen sollte. Ich habe jetzt ein viel besseres Verständnis für das ganze Vref- und Phasen-Ding. Ich danke Ihnen für Ihre Hilfe!