Posts by Gnom

    Ja, das trifft die Sache ganz gut. Es sind mehr oder minder quarderförmige Objekte. Die Bewegungen sollen/müssen teilweise in der Fließbandbewegung stattfinden. Zm Wenden, also auf den Rücken legen sozusagen, greift eine Art Stab unter das Objekt und hebt es an, so dass es hochgeklappt wird und dann nach hinten umfällt. Dazu muss sich das Band gleichzeitig natürlich bewegen. Also Bildhafter: Ein Auto fährt auf Supermann zu - er hebt einfach den Bug an, bis sich das Auto nach hinten überschlägt und aufs Dach fällt.

    Bei der Drehung kann es sein, dass ich das Teil anhebe, drehe, gleichzeitig ein Stück weiter bewege und wieder an der Stelle aufs Band lege, wo es vorher lag (nur ist das Band inzwischen ein paar cm weiter gefahren).

    Die Bewegung an sich ist nicht das Problem. Es geht mehr drum, wie ich zu einer relativ variablen Bewegung des Bandes immer die anderen Bewegungen synchron halte. (Fährt das Auto schneller, muss Supermann seine Bewegungen auch entsprechend schneller machen.)

    Die Bewegungen werden je nach Größe der Teile immer anders sein. Ich muss sie also jeweils passend einstellen. Wo genau wird das Teil gegriffen, wie schnell gedreht, wo wieder abgelegt....

    Ich hab noch ein wenig nachgedacht und glaube, das einfachste ist, wenn ich die Bandbewegung in die Schritte des Steppers teile und alle anderen Bewegungen nach ihren Parametern einmal in eine Tabelle umrechne. Der Stepper wird ein paar Hundert Schritte pro Zyklus machen. Die Positionen aller anderen Antriebe könnte ich nach Eingabe/Änderung der Parameter einmal berechnen, in ein Array schreiben und bei jeder Änderung der Bandposition die anderen Antriebe entsprechend setzen. Da ich überwiegend Servos und Closed-Loop-Stepper einsetzen will, sollte das ohne Probleme klappen. Wo einfache Stepper sind, muss halt noch immer bei null mal an den Fixpunkt gefahren werden.

    Hallo!

    Ich möchte eine kleine Maschine bauen, die Teile über ein Fließband transportiert und einfeche Bearbeitungen macht - z. B. drehen, wenden, zur Seite schieben. (z. B. wird über eine Lichtschranke die Position des Teils erkannt - liegt es falschrum auf dem Band, muss es gedreht werden.) Auf den Fließband befinden sich mehrere Teile in gleichen Abständen. Sie werden sozusagen mit jedem Takt von einer Bearbeitungsstation zur nächsten weitergeschoben. Die Teile müssen zum Drehen/Wenden im richtigen Moment gegriffen werden.


    Das Fließband wird über einen echten Servomotor mit Servotreiber (von JMC) angetrieben. Die Position könnte ich also zu jeder Zeit bestimmen. Ich bin mir noch nicht sicher, ob die Geschwindigkeit innerhalb eines Vorschubtaktes konstant ist oder (wahrscheinlicher) langsam beschleunigt und wieder abbremst. Wahrscheinlich werde ich versuchen, dei Teile möglichst schnell vor zu schieben, dabei aber die Beschleunigung zu begrenzen und dann gibt es einen Moment Stillstand, wo das Teil z. B. gedreht werden kann. Vielleicht ist es aber auch besser, das Band durchgehend mit konstanter Geschwindigkeit laufen zu lassen. Es gibt Bewegungen, die gleichzeitig mit dem Vorschub stattfinden (z. B. beim Wenden). Es gibt auch unterschiedliche Teile, so das je nach dem Typ die Taktzeiten, Geschwindigkeiten, Beschleunigungen und die Bewegungen selbst variiert werden können/müssen. Die Geschwindigkeit kann auch insgesamt variiert werden - wenn die Maschine angelaufen ist und alles funktioniert, kann man sie hochdrehen. Dem Servo gebe ich also entsprechende Befehle oder Parameter, damit er beschleunigt und bremst usw., um das Fließband wie gewünscht anzutreiben.


    Die Motore (Servos SG90 oder Schrittmotore), die die Bewegungen der Teile machen, müssen nun synchron zur Fließbandbewegung gesteuert werden. Aber wie sage ich diesen Motoren, wann sie starten und wie schnell sie sich bewegen sollen, damit die Bewegung bei variierenden Geschwindigkeiten (Taktzeiten) oder Beschleunigungen des Bandes immer in der gleichen Weise synchron zur Fließbandbewegung ist.

    Ich vermute, es wird etwas hakelig, wenn ich die Zeit (sagen wir mal eine Sekunde pro Takt) in Abschnitte zerlege, die Positionen berechne und die Motore/Servos an die gewünschte Stelle steuere. Dann bekomme ich ruckelige Bewegungen oder ich muss sehr kurze Zeitintervalle nehmen, was sicher größeren Rechenaufwand bedeutet. Eigentlich sollen die Bewegungen ja fließend sein.


    Wie kriegt man das hin? Hat jemand Erfahrung, wie man so eine Synchronisierung von Motoren/Bewegungen generell macht?


    Letztlich will ich das mit einem µC steuern.

    Aber was ist denn als Ursache für das Problem zu vermuten. Dieser Servo zuckt ja derart stark hin und her - ich vermute da eher einen Programmfehler. Leider hat Rema nicht viel Systematisches zur Fehlereingrenzung gesagt.

    1. Ausbildungsjahr MA (Maschinen und Anlangen): Asynchronmotoren, die z.B. nur an 110 V/60 Hz betrieben werden, benötigen einen höheren Strom als bei 230V/50Hz. Das steht auf jedem Typenschild drauf. Wenn du das genau wissen willst, dann beschäftige dich mit Magnetfeldern und wie man diese berechnet.

    "[...] die z.B. nur an 110 V/60 Hz betrieben werden, benötigen einen höheren Strom als bei 230V/50Hz."

    ... um die Nennleistung zu erreichen, müsste man hier wohl ergänzen.


    Die Leistung ist Drehzahl x Drehmoment. Drehmoment ist proportional zum Strom. Bei kleinerer Spannung sinkt die Leistung und es stellt sich ein anderes Verhältnis aus aus Drehmoment und Drehzahl ein. Beide Werte werden geringer.

    Wir sprachen vom blockierten Motor. Der wird bei halber Spannung mit geringerer Kraft gegen die Blockade angehen, als bei normaler Spannung.


    Wollt ihr mich alle auf den Arm nehmen? Bei halber Spannung braucht der Motor einfach mehr Strom und bringt die gleiche Leistung? Klar, ich schließe statt 5 Volt einfach 3,3 Volt an und der Motor bewegt meine Fahrzeug oder was auch immer genauso schnell wie vorher indem er einfach mehr Strom braucht ...


    Es genügt schon, im Servodatenblatt die Bewegungszeit anzusehen - die ist bei 3,3 V länger als bei 5 V. Geringere Spannung, geringere Leistung, geringeres Drehmoment, geringere Geschwindigkteit.


    Ich ziehe logisches Denken dem Halbwissen aus dem 1. Ausbildungsjahr vor.

    Einen solcher Servo an der 3,3V SV des RPi ist vermutl. keine so gute Idee, das mag im Leerlauf vielleicht noch gehen aber unter Last kann dieser Servo bei 5V bis max. 650mA Strom ziehen. Mit 3,3V wird es dann noch mehr sein.

    Was Fliegenhals meinte, ist völlig eindeutig gesagt. Und man muss kein Physiker sein, um zu erkennen, dass der letzte Satz falsch ist.

    Ja, wenn man den Servo blockiert, kann er 650 mA ziehen. Ok, das wäre auch für den Pi sicher etwas heftig. Von blockieren war aber auch nicht die Rede.

    Falsch ist aber, dass er bei 3,3 V noch mehr Strom zieht. Das würde heißen, je geringer die Spannung, desto mehr Strom. Dann drehen wir im Geiste mal die Spannung runter.... 1 Volt, ... 0,1 Volt, ... 0,01 Volt... wie hoch soll denn der Strom werden? 1 Ampere? 50? 100? unendlich? Es ist offensichtlich, dass das nicht sein kann.

    Ich frag mich manchmal, ob hier absichtlich solcher Unsinn erzählt wird, um Leute zu verwirren, ob die Leute es nicht besser wissen oder ob es einfach nur Schusselfehler sind. Im letzten Fall würde ich aber die Reaktionen aller Beteiligeten nicht verstehen. Da könnte man auch sagen: "Ups, sorry, da lag ich daneben.. Und andere müssten abfällige Bemerkungen wie "Ich hoffe mal dass es dir gut geht." nicht mit Pokalen beehren. Das ist erbärmlich!


    Auch wenn es so scheint, dass der Servo den Pi überlasten könnte, sehe ich da im Normalfall keine Gefahr. Zum Serve habe ich nur vage Angaben von 100-300 mA im Normalbetrieb und eben die oben genannten 650 mA bei Blockieren gefunden. Die gelten aber für 5 V. Bei 3,3 V dürfen wir mal annehmen, dass es im Normalfall bei 200 mA bleibt. Der Spannungsregler auf dem Pi 3B+ (XML7704) liefert bei 3,3 V bis zu 1,5 A Dauerstrom und 2,5 A peak. Für einen Test des Servos an 3,3 V (und das war meine Anregung), sollte das ausreichend sein. Es gibt aber sicher noch genügend andere Einschränkungen, die es nicht empfehlenswert machen, einen Servo länger an 3,3 V zu betreiben. Das war auch nicht mein Vorschlag - ich sagte "Testaufbau". Das Teil dauerhaft an 3,3 V anzuschließen ist - da stimme ich völlig zu - vermutlich keine so gute Idee.

    :conf: Ich hoffe mal dass es dir gut geht.


    Zurück zum Thema: Vielleicht hast du ja andere Erfahrungen gemacht, aber die meisten RPi reagieren nicht besonders gut auf zu hohen Strombedarf von extern angeschlossenen Verbrauchern u. besonders nicht am 3,3V SV Pin. Das hat dann mit Sicherheit auch negative Folgen auf das Systemverhalten.

    Mag alles sein. Blockierne sollte man den Motor jedenfalls nicht.


    Danke, mir gehts gut. Ich frag mich nur, warum der Motor bei 3,3 V mehr Strom zeihen sollte als bei 5 V. Das müsstest du mir erklären. Vielleicht klappt das auch bei Glühbirnen. Wir nehmen 5 V statt 230 V und sie wird heller...

    Ich würde mal sagen, deine Aussage ist falsch. Der Motor wird bei 3,3 V NICHT mehr Strom zeihen als bei 5 V. Abe rman kann sowas ja mal behaupten, um irgendjemanden zu beeindrucken oder vermeintliche Gefahren heraufzubeschwören. Falsch ist es trotzdem.

    servos benötigen immer eine eigene stromversorgung, ende der diskussion :)

    ich würde wenn das zucken der servos stört, mal nach einem i2c servo adapter schauen.

    Toll, dass endlich mal einer die Eier in der Hose hat, anderen zu sagen, wann sie gefälligst eine Diskussion zu beenden haben! Und die fundierte Begründung... Respekt! Solche Experten brauchen wir hier!

    Einen solcher Servo an der 3,3V SV des RPi ist vermutl. keine so gute Idee, das mag im Leerlauf vielleicht noch gehen aber unter Last kann dieser Servo bei 5V bis max. 650mA Strom ziehen. Mit 3,3V wird es dann noch mehr sein.

    Und bei 1,0 V noch viel, viel mehr... Am besten legst du 0 Volt an, dann wird der Strom unendlich. Du hast das Perpetuum Mobile erfunden. Herzlichen Glückwunsch!

    Wie sieht denn dein Programm aus? Ich vermute, dass der Fehler eher dort liegt.


    Versuch doch erst mal rauszufinden, ob es an den Servos oder am Programm liegt. Was passiert denn, wenn du einen einfachen Testaufbau mit einem ganz simplen Testprogramm machst?


    Du versorgst die Servos mit 5V, deine Steuerspannung vom GPIO ist aber nur 3,3 Volt - vielleicht hat das Einfluss. Die kleinen Servos funktionieren auch mit 3,3 Volt. Schließ mal einen Servo an 3,3 V an. Die Spannungsversorgung des Pi müsste für eine Servo genügend Strom liefern können.

    Oder schalte einen Transistor als Treiber vor den Pulseingang des Servos, so dass du ihn mit 5V ansteuerst.

    Das sieht aber sehr ungewöhnlich aus. Trifft das nur einen Servo oder hast du das Problem bei allen?

    Ein Widerstand wird da gar nichts bringen.

    Welche Frequenz hat dein PWM -Signal?

    Der Servo hat einen Tiefpassfilter, der die Spannung des PWM-Eingangssignals glättet. Wenn deine Signalfrequenz niedrig ist, fällt die Glättung schlechter aus bzw. wirkt gar nicht richtig. Das Ruckeln in deinem Video sieht nach einer Frequenz von vielleicht 10-20 Hz aus. Liegt vielleicht dein PWM-Signal in diesem Bereich, statt bei >=50 Hz liegt?

    Aber das ist so extrem, dass ich eher auf einen defekten Servo tippe. Im Servo ist ein Potentiometer, wenn das einen Schaden hat, kann das schon die Ursache sein.

    Wenn du das Problem bei mehreren Servos hast, vermute ich eher einen Fehler in der Software.

    0x80 ist ein Bitmuster, nämlich 1000000

    Im Code sind die Muster für die 7-Segment-Zeichen von 0 bis F hinterlegt, z. B.für die "1" 0x06 = 00000110


    Der Code schiebt nun in einer Schleife nacheinander die Bits nach links und führt jeweils ein bitweises UND mit dem Bitmuster oben aus (erster Schritt noch ohne Verschiebung).

    10000000

    & 00000110 (nicht verschoben)

    = 00000000 = 0 => LED-Segemnt 7 aus


    10000000

    & 00001100 (eins nach links verschoben)

    = 00000000 = 0 => LED-Segemnt 6 aus


    ...


    im sechsten Schritt sind die Bits so weit nach links verschoben, dass es erstmals ein "Ein" gibt

    10000000

    & 11000000 (fünf nach links verschoben)

    = 10000000 = >0 => LED-Segemnt 2 ein.


    Wenn der Wert 00000000 = 0 = LOW (FALSE) ist, wird der GPIO ausgeschaltet. Jeder andere Wert (nicht nur 1, sondern jede andere Zahl) entspricht HIGH (TRUE) und schaltet den GPIO ein. Ob das ein Dezimal-, Hexadezimal- oder Binärwert ist, ist dabei egal.


    Diese ein/aus-Signale werden also nacheinander an das Schieberegister geschickt und stellen dann an den Ausgängen des Schieberegisters (Q7-Q0) die entsprechende Ziffer auf dem 7-Segment-Display dar.

    Was für Sensoren sind das? Liefern die nur on/off-Signale (Türkontakte, Lichtschranken, ...) oder auch analoge Werte (Temperaturwiderstände) oder digitale Daten (Temperatur, Feuchtesensoren und ähnliches)?

    - Bei on/off ist ein Optokoppler praktisch. Transistor geht auch.

    - Bei analogen Werten bietet sich ein Spannungsteiler an.

    - Bei digitalen Daten ist ein Levelshifter das Mittel der Wahl (letztlich auch nur Transistoren).

    Relais würd ich nur in besonderen Fällen einsetzen. Aufwändig wegen der zusätzlichen Stromversorgung der Spulen, relativ groß, teuer, mechanisch anfällig, langsam, ...

    Oben hast du 3 Wh angegeben für eine Zelle - das sind nicht 1600 mAh, sondern 2500. Und dann kommen wieder 2500/600 = 4,167 Stunden raus und nicht eine Stunde.


    Und das ändert auch nichts dran, dass deine Rechnung oben schlicht und einfach falsch ist, weil die Spannung in Wh bereits eingerechnet ist.

    Du kannst noch hundertmal dagegen argumentieren. Falsch ist falsch!

    vielleicht sollte man, weil es schon so spät ist und man nicht mehr richtig lesen kann, nichts mehr schreiben ….

    Und wenn man schon so eine vom Stapel lässt wie "Spannung spielt hier keine Rolle":

    USB ist ziemlich genau was die Spannung angeht. Eine Überspannung ist dort nicht wirklich gut. Batterien tendieren zu Überspannung wenn sie nicht richtig geregelt sind. D.h. Bei benötigten 5 V brauchst du mindestens 5 Batterien, d.h. Selbst wenn man die Überspannung mal außer Acht lässt brauchst du irgendwas was die 6V auf 5 V regelt und damit treten meist erhebliche Verluste auf. Deswegen haben ja fast alle Powerbanks nie die angegebenen Wh, weil sie von 3,7 auf 5 V hochregeln müssen.

    Ich habe nie was anderes behauptet. Aber deine Darstellung, bei 3 Wh und 1,2 Volt braucht man 4 Akkus und hat dann immer noch 3 Wh ist FALSCH. Man hat bei 4 Akkus natürlich 12 Wh und der Pi läuft damit nicht 60 Minuten, sondern 4 Stunden.

    Und bei mir steht "theoretisch", weil genau die Wandlerverluste nicht berücksichtigt sind.

    So, jetzt darfst du mir deinen Vorwurf, ich könne nicht lesen, noch mal genauer darlegen.

    Wenn man sich dabei bedenkt:

    Pi4 zieht in Ruhe ca. 3W.

    niMh Akkus haben wohl laut Wikipedia ca. 1,2 Wh (AAA), 3Wh (AA).

    Man bräuchte schon mal 5 in Reihe um die 5,1 V hinzubekommene und dann hat man immer nur noch 1,2 Wh (3 Wh), also etwas mehr als 20 Min (60 Min).

    Wenn man nicht so genau weiß, was man gerade erzählt, sollte man vielleicht einfach mal nichts sagen.
    Wenn eine Zelle 3 Wh hat und der Pi 3 W braucht, dann hält eine Zelle eine Stunde - die Spannung spielt hier keine Rolle, weil sie bei der Leistungsgröße Watt (V x A) schon eingerechnet ist.
    Mit einer 5V-10.000mAh-Powerbank kannst du einen Pi im Leerlauf theoretisch um die 15 Stunden betreiben. Fragt sich nur, was gauntlet unter einem "gewissen Zeitraum" versteht. Genauer war die Angabe wohl nicht möglich...

    Was soll denn dein "Systemmonitor" monitoren? Die Gehäusetemperatur? Hm, dafür ist ein Pi am 100-Watt-Anschluss völlig unterdimensioniert. Du solltest in deinen PC besser einen Quad-CPU-80-Kern-Xeon-Rechner fürs Monitoring einbauen. 8o


    Scherz beiseite - einen "Klein-PC" in einen PC einzubauen, um irgendwas zu monitoren... das ist doch wahrscheinlich überdimensioniert.

    Dafür genügt gewöhnlich ein Mikrocontroller - ein Arduino zum Beispiel oder wenn die Anforderungen weiter gehen, ein ESP.

    UDP mag einen Ticken schneller sein - aber im Fall von Sensordaten... hm. Wäre sicher nicht besonders nützlich, wenn falsche Pakete ankommen. Bevor du einen Programmteil schreibst, der prüft, ob die übertragenen Daten überhaupt korrekt sind, nimm lieber gleich TCP. Wenn dein Netzwerk mal länger als 20 ms braucht, wird dir UDP auch nicht helfen. Außerdem dürfte der Zeitunterschied zwischen den beiden bei 6000 Bytes kaum nennenswert sein.