Sie sind auf Seite 1von 9

UPCX 530 "Extended universal positioning controller"

Diese Projekt basiert auf einer Arbeit von Lawrence Glaister VE7IT und Maximilien Mousset
und dem "Space Vector Modulation" Beispiel für dsPIC's (AN957) vom Microchip. Ich
veröffentliche es unter der GNU General Public Lizenz der Free Software Foundation 2.0
oder jeder späteren Version und unter der CERNOSHW Version 1.1 Open Hardware Lizenz.
Bitte beachten Sie, dass Microchip die Nutzung seiner Programmierbeispiele in den
Application Notes auf Nutzung mit den eigenen Produkten beschränkt.

Dieses Programm und die dazugehörige Hardware veröffentliche ich mit der Hoffnung, dass
es für jemanden nützlich ist, aber mit keiner Garantie, dass es in irgendeiner Form
funktionsfähig ist. Für Details beachten Sie bitte die GNU General Public Lizenz.

Sinn des Projektes


Basierend auf dem DC-Servomotor-Controller von Lawrence Glaister und der H-Brücken
Erweiterung von Maximilien Mousset habe ich die Firmware des dsPIC30F4012-30 für den
Betrieb mit BLDC-Servomotoren mit integrierten Hall-Sensoren weiterentwickelt. Nun lassen
sich sowohl BLDC- als auch DC-Servomotoren mittels TTL-Takt-/Richtungs- und Enable-
Signalen steuern. BLDC Motoren haben den Vorteil, dass sie sehr kräftig, laufruhig und
elektronisch kommutiert sind. Die drei integrierten Hall-Sensoren signalisieren die Position
des Rotors im magnetischen Feld.
Der Mikrocontroller kann nun sowohl DC-Servomotoren als auch BLDC-Servomotoren
ansteuern. Bei Bootvorgang der Firmware erkennt der Controller ob Hall-Sensoren
angeschlossen sind, indem er überprüft, ob mindestens ein Hall-Signal auf 0 liegt. Ist dies
der Fall, springt er in den BLDC-Modus. Ansonsten nutzt er den DC-Modus.
Zusätzlich kann der Mikrocontroller nun intern einen Takt generieren, der die Abstimmung
der PID-Parameter erleichtert ohne eine externe Taktquelle zu nutzen.
Um die PID-Parameter einzustellen, habe ich eine neue Software, basierend auf dem
Tuning-Tool von Maximilien Mousset geschrieben. Diese ist nun in Embarcadero Delphi
geschrieben.
Eine Beispielschaltung und Platine ist im Projekt enthalten.
Zum Einstellen der Parameter wird eine kleine Adapterplatine benötigt. Diese ist ebenfalls
Bestandteil des Projektes.

V. Besmens Dezember 2012


Inhalt der Projektdateien
 Dieses PDF Dokument in Deutsch und Englisch
 Teileliste als PDF mit Reichelt Bestellnummern.
 Firmware Quellcode als kompilierte HEX Datei für den dsPIC30F4012-30
Mikrocontroller, geschrieben in dsPICC (Zum Kompilieren wird die kostenpflichtige
Vollversion des Compilers benötigt). Details zu den Fuse-Settings und zum
Optimization-Level finden sich in der main.c.
 Schaltplan, Layout (Altium-Designer und PDF Dateien) und Extended-Gerber mit GC-
Preview (*.gwk) Dateien für ein einzelnes Board (56mm x 56mm ) und den
Programmieradapter. Ebenfalls ein Platinennutzen mit 9 Controller-Boards und 4
Programmieradaptern auf einer einzigen Platine mit 1mm Distanz zwischen den
Boards, die sich mit einer kleinen Kreissäge aussägen lassen.
 Embarcadero Delphi XE Quellcode und das kompilierte Projekt zum Einstellen der
PID-Parameter. Es werden einige zusätzliche Komponenten benötigt (eine
Komponente ist leider nicht kostenlos). Details finden sich im Quellcode.
Technische Daten der Beispielsteuerung
 Die maximale regulierte Betriebsspannung der Motoren ist 48V. Der Motorstrom ist
