- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 34

Thema: 1 Jahr erfolglos progrmmiert - verzweifelt - python-Programmierer gesucht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.09.2017
    Beiträge
    52
    Nun hatte ich endlich wieder Zeit, an der Steuerung weiterzubauen.
    Bin mit euren Vorschlägen systematisch an die Sache ran und habe die ganze Verkabelung getestet, vielleicht ist da ja eine Lötstelle schlecht. Alles geprüft, alles i.O.
    Also habe ich ein kleines Programm geschrieben, mit dem ich nur die Servos und nur in bestimmten Werten ansteuere. Das Programm läuft direkt auf dem RPi. So kann ich zumindest mal Übertragungsprobleme aus dem WLAN ausschliessen.
    Zum Testen habe ich ebenfalls die Last von den Servos genommen. Unter Last läuft einer nicht, ohne Last laufen alle drei. Akku evtl. zu schwach?
    Anbei die gewünschten Bilder des Lenkungsaufbaus, der Verkabelung und des Akkus.
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221623.jpg
Hits:	14
Größe:	101,5 KB
ID:	33873Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221640.jpg
Hits:	14
Größe:	106,4 KB
ID:	33874Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20181221_221703.jpg
Hits:	13
Größe:	71,1 KB
ID:	33875

    Auf dem Video wäre zu sehen, dass die Servos auch ohne Last zittern. Daher gehe ich eher davon aus, dass irgendwo was mit dem PWM-Signal nicht passt.
    Wie kann ich das hier einfügen, ohne einen Google- oder Facebook-Account erstellen zu müssen?

    Hier der Code, mit dem ich die Steuerung prüfe:
    Code:
    import sys
    import time
    import socket
    import RPi.GPIO as gpio
    from decimal import Decimal
    
    print "Setting up board"
    #General board settings
    gpio.setmode(gpio.BCM)
    
    print "Setting pins"
    #Pin settings for X axis
    gpio.setup(16, gpio.OUT)
    gpio.setup(20, gpio.OUT)
    gpio.setup(21, gpio.OUT)
    
    #Check LED on pwmServo Pin
    #gpio.output(16, True)
    #gpio.output(20, True)
    #gpio.output(21, True)
    #time.sleep(3)
    
    #gpio.output(16, False)
    #gpio.output(20, False)
    #gpio.output(21, False)
    #time.sleep(1)
    
    #Set pwmServo Pins as PWM
    pwmServo1 = gpio.PWM(16, 50)
    pwmServo2 = gpio.PWM(20, 50)
    pwmServo3 = gpio.PWM(21, 50)
    
    #Pin settings for blinker
    #gpio.setup(19, gpio.OUT)
    #gpio.setup(26, gpio.OUT)
    
    #Blinkers off
    #gpio.output(19, False)
    #gpio.output(26, False)
    
    time.sleep(1)
    
    #************************************************************************************************
    #Change from left to right
    fltCounter = float(7.5)
    pwmServo1.start(fltCounter)
    pwmServo2.start(fltCounter)
    pwmServo3.start(fltCounter)
    
    while fltCounter < 10.0: #12.5:
    	print "Angle % 0.2f" % fltCounter
    	pwmServo1.ChangeDutyCycle(fltCounter)
    	pwmServo2.ChangeDutyCycle(fltCounter)
    	pwmServo3.ChangeDutyCycle(fltCounter)
    	time.sleep(0.1)
    	fltCounter = float(fltCounter + 0.1)
    		
    #************************************************************************************************
    #Change from right to left
    fltCounter = float(10) #float(12.5)
    while fltCounter > 5:
    	print "Angle % 0.2f" % fltCounter
    	pwmServo1.ChangeDutyCycle(fltCounter)
    	pwmServo2.ChangeDutyCycle(fltCounter)
    	pwmServo3.ChangeDutyCycle(fltCounter)
    	time.sleep(0.1)
    	fltCounter = float(fltCounter - 0.1)
    
    #************************************************************************************************
    #Reset pins, turn off
    print "Stop"
    fltCounter = float(7.5)
    pwmServo1.ChangeDutyCycle(fltCounter)
    pwmServo2.ChangeDutyCycle(fltCounter)
    pwmServo3.ChangeDutyCycle(fltCounter)
    time.sleep(1)
    	
    #X axis stop
    pwmServo1.stop()
    pwmServo2.stop()
    pwmServo3.stop()
    gpio.output(16, False)
    gpio.output(20, False)
    gpio.output(21, False)
    
    #Right and left blinker off
    #gpio.output(19, False)
    #gpio.output(26, False)
    		
    gpio.cleanup()
    
    print "Exiting"

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Wenn ein PWM-Signal erzeugt wird, könnten Interrupts/Timerereignisse dieses stören. So dass das Timing des PWM-Signals geringfügig durcheinandergerät und sich also die Frequenz ändert. Besser ist vielleicht, einen externen PWM-Generator zu verwenden, der sich von nichts durcheinanderbringen lässt.

    Noch eine Idee wäre, nur mal ein Programm dafür zu schreiben, dass eine PWM-Signal ausgegeben wird, aber sonst nichts gemacht wird. - Glaube das hast Du ja schon. Vielleicht kann man für kurze Zeit dort auch mal die Interrupts alle abstellen und sehen, ob die Servos während dieser Zeit ruhig sind.

    Oder es ist ein äußerer Einfluss, der die Frequenz des Signals beeinflusst.

    RPi kenne ich mich leider nicht aus, daher kann ich dazu nichts Konkretes sagen.

    Eine Idee zum externen Test mit einem PWM-Signal wäre vielleicht der TL494.


    Nachtrag:

    Habe gerade gelesen, dass andere auch das Problem bei RPi haben, dass die PWM-Frequenz instabil ist. Mit externem PWM-Generator ist das dann wohl verschwunden.

    MfG
    Geändert von Moppi (22.12.2018 um 08:32 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Moin Chris,

    normalerweise sind die PWM Module (zumindest in denen von mir verwendeten Controllern) Hardwaregesteuert,
    somit dürfte da nix eiern, da kann die Software selbst sogar stehen bleiben ohne Auswirkungen auf die PWM.

    Wenn die PWM aber tatsächlich per Software erzeugt wird, dann hat man ein RIESEN Problem, was eigentlich unlösbar ist.
    Das kann man dann wirklich nur, wie Moppi schrieb, mit externen PWM Controllern in den Griff bekommen.
    Ich weis aber nicht wie das beim RasPi abläuft. Da ich gelesen habe, dass ein Servo sogar in die falsche Richtung läuft,
    klingt das wirklich wie ein Pulsbreitenproblem.

    Kann man das rausbekommen ob die PWMs per Software erzeugt werden ?, bzw. sollte das sicher hier im Forum jemand beantworten können.

    Es könnte auch ein Reset ausgelöst werden durch Lastschwankungen oder Störungen
    In den Servos sitzen ja auch Controller, die bei Störungen auf der Versorgungspannung gerne mal einen Neustart ausführen können.
    Der dauert nur paar Millisekunden, aber hier zuckt der Servo dann kurzzeitig und läuft evtl. auch in die falsche Richtung.
    Das Problem tritt dann vermehrt in Erscheinung, je mehr Servos gleichzeitig laufen bzw. bei größerer Last.
    Ich hab so ein Problem schon in meinem Hubis gehabt. Dann gibts nen kurzen Aussetzer und dann geht es wieder.
    Hier hilft dann die Versorgungsspannung evtl. noch mit einem/mehreren dicken Elko abzublocken oder aber die Verkabelung genauer zu untersuchen.
    Oft ist diese nicht optimal gelöst, über ein Steckbrett (Experimentierboard) z.B. sind solche Fehler besonders häufig.
    Vielleicht zieht der eines Servo bei Dir mehr Strom weil er einen größere Last bewegen muss, dehalb verhält er sich dann etwas merkwürdig.
    Im Zweifel sollte tausche ich auch gerne mal die Servos untereineinader, um sicherzustellen, das es nicht am Servo selbst liegt.
    Wenn das Problem dann an andere Stelle auftaucht, hat das Servo wohl ein Problem.


    Siro
    Geändert von Siro (22.12.2018 um 09:53 Uhr)

  4. #4
    HaWe
    Gast
    moin!
    Auf AVRs oder ARMs werden die ausgewiesenen pwm-Pins über eigene Interrupts gesteuert und daher eigentlich nie durch andere Interrupts gestört.
    Hier ntl nicht die "normalen" pwm-Befehle verwenden ( wie bei Arduino: analogWrite), sondern die auf Servo-Steuerung hin ausgelegten (bei Arduino: z.B. Servo.h, Servo::write(), damit kann ich hier bei mir 6 angeschlossene Servos meines Robotarms steuern )

    Beim Raspi gibt es zum Einen 2 ausgewiesene Hardware-Interrupt Pins, die ebenfalls völlig ungestört arbeiten (verwende ich persönlich überhaupt nicht; man braucht dazu auch root Rechte).
    Zusätzlich lässt sich aber zum Anderen jeder beliebige GPIO per Software-pwm ansprechen: Man kann dazu z.B. die C Wrapper Funktionen von pigpio oder wiringPi verwenden. Gordon Henderson, der Autor von wiringPi, schrieb einmal im Raspi.org Forum dazu, dass diese genauso gut in der Lage sind, pwm zu erzeugen, wie aufgesetzte oder angesteckte pwm-Platinen (wie z.B. PCA9685), und zwar nicht nur für 1 Pin allein, sondern auch für alle simultan.

    edit2: hier Python Code:
    https://learn.adafruit.com/adafruits...motor/software

    Ich selber habe es für 3 Servos schon problemfrei selber gemacht. Da der Raspi aber insgesamt recht wenige GPIOs ohne spezielle Sonderfunktionen hat (i2c, SPI, UART, 1-Wire,...), würde ich bei mehr als 3 Servos dennoch eher einen PCA9685 über I2C verwenden.

    Immer jedoch wichtig: für die Servos eine externe, leistungsfähige Stromquelle verwenden (ich verwende 7V 10A bei meinen 6 Servos).
    Dass Servos aber manchmal zittern, kann ich bei mir auch nicht immer verhindern.


    edit -
    PS, ich vergaß, du nutzt ja Python - aber wiringPi ist auch für Python verfügbar
    https://learn.adafruit.com/adafruits...motor/software
    Geändert von HaWe (22.12.2018 um 13:55 Uhr)

  5. #5
    HaWe
    Gast
    wenn du auch das oben von mir verlinkte Python-Beispiel (direkt an GPIOs) erfolgreich getestet hast, dann stimmt ja sicher alles, oder?
    https://learn.adafruit.com/adafruits...motor/software

    PS, deine Batterien schauen gut aus, die Leistung deines DC-Wandlers ist aber auch wichtig!
    Geändert von HaWe (23.12.2018 um 09:29 Uhr)

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.09.2017
    Beiträge
    52
    Feiertage durch, PCA9685 da und verbaut. Mit dem ersten lief das Ganze mehr oder weniger problemlos. Dank eines unachtsamen Kurzschlusses ist der jetzt aber mit Rauchverletzung entsorgt worden. Jetzt habe ich den zweiten zusammengebaut und an den RPi angeschlossen. Um allfällige Verkabelungsprobleme auszuschliessen, habe ich einen Servo direkt an den PCa9685 angeschlossen. Dieser ist mit dem RPi und dem DC-Wandler (übrigens max 5A bei 6V) verbunden. Mit dem gleichen Testskript (ausgeliefert mit der Treibersoftware) geht im Moment gar nichts. Kein hin und her bewegen, kein Zucken, nicht mal ein Brummen.
    Mit dem Voltmeter habe ich mal gemessen. Am Servo kommen 6V an. Interessanterweise höre ich aber kein Pfeifen, wenn ich die Verbindung mit dem Voltmeter prüfe. Beim Software-PWM gab es auf der Steuerleitung und dem Nullleiter jeweils ein schnelles Piep Piep Piep in der Geschwindigkeit der Frequenz. Jetzt nicht. Nun bin ich wieder gleich weit, weiss aber zumindest (hoffentlich), dass es kein Softwareproblem ist. Ideen? Braucht ihr Bilder vom Aufbau?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Es ist grundsätzlich nicht verkehrt, sich nochmals damit auseinanderzusetzen, indem z.B. alles aufgezeichnet wird, wie es vorher war, wie es jetzt war/ist. Oftmals hilft schon das bloße Reden über ein Problem, um auf neue Gedanken zu kommen, was noch falsch sein könnte. Ich denke es gibt sicher noch andere Mittel der Reflexion.

    Die Informationen die ich entnehmen kann sind:

    1. PCA9685 verbaut und funktionierte
    2. Kurzschluss verursacht, keine Funktion mehr
    3. einen zweiten PCA9685 zusammengebaut
    4. Servo jetzt direkt an PCA9685 angeschlossen, was vorher nicht so war
    5. jetzt keinerlei Reaktion mehr

    Frage ist auch, wannd er Kurzschluss entstand, ob andere Teile mit betroffen sind.

    MfG

  8. #8
    HaWe
    Gast
    Zitat Zitat von Chris1803 Beitrag anzeigen
    Feiertage durch, PCA9685 da und verbaut. Mit dem ersten lief das Ganze mehr oder weniger problemlos. Dank eines unachtsamen Kurzschlusses ist der jetzt aber mit Rauchverletzung entsorgt worden. Jetzt habe ich den zweiten zusammengebaut und an den RPi angeschlossen. Um allfällige Verkabelungsprobleme auszuschliessen, habe ich einen Servo direkt an den PCa9685 angeschlossen. Dieser ist mit dem RPi und dem DC-Wandler (übrigens max 5A bei 6V) verbunden. Mit dem gleichen Testskript (ausgeliefert mit der Treibersoftware) geht im Moment gar nichts. Kein hin und her bewegen, kein Zucken, nicht mal ein Brummen.
    Mit dem Voltmeter habe ich mal gemessen. Am Servo kommen 6V an. Interessanterweise höre ich aber kein Pfeifen, wenn ich die Verbindung mit dem Voltmeter prüfe. Beim Software-PWM gab es auf der Steuerleitung und dem Nullleiter jeweils ein schnelles Piep Piep Piep in der Geschwindigkeit der Frequenz. Jetzt nicht. Nun bin ich wieder gleich weit, weiss aber zumindest (hoffentlich), dass es kein Softwareproblem ist. Ideen? Braucht ihr Bilder vom Aufbau?
    was bedeutet "einen Servo direkt an den PCA9685 angeschlossen" ?
    Servo-pwm wird doch immer am PCA9685 (pwm) angeschlossen, und Servo-Vc/GND stammen von einer externen Spannungsquelle,
    und der PCA9685 bekommt immer seine Steuersignale vom µC/SoC
    - wie sollte es anders möglich sein?

Ähnliche Themen

  1. Anleitung alter Alphaluxx Empfänger verzweifelt gesucht ..
    Von PsiQ_unterwegs im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 06.12.2013, 09:44
  2. Biete Job Programmierer gesucht
    Von darkzone666 im Forum Jobs/Hilfen/Stellen - Gesuche und Angebote
    Antworten: 0
    Letzter Beitrag: 25.10.2011, 17:54
  3. C- Programmierer gesucht
    Von nonoboy im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.10.2008, 22:56
  4. Programmierer(in) gesucht
    Von ricoderrichter im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 24.03.2005, 22:17
  5. Programmierer Gesucht
    Von johnjudge im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.03.2005, 19:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress