closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Servo-Treiber



Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Servo-Treiber  -  Posted: 15.12.2019 - 15:06   -  
Hallo @ all,

falls schon mal einer von euch darüber gestolpert ist: ein Servo-(PWM-)Treiber via I²C/TWI.
Verwendet wird der Baustein PCA9685 mit 16 Ausgängen und 12-Bit Auflösung. Da dieser IC 6(!) Address-Pins hat, kann man damit also theoretisch (2^6)*16=1024 Servos ansteuern.
Der PCA9685 erzeugt die PWM-Frequenz vollkommen selbständig und der µC muß nur die Werte übergeben. Natürlich kann man damit auch LEDs ansteuern und hat dann die gesamte PWM-Auflösung von 12-Bit zur Verfügung.

Passende Boards gibt's bei div. Online-Aktionshäusern/-Händlern ab ca. 4€.

Die Auflösung für ein Servo mit 50Hz (=20ms Periodendauer) im Bereich 1-2ms On-Zeit liegt bei 205. D.h. 205=1ms=Servo-Null und 410=2ms=Servo-Maximum. Viele Servos arbeiten allerdings mit einem erweiterten Bereich von z.B. 0.5-2.5ms On-Zeit und damit mit einem höheren Werte-Bereich. Man könnte auch die Frequenz auf z.B. 60Hz erhöhen (wenn das Servo mitspielt) und auch dann wäre der Werte-Bereich höher.

Gruss
Harry

PS: Kein vollständiges Programm, nur das was man dazu benötigt ;)
PS, die 2.: Falls einer von euch eine Quelle für den IC alleine hat, wäre ich an ein paar davon interessiert :).

[Edit]Oben war ein Fehler drin ;)
You must be logged in or your permissions are to low to see this Attachment(s).
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 15.12.2019 - 22:39 by Harry.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 16.12.2019 - 09:38   -  
Hab noch 3 Bilder:
- PWM_Lo.jpg: Impulszeit 0.5ms
- PWM_Hi.jpg: Impulszeit 2.5ms

..... und ein neues Display, basierend auf 8 Stück MAX7219 und 8 Stück 8x8 LED-Punktmatrixmodule (20.2mm hoch) und als grafisches Display in AVRCo eingebunden. Den GraphIOS konnte ich leider nicht verwenden (ist wirklich komplett leer) und mußte ein eigenes Display-Refresh dafür schreiben. Die Platine stammt nicht von mir ;).

Ich teste den Servo-Controller mit Servos vom Typ MG996R. Drehbereich ca. 190°, PWM-Bereich für Vollausschlag links-rechts 103-470 bei 50Hz.

..... das verwendete Oszi hat seinen Namen nicht verdient :D .... so groß, wie ein kleines Smartphone, nicht besonders genau, aber hervorragend geeignet um im Wohnzimmer (da programmiere ich zu 99.9%) mal schnell eine Kurve aufzuzeichnen. Nennt sich DSO Nano (erste Generation).
You must be logged in or your permissions are to low to see this Attachment(s).
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 16.12.2019 - 09:42 by Harry.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 60
Posts: 49
Registered: 01 / 2018
Private message
Subject: PCA8596.............  -  Posted: 04.01.2020 - 16:24   -  
Hallo Harry,
ich weiss nicht ob das mit deinem PCA noch aktuell ist, ich arbeite nur mehr mit diesem IC - wenn man mit LED-Bel. arbeitet ist alles Andere murx! Treppen! < 10bit und Freq. < 1KHz! - (14bit ~1700Hz ist ok!! für Augen! und Wohlbefinden!)
Ich bestelle seit etwa 2,57J alles(ausschliesslich!) bei Alibaba(ALIexpress) um dir die Unterschiede zu den hier verlangten Preisen zu verdeutlichen
habe ich dir einige jpg in dein Postfach gelegt. Im Übrigen das Uhren IC(hochgenau) und der DC/DC Wandler(super stabil 170ua!!) sind der Brüller
Ich habe alle meine Linearregler entsorgt! (grober Unfug diese einzusetzen produz. nur Wärme und Beschaltung eine Bastelei)
Interessant ist auch das 328p mini Modul komplett bestückt(und getestet!) für ~2€ mein Standart Modul läuft in 327 Geräten ohne jegl. Problem!


Gruss
Toni

Ich benötigte HM-Bohrer - hier bekomme ich nicht einmal 1! (Fantasie Preise) - Qualität(super) vor 2J schon mal 1kg gekauft
You must be logged in or your permissions are to low to see this Attachment(s).
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 04.01.2020 - 17:24   -  
Hallo Toni,

beim Treiber oben ging es darum, daß der PCA9685 das PWM-Signal für Servos selber erzeugt und somit der µC nicht belastet wird.

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 04.01.2020 - 17:24 by Harry.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 49
Posts: 1122
Registered: 02 / 2009
Homepage Private message
Subject: Re: Servo-Treiber  -  Posted: 04.01.2020 - 20:55   -  
Quote by tbegle

...
Ich bestelle seit etwa 2,57J alles(ausschliesslich!) bei Alibaba(ALIexpress) um dir die Unterschiede zu den hier verlangten Preisen zu verdeutlichen
habe ich dir einige jpg in dein Postfach gelegt. Im Übrigen das Uhren IC(hochgenau) und der DC/DC Wandler(super stabil 170ua!!) sind der Brüller
Ich hab alle meine Linearregler entsorgt! (grober Unfug diese einzusetzen produz. nur Wärme und Beschaltuang eine Bastelei)


Hallo Toni,

für ein Heim- und Hobby-Projekt mag das ja alles ok sein.

Ich selbst nutze seit mehr als 10 Jahren nur noch Schaltregler wegen der geringen Verluste, aber der Aufbau und Filter für ein EMV gerechtes System ist um ein vielfaches höher als bei einem Linearregler.
Aber auch für Linearregler gibt es oft sehr gute Gründe z.B. "EMV". Du bekommst mit einem Linearregler so gut wie keine Probleme mit Schaltstörungen auf dem System. Und man kann diese extrem klein aufbauen und befiltern.

Ich würde für meine Projekte NIE irgendwelchen zusammengebauten Bastelteile aus Alibaba kaufen und einsetzen. Was ist wenn der Lieferant diese fertigen Module nicht mehr herstellt, ändert usw.?

In meinen Projekten ist die Beständigkeit und Lieferverfügbarkeit wichtig. Angenommen du schaffst es mit einem dieser Regler die EMV-Prüfung zu bestehen und jetzt ändert der Hersteller dieses Modul.
Dann ist Deine EMV-Prüfung ungültig und Du fängst von vorne an.

Wenn Du allerdings Dein Design so aufbaust, dass die einzelnen Bauteile von verschiedenen Herstellern lieferbar sind, kannst Du einfach bei Lieferproblemen diese einzeln ändern und Deine EMV-Prüfung ist weiterhin gültig.

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 1-times. Last edit: 04.01.2020 - 21:12 by pvs-deck.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 60
Posts: 49
Registered: 01 / 2018
Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 11:48   -  
Hi Thorsten,

klar, wenn du prinzipiell Alibaba als Lieferant ablehnst ist es ok.
Bedenke aber, fast alles was du an hast oder kaufst stammt (auch indirekt) aus China

Wir haben in den USA für HASBRO 3J Spielzeuge erfunden!
Die Entwicklung war bei HASBRO die Fertigung (natürlich) in China, also keine USA Ware
Im Übrigen der Schaltregler hat ausgezeichnete Parameter (mit Scope getestet)
Vom Nano Board habe ich mir vorsichtshalber 1kg gekauft :xmas:

Gruss
Toni
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 49
Posts: 1122
Registered: 02 / 2009
Homepage Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 16:30   -  
Hallo Toni,

wenn das doch nur so einfach wäre "..mit Scope getestet.."

Ohne Prüfkammer und Messgeräte für einige Tausend EUR misst Du alles nur nicht mal ansatzweise die Probleme die mit einem Schaltregler aufkommen.

Gestrahlte Störungen kannst Du ohne passende Kammer, Antennen und Messgeräte vergessen, Leitungsgebundene Störungen bekommst Du nur mit passenden Analyser hin. Ein Scope reicht da nur für die unteren Zonen. Aber die Probleme fangen leider Jenseits der normalen Scopes an ;-)

In den Grafiken siehst Du die typischen Probleme eines Schaltreglers und bei diesen Messungen war das Layout schon sehr gut angepasst und die Filterung ebenfalls. Deswegen hatte nicht mehr viel gefehlt. Da ich einen zusätzlichen Filter vorgesehen habe und diesen dann beim EMV-Labor bestückt habe, konnten wir den Test positiv beenden.