durch die Breite der Leiterbahnen limitiert. Aktuell sollte der Motorstrom bei BLDC
Motoren 10A nicht übersteigen (das entspricht etwa 7A pro Phase). Dies limitiert die
Motorleistung auf 240W bei 24V VMOT und 480W bei 48V VMOT. Ich habe diese
Grenzen aber nicht getestet weil ich deutlich kleinere Motoren (60W und 120W)
einsetze.
 Die maximale getestete Schrittfrequenz war 110KHz bei einer Encoderposition pro
Schritt und einem Motor mit 2000 Impulsen pro Umdrehung (500 Impulse Encoder x
4) und einem Nanotec (www.nanotec.de) DB57S1 BLDC Motor bei 24V VMOT (Das
ergibt 3300 rpm). Die maximal mögliche Schrittfrequenz -Frequenz ist stark abhängig
vom verwendeten Motortyp (BLDC oder DC), den Motordaten, dem Encoder und der
Betriebsspannung des Motors.

Um die Firmware-Quellcodes selbst zu Überstzen


Eine compilierte HEX-Datei ist bereits im Projekt vorhanden.
Wer den Quellcode der Firmware selbst übersetzen will, benötigt den Microchip C30
Compiler (Version 3.00 oder neuer). Dieser ist leider nicht kostenlos, da der Optimization-
Level 3 benötigt wird.
Die Fuse-Settings sind in der main.c beschrieben.
Um die Platine der Beispielsteuerung herzustellen
 Einen Platinenhersteller der Extended Gerber Dateien oder GC-Preview Dateien zur
Herstellung zweilagiger Platinen verarbeiten kann. Die Technologiedaten der Platinen
sind 6mil / 6mil (0.15mm / 0.15mm) für Leiterbahnabstände und Zwischenräume und
ein minimaler Bohrlochdurchmesser von 0,4mm.
 Die Möglichkeit SMD Bauteile mit Bauteilgröße 0805 zu löten.
 Die Möglichkeit einen Kühlkörper für die FETs zu bauen, wenn höhere Ströme als 5A
pro Phase benötigt werden.
 Ein PIC Programmiergerät, das den dsPIC 30F4012-30 Mikrocontroller
programmieren kann (z.B. Microchip PICkit 3).
 Einen BLDC-Motor mit Hall-Sensoren oder einen DC-Servomotor, beide mit TTL-
Level A/B Encoder.

Um den Controller zu betreiben


 Die Möglichkeit eine PID Regelung einzustellen. Details finden sich auf Maximilien
Mousset's Internetseite (Im Internet nach YAPSC suchen) oder in der Wikipedia.
 Eine Stromversorgung mit genug Leistung um den Motor (die Motoren) zu betreiben.
Wenn die Motoren mit 48V betrieben werden sollen, sollte die Stromversorgung
geregelt sein um den Kondensator C5 und die Leistungs-FETs innerhalb ihres
Spannungsbereiches zu betreiben. Bei 24V Betrieb ist eine geregelte Spannungs-
versorgung nicht zwingend erforderlich.
 Eine weitere regulierte 10 bis 12 Volt Versorgung mit etwa 250mA pro Controller.
 Für die ersten Tests, das Finden der richtigen Motor / Hallsensorphasen und das
Einstellen der PID-Regelung, empfehle ich eine regulierte Spannungsversorgung mit
einstellbarer Strombegrenzung. Die Phasen- / Hallsensor-Zugehörigkeit ist nicht
immer eindeutig aus den Datenblättern der Motoren zu entnehmen. Daher muss man
hier häufig ausprobieren und die 3 Hall und zugehörigen 3 Phasensignale durch
Ausprobieren ermitteln
 Ein TTL-Frequenzgenerator ist prima um die Steuerung zu testen aber nicht
zwingend erforderlich.
 Mindestens einen Programmieradapter um die PID-Einstellungen zu programmieren.
 Einen PC mit Microsoft Windows XP oder neuer mit einer seriellen Schnittstelle (DB9)
