Industrie Servomotor steuern mit Hardware PWM

  • Hallo RPI Freaks,

    zu Hause nutze ich oft den RPI, nun möchte ich auch auf der Arbeit in Einsetzen.

    Möchte einen 400Watt Servomotor ansteuern, der Servoregler wird über Impulse gesteuert.

    Der Motor kann 3000 U/min, und es sind 360 Schritte pro Umdrehung.

    50 U/sek * 360 Schritte => 18000. Also muss ich 18000 High Impulse und 18000 Low Impulse geben.

    Wenn ich jetzt in C ein Programm schreib mit schleifen, dann läuft der Motor auf hoher Drehzahl ziemlich unruhig.

    Mit einem Oszilloskop sieht man, das das PWM Signal nicht Konstant ist. (Weil der RPI noch das Betriebssystem im hintergrund hat)

    Das Problem ist zwar mit Hardware PWM beseitigt, aber:

    Wie kann ich die Impulse steuern ? Ich möchte das er mir 230 Schritte macht, das sind 230 High und 230 Low Impulse !

    Wenn ich die Hardware PWM einschalte läuft es natürlich, aber ich kann die Impulse nicht kontrollieren !


    Hat jemand da ne Idee ??? :helpnew:

    Einmal editiert, zuletzt von vmdream (13. Juli 2015 um 14:44)

  • werde es Morgen einreichen mein C Programm, habe es auf dem Privatem Rechner !


    hi,
    kannst du mal dein C-Programm zeigen?

    Die Frequenz ist 36kHz ? was meiner Meinung nach sehr niedrig für den RPI ist.


    Automatisch zusammengefügt:
    Ja genau diesen C Code nutze ich auch !

    #include <wiringPi.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>

    int main (void)
    {
    printf ("Raspberry Pi wiringPi test program\n") ;

    if (wiringPiSetupGpio() == -1)
    exit (1) ;

    pinMode(18,PWM_OUTPUT);
    pwmSetClock(2);
    pwmSetRange (10) ;
    pwmWrite (18, 5);

    for (;;) delay (1000) ;
    }


    aber man kann es entweder einschalten oder abschalten mehr auch nicht !!!



    Welche Bibliothek nutzt Du und wie hast du damit den PWM GPIO eingestellt. Hier mal ein Link für die Nutzung von wiringPi mit dem Hardware PWM: http://raspberrypi.stackexchange.com/questions/4906…e-pwm-frequency

    Einmal editiert, zuletzt von vmdream (13. Juli 2015 um 14:41)

  • Für Code solltest Du die Codeansicht nutzen, sieht dann so aus

    Wenn man auf der Seite weiterliest steht da, dass die Frequenz mit pwmSetClock() gesetzt wird. Was ich aber meinte ist der Beitrag davor, der erläutert, auf welchen Modus man den PWM setzen soll, der Code ist ja nur ein Beispiel.


  • Für Code solltest Du die Codeansicht nutzen, sieht dann so aus

    Wenn man auf der Seite weiterliest steht da, dass die Frequenz mit pwmSetClock() gesetzt wird. Was ich aber meinte ist der Beitrag davor, der erläutert, auf welchen Modus man den PWM setzen soll, der Code ist ja nur ein Beispiel.


    Diesen SetClock tuhe ich auf verändern, die PWM Signale verändern sich ja auch ! aber wie kann ich ? eine Bestimmte Frequenz und nur 100 Impulse sollen raus gehen, danach soll es abschalten ?

  • Hallo,
    es ist nicht das Funktionsprinzip von PWM nur eine bestimmte Anzahl an Pulsen auszusenden. Wenn also unbedingt PWM für deine Anwendung zweckentfremdet werden soll, hätte ich 2 Ideen. Zum einen könnte man die Zeit bestimmen, die benötigt wird, um bei verwendeter Frequenz gewünschte Anzahl Schritte zu tun. Und für nur diese Zeit wird PWM aktiviert. Also PWM an, Zeit warten, PWM aus. Das ist aber im Ergebnis wahrscheinlich zu ungenau? Zweite Idee wäre, an das Signal am Ausgang einen Impulszähler dranzuhängen und so nach erreichter Anzahl Schritte PWM zu stoppen. Dritte Idee: eine Kombination aus Hardware PWM für schnellen Dauerlauf, wegen der Laufruhe, und deiner Software PWM für die Einzelschritte. Oder läuft der Motor auch bei nur einer z.B. halben Umdrehung unruhig? Am Rande, ist es ein Servo- oder ein Schrittmotor? Gruß

    Einmal editiert, zuletzt von rob.z (13. Juli 2015 um 15:35)

  • Also die erste Idee kann ich nicht nehmen ! Es darf kein Schritt oder Impuls zuviel oder zuwenig sein.

    Wenn das Pick and Place Gerät nacher den ganzen Tag laufen soll, dann darf sich da nichts verzählen !

    Die zweite Idee: Bis das alles hin und her mit dem Abschalten und Impulsen zählen, glaube wird auch ungenau.

    Es ist ein Servomotor mit Servoregler. 1 Impuls = bewegt es sich um einen Grad und Zeigt es gleich am Regler an.

  • Ich denke mal es ist ein Schrittmotor und den braucht man nicht über PWM ansteuern, sondern über Impulse. Wenn die nicht zeitlich kritisch sind, dann ist das mit dem RasPi kein Problem, denn bei Impulsen verzählt er sich nicht. Er hat auf Grund des Multithreading nur Probleme ein exaktes PWM Signal, welches die Stellung von Servoantrieben bestimmt zu generieren.

  • Ich kenne Servomotor und Servoregler nur als eine Einheit, genannt Servoantrieb. Der wird über die Pulsweite gesteuert, nicht über Impulse. Aber ich kenne nicht alles. Wenn es also ein Servo sein sollte, der über Impulse gesteuert wird, und es einen Regler gibt, der etwas anzeigt, hat dieser Regler einen Ausgang für ein Signal, dass die aktuelle Stellung anzeigt? Dann könnte man mit dem Raspi eine Softwareregelung aufbauen, mit der der Motor mit Hilfe der PWM Impulse solange an die Zielposition herangefahren wird, bis diese erreicht ist. Ich meine einen Regelkreis.

    Ok, das Bild sagt mir, es ist ein Servomotor!

    Einmal editiert, zuletzt von rob.z (13. Juli 2015 um 16:44)

  • Deswegen meine Frage. Die Antwort hört sich aber nach einem Schrittmotor an. Also nochmal die Frage an den TE wird der Motor über Pulsweitenmodulation oder rein durch Impulse gesteuert? Soll die gezeigte Steuerung durch einen RasPi erstezt werden? PWM sind nicht nur einfach Impulse sondern genau definierte Rechteckformen mit definiertem Verhältnis zwischen low und high.


  • ... nach einem Schrittmotor an. ...
    ...


    seh' ich auch so.
    Jörg: Hast Du nicht mehr diese I2C-Treiber-bausteine/-boards für PWM im Angebot?
    Ich würd' da sowas nehmen. Was nachschalten muss er so oder so ...
    cu,
    -ds-

  • Hallo vmdream,
    brauchst du nicht sogar 2 Impulssignal, Pulse und Sign, zur Positionierung? Und wie wird die Geschwindigkeit bei Positionierung (Position Control Mode) eingestellt, über V_Ref oder die Impulsfrequenz? Also wenn das per Schleife erzeugte Signal nicht konstant genug ist, dann wirst du mit dem Raspi nur über die GPIOs keine abgezählten Impulse erzeugen können. Das Hardware PWM kann das jedenfalls nicht.

    Vielleicht kann mit Hilfe des Position Pulse Output die Position im Raspi bestimmt werden und so über Hardware PWM, hierfür wäre es dann doch brauchbar, und einen Regelkreis die Position angefahren werden. Aber ich habe keine Ahnung, wie die Position Pulse Output Signale aussehen, und auch nicht, wie man einen Regelkreis im Raspi programmiert, darum bitte nur als Idee zu verstehen.

    Wenn es also unbedingt der Raspi sein soll, eigentlich wäre das ja eine Aufgabe für eine SPS, dann fällt mir nur noch folgendes ein: eine externe Schaltung mit einem Timer- oder Oszillator-IC, die das nötige Signal sauber erzeugen kann und vom Raspi gesteuert wird, z.B. auch über SPI oder I2C. Ich hab da aber jetzt keinen konkreten Vorschlag, bin kein Elektroniker.

    Oder ein Microcontroller wie den Arduino, der ließe sich ja auch vom Raspi ansteuern. Es gibt viele Projekte, bei denen eine Kombination der Beiden die beste Lösung ist.

    So, ich habe fertig! Gruß

    Einmal editiert, zuletzt von rob.z (13. Juli 2015 um 18:17)

  • Hallo liebe Freaks,

    also wenn ich hier schon lese von manchen die denken, das ist ein Schrittmotor, dann sollen sie sich bitte raushalten.

    Ich brauche paar gute Informationen und nicht dumme Spekulationen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Wie ich schon beschriegen habe, wird der Regler über PWM Impulse gesteuert ! gebe ich dem Regler 200 High (+24V) und LOW (0V)
    fährt mit der Motor 200 Schritte ( 360 Schritte = ganze Umdrehung)

    Leider macht der RPI keine Konstanten PWM Signale unter einer Programmiersprache. Dabei läuft der Motor unruhig !

    Die Leute die kein Oszilloskop zuhause haben oder jemals gesehen haben, sollen sich von diesem Thema bitte raushalten. :@

    Die Software werde ich gleich einreichen, vielleicht ist irgendwo da das Problem !

  • Zitat

    Der Motor kann 3000 U/min, und es sind 360 Schritte pro Umdrehung.

    Zitat

    also wenn ich hier schon lese von manchen die denken, das ist ein Schrittmotor, dann sollen sie sich bitte raushalten.

    Ich brauche paar gute Informationen und nicht dumme Spekulationen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Naja... ich steck jetzt nicht im Thema - hab nur überflogen aber auf den Ersten Blick sieht diese info nunmal nach nem Schrittmotor aus.
    Außerdem ist "Ich brauche paar gute Informationen und nicht dumme Spekulationen" nicht sehr nett... die Leute wollen dir ja nur helfen.

    Zitat

    Die Leute die kein Oszilloskop zuhause haben oder jemals gesehen haben, sollen sich von diesem Thema bitte raushalten

    Boa... so ein Oszilloskop zu Hause muss wohl den selben Effekt haben wie ein Buch --- nur durch den Besitz scheint sich da ja unheimlich viel Wissen in einem zu sammeln ;)

  • Du machst keinerlei vernünftige Angaben und wirst dann noch unhöflich? Wer so um Hilfe bittet, ist hier echt willkommen! Jeder (digitale) Servomotor ist ein Schrittmotor, sonst wäre er nicht so präzise steuerbar, aber das ist ein anderes Thema. Und PWM sind nicht einfach Impulse. Ein PWM Signal wird, wie der Name schon sagt durch Pulsweite definiert, im Prinzip, das Verhältnis der Zeit von high (t) zur Gesamtzeit(T) eines Pulsabschnittes, oft sogar mit einer festen Frequenz. Während Du einzelne Impulse, also nicht PWM, ohne Probleme mit dem Raspberry Pi erzeugen kannst, wird es bei der Modulation der Pulsweiten schwierig, weil Linux keine Echtzeitunterstüztung bietet. Es gibt zwar s.g. Echtzeitkernel, evtl. helfen die ja weiter. Willst Du die Elektronik des Motors ansteuern oder den Motorr direkt? Auch dazu hast Du Dich nicht geäußert.

  • Ein Bild sagt mehr als 1000 Worte. Das Bild in Post #9 sagt mir, dass es hier um einen Servoantrieb Delta ASDA-B2 geht. Hier die Bedienungsanleitung dazu. Da stehen schonmal ziemlich viele Angaben drin. Soweit ich es verstehe, werden Impulssignale mit einem Tastgrad von 0,5 verwendet. Wer es nachlesen will, ab S. 117.

    @ vmdream
    Versteh bitte, dass PWM nicht synonym zu Impuls ist. Es liegt zwar der Puls-Weiten-Modulation ein Impulssignal zugrunde, aber nicht jedes Impulssignal ist pulsweitenmoduliert.

  • Das ist mir schon klar das PWM Pulsweitenmodulation heist !!!

    Sorry Jungs, aber das Problem ist, das der RPI keine kontstanten Impulse raus gibt. Wenn ich eine Puls Pause difinition erstelle unter einer Software. Dann ist es für mich auch eine PWM.

    oder sehe ich das falsch ??? und da schwanken die abstände ziemlich stark, und dadurch läuft der Motor unruhig.

    Unter einem NE555 und bei 38KHz läuft der Motor schön ruhig !

    Einmal editiert, zuletzt von vmdream (14. Juli 2015 um 10:36)

  • Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (14. Oktober 2017 um 13:46)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!