Und ich habe die Schaltfrequenz extra niedrig bei rund 340khz eingestellt, höher hätte ich noch mehr probleme bekommen.

Thorsten
You must be logged in or your permissions are to low to see this Attachment(s).
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1654
Registered: 02 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 17:23   -  
super Thorsten !
Das erklärt, warum LEDs mit "Vorschalt Hardware" im Auto den CAN-Bus so empfindlich stören können. Plötzlich spinnt das Radio oder sonstwas.
Gunter
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
This post has been edited 1-times. Last edit: 26.01.2020 - 18:09 by Gunter.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 49
Posts: 1122
Registered: 02 / 2009
Homepage Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 18:41   -  
Quote by Gunter

super Thorsten !
Das erklärt, warum LEDs mit "Vorschalt Hardware" im Auto den CAN-Bus so empfindlich stören können. Plötzlich spinnt das Radio oder sonstwas.
Gunter

Na hoffentlich funktioniert dann noch die Bremse und der Airbag springt nicht ohne Unfall an :-D

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1654
Registered: 02 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 18:44   -  
das weiss ich auch nur vom HörenSagen.
Der Mann erschien mir aber recht professionell.
Ich selber setze sowas nicht ein.
Gunter
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 26.01.2020 - 18:45   -  
Heeeeeeee ihr müllt den ganzen schönen Thread zu :D :D :D

Harry

..... vor allem weil ich nen Weg gefunden hab, die Auflösung des Servos mit dem PCA9685 auf 800 oder 1600 Schritte zu erhöhen .... ok ok die Überprüfung steht noch aus ;)
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 29.03.2020 - 13:59   -  
Ich habe mir jetzt ein Servoboard mit dem PCA9685 layoutet, allerdings befindet sich auf diesem nicht nur dieser IC, sondern insgesamt 17 (aber nur ein PCA). Ziel war es, die Auflösung des Servosignals zu erhöhen. Normalerweise beträgt diese bei 50Hz und 12 bit 20ms/4096=4.88us und somit nur 205 Stufen bei 1-2ms On-Zeit des Signals.
Bei meinem Board ist jedem der Ausgänge ein Monoflop mit ca. 15ms nachgeschaltet. Dieses wird mit der fallenden Flanke des PCA-Sgnals getriggert und über ein And-Gate werden für 15ms weitere Impulse blockiert. Die Frequenz des PCA kann somit auf 250Hz und die Auflösung auf 1025 Schritte erhöht werden.

Theoretisch (werde ich noch testen) sollte es noch einfacher gehen: Das PCA-Signal des Kanal 0 triggert ein zweistufiges Monoflop mit 2.5 und 15ms und Stufe 2 sperrt dann über den /OE den PCA und somit alle 16 Ausgänge komplett. Das sollte als kleine Zusatzschaltung dann auch zusammen mit den käuflichen Boards funktionieren.

Oszibild:
- Kanal 1: Ausgangssignal des PCA
- Kanal 2: Ausgangssignal zum Servo
- Kanal 3: Ausgang Q des Monoflops
You must be logged in or your permissions are to low to see this Attachment(s).
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 09.06.2020 - 14:23   -  
Ich habe jetzt mal die Software etwas verbessert:
- die Konfigurationswerte des PCA9685 werden berechnet
- die Servoauflösung wird immer auf 1000 Schritte hoch gerechnet

Code

Const                                            // Konstanten
  _PCAFrequency   : Float = 25000000;            // PCA9685-Frequenz; bei intern 25MHz
  _ServoMinTime   : Float = 0.800;               // in Milli-Sekunden; normal 1-2ms
  _ServoMaxTime   : Float = 2.200;               // in Milli-Sekunden
  _ServoRange     : Float = 1000;                // Bewegungsbereich 1-1000
                                                 //    1 bei _ServoMinTime
                                                 // 1000 bei _ServoMaxTime

Var                                              // Variablen
  _PCAResolution   : Float;                      // Auflösung 1/f/4096
  _PCAMinValue     : Float;                      // PCA min.Wert bei ServoMinTime
  _PCAMaxValue     : Float;                      // PCA max.Wert bei ServoMaxTime
  _PCARange        : Float;                      // PCA-Differenz

  PCA9685_OE[@PortC,7]  : Bit;                   // /OE Servo-Controller
  PCATest               : Byte;
  SHi, SLo              : Word;                  // Servo Hi & Lo
  Servo                 : Array[0..3] of Byte;   // Lo_on, Hi_on, Lo_off, Hi_off

  Transmit         : Boolean;                    // Fehlervariable
  Sequenzauswahl   : Byte;                       // 0..15 --> div. Servo-Tests