oder einem USB-Seriell-Adapter.
 Die PID-Einstellsoftware (Teil des Projektes)
Hinweise zum Aufbau des Boards
 Die minimale Bauteilgröße ist 0805.
 Das Board ist auf beiden Seiten bestückt.
 Einige Bauteile sind nicht notwendig wenn das Board nur DC-Servomotoren
antreiben soll. Details finden sich im Schaltplan und der Stückliste.
 Einige Kondensatoren wollte ich zuerst als Tantalkondensatoren bestücken. Ich habe
mich dann aber für X7R MLC Typen entschieden. Daher haben einige
Kondensatoren eine Polaritätskennzeichnung, die man ignorieren kann.
 C5 ist ein radialer ELKO dessen Beinchen vor der Bestückung umgebogen werden.
Er liegt dann auf dem Board und kann dort festgeklebt werden. Im Projekt ist ein Bild
enthalten, das dies zeigt.
 Der Pin 1 von J2 und J1 ist auf der gegenüberliegenden Seite des Positionierloches!
 Die Treiber-FETs können gekühlt werden, indem man die ganze Platine mit mehreren
Federscheiben und einem Wärmeleitpad auf einem Kühlkörper befestigt. Wenn
Kühlung benötigt wird, sollten die FETs sehr eben aufgelötet werden.
 Wenn Sie einen Linearregler für U1 nehmen wollen, kann dieser sehr warm werden
(gemessene 70°C). Man kann die Erwärmung durch Betrieb der TTL-Seite mit 10V
reduzieren (50°C). Möglich ist es auch, denn Spannungsregler auf der Unterseite zu
montieren, und ihn zusammen mit den FETs zu kühlen. Hierfür muss dann ein
entsprechender Kühlkörper so gefräst werden, dass alle Komponenten gleichmäßig
aufliegen. Alternativ kenn ein Schaltregler verwendet werden (s. Stückliste) oder die
5V und 12V werden dem Board separat zugeführt, indem man anstatt U1 einen
Stecker bestückt.
 Die Überstrom-Schutzschaltung wird durch Messen der Spannung an TP2 gegen
GND eingestellt. Details finden Sie im Schaltplan. Sie sollte auf 1,5- bis 2-mal den
Maximalstrom des Motors eingestellt werden.
 Die Brücken-FETs sollten sehr sauber gelötet werden um Kurzschlüsse mit
Durchkontaktierungen zu vermeiden (s. Bild unten). Eine Lötstelle an Q6 ist sehr
kritisch.

Do not connect
via with pin!
Hinweise zum Aufbau des Programmieradapters

 Die minimale Bauteilgröße ist 0805.


 Das Board ist nur auf der Oberseite bestückt.
 Der Pin 1 von J2 ist auf der gegenüberliegenden Seite des Positionierloches!
 Halten Sie das Flachbandkabel zwischen dem Programmieradapters und der
Controller-Board kurz um die In-System-Programmierung nicht zu beeinflussen
(maximal 100 bis 150mm).

Motoren und Encoder


Details zum maximalen Strom und der maximalen Betriebsspannung finden Sie in den
technischen Daten oben.
Die Encoder müssen TTL-level (5V) A/B Signale mit einem optionalen Index-Puls erzeugen
(z.B. Avago HEDS 5400 Encoder). Das Controllerboard wurde zur Verwendung in der
direkten Nähe der Motoren entwickelt. Auf dem Controller sind keine differentiellen
Empfänger für die Encoder und Hall-Sensoren vorhanden. Der Mikrocontroller hat aber einen
eingebauten digitalen Low-Pass-Filter für die Encodersignale.
Wenn ein BLDC-Servomotor betrieben werden soll, so muss dieser drei TTL-Level
Hallsensoren enthalten, die gemeinsam 6 Positionsmeldungen pro elektrische Umdrehung
zurückliefern. Die drei Motorphasen sollten in Sternschaltung verschaltet sein. Ich habe
keine Motoren mit Dreiecksschaltung getestet.

Einen DC-Servomotor anschließen


Einen DC-Servomotor anzuschließen ist einfach. Der Motor wird an Pin 1 und Pin2 von J4
angeschlossen. Nachdem man einen kleinen P-Wert eingegeben hat und versucht, die
Motorachse zu drehen, wird sich der Motor entweder an seiner Position halten oder aber
plötzlich wegdrehen gefolgt von "Max error exceeded" Fehlermeldungen im Programm. Im
zweiten Fall sind einfach die Motoranschlüsse oder die A/B Encodersignale auszutauschen.

Einen BLDC-Servomotor anschließen


Einen BLDC-Servomotor anzuschließen ist leider etwas komplizierter. Man muss die
korrekte Zugehörigkeit von den drei Motorphasen zu den 3 Hallsignalen und den zwei
Encodersignalen durch Ausprobieren ermitteln, nachdem man etwas P in die Regelung
eingegeben hat. Bei den Hall / Motorphasenkombinationen werden einige Kombinationen
funktionieren. Um die Brücken-FETs nicht zu zerstören sollte man eine strombegrenzte
Spannungsversorgung für VMOT verwenden. Hier einige Kombinationen für Motoren, die ich
getestet habe:

Connector Nanotec DB57 series* Motionstep 57mm series**


J5 Pin1 (VCC) Orange (VCC) Red (VCC)
J5 Pin2 (GND) Black (GND) Black (GND)
J5 Pin3 (HALL1) Green (H3) Blue (Hall Phase C)
J5 Pin4 (HALL2) Gray (H2) Yellow (Hall Phase B)
J5 Pin5 (HALL3) Yellow (H1) Green (Hall Phase A)
J4 Pin1 (P1) Brown (U or Phase A) Green (Phase A)
J4 Pin2 (P2) Blue (W or Phase C) Yellow (Phase B)
J4 Pin3 (P3) White (V or Phase B) Blue (Phase C)
* www.nanotec.de
** The company "Motionstep" does no longer exist!
Steuerungssignale und Sequenz für die Spannungsversorgung
Für das Anlegen der Versorgungsspannungen ist eine spezielle Sequenz notwendig. VMOT
muss spätestens dann anliegen, wenn das Enable-Signal auf 0 gezogen wird und Step-
Signale anliegen. Eine gute Masseverbindung zwischen dem GND von VMOT und dem GND
der 12V Versorgung ist erforderlich.
Die Steuersignale liegen an J1:

Pin (J1) Signal Typ Beschreibung


1 12V Power Regulierte 10 bis 12V 250mA wenn 78S05 benutzt wird.
2 12V Power Regulierte 10 bis 15V 150mA wenn TSR 1-2450 benutzt
wird.
3 Step In (TTL) Step-Signal bei HL-Übergang wenn Enable auf Low
liegt.
4 Dir In (TTL) Richtungseingang
5 Enable In (TTL) Motor wird enabled wenn das Signal auf 0 liegt
6 Error Out (OC) Open Kollektor Fehlerausgang -> zieht auf 0 bei Fehler,
Positionierfehler können zurückgesetzt werden, indem
man Enable auf 1 und dann wieder auf 0 legt.
7 Index Out (TTL) Index Signal vom Encoder wenn er dieses Signal hat.
8 NC No connection
9 GND Power GND
10 GND Power

Der Controller erzeugt durch die PWM Ansteuerung der Motorwicklungen Störungen auf
seinen Steuersignalen (Step/Dir/Enable) und ist ebenfalls sehr empfindlich gegen Störungen
auf diesen Signalen. Wenn die Steuerung bei Nutzung des internen Stepsignal-Generators
gut funktioniert, es aber Probleme mit der externen Ansteuerung gibt, kann man R2, R3, R4
auf 1K reduzieren und / oder einen L-C Filter in die Steuersignale einschleifen:

Möglicherweise müssen die Bauteilwerte des Filters angepasst werden.

Eventuell helfen auch gebräuchliche T-Filter.