{ Calculation of the registry values of the servo output                       }
{   PWM-Frequency: Register $FE prescaler for PWM output frequency             }
{                  prescale-value = Round(25000000/(4096*f))-1                 }
{                  e.g. 50Hz --> (25000000/(4096*50Hz))-1 = 121                }
{                                                                              }
{   PWM-on-time:   Register $06-$09 output0, Register $0A-$0D output1, .....   }
{                  Register $FA-$FD all output                                 }
{                  t=1/f                e.g. t=1/50Hz=0.02s                    }
{                  resolution=t/4096    e.g. 0.02s/4096=0.0000048828125s       }
{                  first two values=0 --> start-value lo/hi-Byte               }
{                  value 3&4          --> stop-value lo/hi-Byte                }
{                                         stop-value=on-time*(4096/t)          }
{                  e.g. 1.8ms: stop-value=0.0018s/(0.02s/4096)=368             }
{                  values for on-time 1-2ms @ 50Hz --> 205-410                 }
{                                                                              }
{   Note:          An external clock would be more precise!                    }
{                  enable external clock: TWIOut(PCA9685_Ad,$00,%00110001);    }
{                                         TWIOut(PCA9685_Ad,$00,%01110001);    }
{                  This bit (6) is a ‘sticky bit’. It cannot be cleared by     }
{                  writing a logic 0 to it. The EXTCLK bit can only be cleared }
{                  by a power cycle or software reset.                         }
Function Init_PCA9685(Freq:Float):Boolean;            // Frequency; range 24-1526Hz
  Var PCA             : Boolean;
      PCAPrescFloat   : Float;
      PCAPrescale     : Byte;
  Begin
    If Freq in [24..1526]
      then
        _PCAResolution:=1000000/(Freq*4096);          // 1 Bit corresponds x µSeconds
                                                      // register value PCA minimum --> Integer!
        _PCAMinValue:=Float(Round(_ServoMinTime/_PCAResolution*1000));
                                                      // register value PCA maximum --> Integer!
        _PCAMaxValue:=Float(Round(_ServoMaxTime/_PCAResolution*1000));
        _PCARange:=_PCAMaxValue-_PCAMinValue;         // difference max-min
                                                      // PCA-divider =(25000000/(4096*f))-1
        PCAPrescFloat:=Float(Round((_PCAFrequency/(4096*Freq))-1));
        PCAPrescale:=Lo(Trunc(PCAPrescFloat));        // calculated value --> register value
        
        PCA:=TWIOut(PCA9685_Ad,$00,%00110001);        // mode reg.1: Bit7: restart disabled
                                                      //                6: use internal clock
                                                      //                5: register auto-increment
                                                      //                4: sleep mode enabled
                                                      //                3: does not respond to I2C-bus subaddress 1
                                                      //                2: does not respond to I2C-bus subaddress 2
                                                      //                1: does not respond to I2C-bus subaddress 3
                                                      //                0: responds to LED all call I2C-bus address
        mDelay(10);

        PCA:=TWIOut(PCA9685_Ad,$FE,PCAPrescale);      // prescale-register: 50Hz=121=$79 | 60Hz=100=$65 |100Hz=61=$3C
                                                      // value=(25000000/(4096*f))-1
        mDelay(10);

        PCA:=TWIOut(PCA9685_Ad,$00,%00100001);        // mode reg.1: Bit7: restart disabled
                                                      //                6: use internal clock
                                                      //                5: register auto-increment
                                                      //                4: normal mode enabled
                                                      //                3: does not respond to I2C-bus subaddress 1
                                                      //                2: does not respond to I2C-bus subaddress 2
                                                      //                1: does not respond to I2C-bus subaddress 3
                                                      //                0: responds to LED all call I2C-bus address
        mDelay(10);

        PCA:=TWIOut(PCA9685_Ad,$01,%00001100);        // mode reg.2: Bit 7-5: reserved
                                                      //                   4: output logic state not inverted
                                                      //                   3: outputs change on ACK
                                                      //                   2: LED outputs are configured with totem pole structure
                                                      //                 1-0: when OE=1 LEDn = 0
        mDelay(10);

        PCA9685_OE:=0;
        Servo[0]:=0;                                  // PCA-register start value 0
        Servo[1]:=0;                                  // PCA-register start value 1
      else
        PCA:=false;
      EndIf;
    Return(PCA);
  End Init_PCA9685;
  


Function ServoPos(ServoNr:Byte;Position:Integer):Boolean;  // Procedure moves servo to position
                                                           // ServoNr port 0-15; >15=all ports
                                                           // Position value in 1.._ServoRange
  Var ServoPos   : Integer;
      RetVal     : Boolean;
  Begin
    If Position in [1..Trunc(_ServoRange)]
      then
        ServoPos:=Trunc(((Float(Position)/_ServoRange)*_PCARange)+_PCAMinValue);
        Servo[2]:=Lo(ServoPos);
        Servo[3]:=Hi(ServoPos);
        If ServoNr in [0..15]
          then
            RetVal:=TWIOut(PCA9685_Ad,$06+(4*ServoNr),Servo);   // $06 --> port 0
          else
            RetVal:=TWIOut(PCA9685_Ad,$FA,Servo);          // $FA-$FD --> all call/ports address
          EndIf;
      else
        RetVal:=false;
      EndIf;
    Return(RetVal);
  End ServoPos;
  
                                                 // Procedure without exit! Only a test ;-)
                                                 // Moves servo continuously from MinPos to MaxPos and
                                                 // back with step-value in time interval (in ms)
Procedure MoveServo(ServoNr:Byte;MinPos,MaxPos,Step:Integer;Interval:Word);
  Var ActPos : Integer;
      FWD    : Boolean;
      Works  : Boolean;
  Begin
    If ((MinPos in [1.._ServoRange]) and (MaxPos in [1.._ServoRange]))
      then
        FWD:=true;
        ActPos:=MinPos;
        Loop
          ServoPos(ServoNr,ActPos);
          If FWD=true
            then
              FWD:=IncToLim(ActPos,_ServoRange,Step);
            else
              FWD:=not DecToLim(ActPos,1,Step);
            EndIf;
          mDelay(Interval);
          EndLoop;
      EndIf;
  End MoveServo;
{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}
Begin
  EnableInts;
  InitPorts;
  mDelay(1000);
  Sequenzauswahl:=PinD and %00001111;          // nur die unteren 4 Bits des Ports sind relevant (DIP-Schalter)
                                               
  Case Sequenzauswahl of
      0..3:Transmit:=Init_PCA9685(50);                     // 50Hz
          |
      4..7:Transmit:=Init_PCA9685(150);                    // 150Hz
          |
     8..11:Transmit:=Init_PCA9685(200);                    // 200Hz
          |
    12..15:Transmit:=Init_PCA9685(250);                    // 250Hz
          |
    EndCase;

  Case (Sequenzauswahl mod 4) of
    0:ServoPos($FF,1);                                     // Min-Postition
     |
    1:ServoPos($FF,1000);                                  // Max-Position
     |
    2:MoveServo($FF,1,1000,100,500);                       // Min zu Max alle 500ms 1/10 der Position
     |
    3:MoveServo($FF,1,1000,999,1000);                     // Min zu Max jede Sekunde wechselnd
     |
    EndCase;


Was noch fehlt:
- Konfiguration des PCA mit externem Oszillator (viel genauer!)
- Verbesserung der Auflösung durch 2 Monoflops am PCA (hab ich oben mal erwähnt)

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 09.06.2020 - 14:26 by Harry.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1660
Registered: 03 / 2003
Private message
Subject: Re: Servo-Treiber  -  Posted: 30.06.2020 - 19:18   -  
Mein vermutlich letzter Post in diesem Thread ...... Ich habe die schon erwähnte und einfachere Schaltung aufgebaut und getestet und sie funktioniert. Der PCA triggert mit seinem 1. Port die erste Stufe eines 2-stufigen Monoflops. Diese erste Stufe mit 2.5ms triggert nach Ablauf die 2. Stufe mit 17ms und diese sperrt über den OE den PCA9685. Theoretisch und wenn man beide Monoflops genau eingestellt hat, sollte es möglich sein, den PCA auf mindestens 500Hz zu konfigurieren und hat somit >2000 Stufen für die Servobewegung.

Gruss
Harry
You must be logged in or your permissions are to low to see this Attachment(s).
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 01.07.2020 - 17:51 by Harry.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 05.08.2020 - 11:55