Einstellung der PID und BLDC Parameter / Benutzung der Software
Die PID-Parameter werden mit Hilfe des Programmieradapters und einer RS232 Schnittstelle
eingestellt. Details zum Einstellvorgang finden sich u.a. Maximilien Mousset's Internetseite.
Seine Software kann man wegen der Erweiterung um den BLDC-Motor und dem internen
Oszillator allerdings nicht benutzen! Es ist auch möglich, die Einstellungen mit einem
seriellen Terminalprogramm (57600Baud 8N1) vorzunehmen.

Die von mir geschriebene Software ist sehr einfach gehalten. Sie hat einige Bugs und neigt
dazu, die serielle Schnittstelle zu blockieren - aber sie tut ihren Job. Bei Problemen hilft ein
beherzter Griff zum Taskmanager, um das Programm zu beenden…
Nachdem die Software gestartet wurde, wird zuerst einmal der COM-Port gewählt. Nicht
vergessen zuerst zu verbinden (Connect).

Mittels der "Read" und "Write" Buttons ist ein Auslesen oder Schreiben der PID und BLDC-
Parameter ins interne EE-Prom der MCU möglich.

PID Parameter (erster Reiter)


Details zum Einstellvorgang finden sich auf Maximilien Mousset's Internetseite

BLDC Paramters (erster Reiter, Wirkung nur bei angeschlossenem BLDC Motor)
BLDC Hall timeout Das Timeout nachdem der Hall-Sensor-Status erneut gelesen wird, wenn sich
deren Status seitdem nicht verändert hat. 50 x 200us ist der Vorgabewert. Wert
muss normalerweise nicht geändert werden.
BLDC Charge Elcos Wenn auf 1 werden die Bootstrapkondensatoren des Brückentreibers vorm
Anlegen der PWM-Signale aufgeladen. Der IR2101S hat eine
Unterspannungsdetektion für die Bootstrapkondensatoren. Daher kann der
Wert auf 0 belassen werden.
0 ist der Vorgabewert.
BLDC Phase advance Die Differenz zwischen dem elektrischen Winkel der SVM und den Signalen
der Hall-Sensoren. Der Wert kann normalerweise auf 0 bleiben. Wird der Wert
angepasst, kann man evtl. höhere Drehzahlen und einen ruhigeren Lauf beim
Übergang der Hallsignale erreichen. 0 ist der Vorgabewert.
SVM cycle time Die Zykluszeit der Space-Vector-Modulation. Der Zyklus bestimmt die
Neuberechnung der Phasenwerte. Ein Wert von 4 x 100us sollte
normalerweise OK sein. Eine kürzere Zykluseinstellung kann die
Gesamtperformance des Controllers verändern, weil die Neuberechnung viel
Rechenzeit benötig.
4 ist der Vorgabewert; Werte von 1 bis 4 sind möglich
Status Sampling und Step Input Response (zweiter Reiter)
Details zum Einstellvorgang finden sich auf Maximilien Mousset's Internetseite

Movement (zweiter Reiter)


Ich habe in die dsPIC-Firmware eine zusätzliche Routine eingebaut, die interne Step-Signale
zu Testzwecken erzeugt. Der genutzte Interrupt hat eine sehr niedrige Priorität, was die
Gleichmäßigkeit der Impulse beeinflusst, wenn eine kurze SVM-Zykluszeit oder eine schnelle
PID-Zykluszeit eingestellt ist.
Der Oszillator kann mit den unten markierten Einstellungen kontrolliert werden. Negative
Werte ändern die Laufrichtung des Motors. Der Oszillator erzeugt keine Anfahrrampe! Liegen
externe Step-Impulse an, so werden diese dem eingestellten Oszillatorwert hinzuaddiert.

Referenzen
Lawrence Glaister's Internetseite: http://members.shaw.ca/swstuff/
Maximilien Mousset's Internetseite: http://www.max-mod-shop.com
Microchip dsPIC BLDC SVM Beispiel (AN957): www.microchip.com
Graphicode GC-Preview zum Ansehen der Gerberdateien: http://www.graphicode.com
Meine Internetseite: http://www.vbesmens.de