Go Down

Topic: Frage zum PCA 9685 12-bit PWMshield (Read 2130 times) previous topic - next topic

1to8modelmaker

Dec 01, 2018, 01:51 pm Last Edit: Dec 01, 2018, 05:06 pm by 1to8modelmaker
Moin,ich habe folgendes Problem.In meinem Besitz befinden sich 2 16-Kanal-12-Bit-Brett PWM/Servotreiber-I2C-Schnittstelle PCA9685-Modul für Arduino.Bei diesem Modulen möchte ich insgesamt 22 Servos mit 11 Kanälen betreiben.Leider habe ich bisher nur die Umschaltung von a nach B hinbekommen bei einem Kanaleingang.Die bisherigen Versuche mit mehr als einem Kanal hat leider nicht geklappt.Den ich brauche insgesamt aber 11 Kanäle und nicht 1 Kanal.Meine bisheriges Anwesendsein war nur als Gast im stillem mitlesen.

Mit freundlichem Gruß
1to8modelmaker
Code: [Select]

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <Servo.h>

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

int ch1;

int umschalterPin = 2; // umschalten zwischen a und b an Pin 2 angeschlossen
int umschalten = 0;

Servo myservo;
Servo myservob;

#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2250 //ueber diese Variable den Weg anpassen
#define DEFAULT_PULSE_WIDTH   1500
#define FREQUENCY             50

uint8_t servonum = 0;

const int LED1 = 13; //LEDkennung zwischen a und b

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(5, INPUT);
  pinMode(12,INPUT);
 
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");
  pwm1.begin();
  pwm1.setPWMFreq(FREQUENCY);
  pwm2.begin();
  pwm2.setPWMFreq(FREQUENCY);


}
int pulseWidth(int angle)

{
  int pulse_wide, analog_value;
  pulse_wide   = map(ch1, 10, 130, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); // die 10 und die 130 sind fuer die Weganpassung
  analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 3950); // ueber die 3.Variable den Weg anpassen
 
  Serial.println(analog_value);
  return analog_value;
}

void loop() {

  ch1 = pulseIn(12, HIGH, 25000);
 
  umschalten = digitalRead(umschalterPin);
  if (umschalten == LOW) {
    digitalWrite(LED1, LOW);

    ch1 = map(ch1, 1023, 2003, 0, 120);
    pwm1.setPWM(0, 1, pulseWidth(ch1));
   
    delay(50);
  }

    if (umschalten == HIGH){
     digitalWrite(LED1,HIGH);

   ch1 = map(ch1,1023,2003,0,120);
   pwm2.setPWM(0,2,pulseWidth(ch1));
   
   delay(50);
    }}


 

postmaster-ino

Hi

Und nun Mal so erklärt, daß ein NICHT-Modellbauer Das ebenfalls fressen könnte?
Du willst 22 Servos betreiben, wovon einige zusammen fahren sollen, da Du 'nur' 11+1 Gruppen hast.

Was ist diese A/B-Umschaltung?

Was hast Du?
Was willst Du?
Was bekommst Du?

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

1to8modelmaker

Moin Postmaster, also das A nach B ist das Umschalten zwischen den einzelnen Gruppe der 11 Servos.Diese Umschaltung habe ich zum laufen bekommen.Aber ich möchte das ganze auf 11 Kanal aufrüsten.Bisher habe ich aber nur 1 Kanal zum laufen bekommen.Das heißt beiden Shielden das das Servo 0 läuft.Ich möchte aber das ganze bis zur Servonummer 10 haben. Dadurch kann ich dann pro Shield 11 Servos steuern. Das heißt pro Servonummer 1 Kanal.Aber auf beiden Shielden getrennt durch die Umschaltung.
Mit freundlichem Gruß
1to8modelmaker

postmaster-ino

Hi

Dann wirst Du noch irgendwoher die Nummer des Servo mitgeben müssen, Welcher nun verstellt werden soll.
Denke, Das wird hier die Null sein?
Worin der Unterschied zwischen beiden Ansteuerungen besteht (also die 2.te Zahl), ist mir nicht bekannt.
Da Du schreibst, daß an beiden Shields das erste Servo verfährt, wird die Servo-Nummer wohl jeweils die Null sein.
Code: [Select]
pwm2.setPWM(0,2,pulseWidth(ch1));

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...


uwefed

Ich verstehe die Aufgabenstellung nicht.
Quote
möchte ich insgesamt 22 Servos mit 11 Kanälen betreiben
ergibt für mich keinen Sinn.

Grüße Uwe

postmaster-ino

... müssten auch eher 11+1 Kanäle sein, damit man zwischen den Bänken umschalten kann ...
... leider ist der TO etwas wortkarg, was die Sache nicht wirklich beschleunigt ...
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

1to8modelmaker

Moin Uwe,ich möchte diese Servos an 2 Shielden zu jeweils 11 Stück mit jeweils 11 Kanälen über eine Umschaltung betreiben.Da ich das ganze für 2 Großmodelle im Maßstab 1:8 brauche

postmaster-ino

Hi

Ok - Salami-Taktik - immer nur eine Frage pro Post, vll. gibt's dann sogar eine Antwort dazu zurück :smiley-confuse:

WIE bekommst Du die Informationen der 11/22 Servos zum Arduino?

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

1to8modelmaker

Die Umschaltung wird über einen Kanalmultiplexer ( 8 Umschalter mit Mittelstellung [zusätzliches Nauticmodul in der Fernsteuerung])gemacht.

1to8modelmaker

#10
Dec 01, 2018, 08:33 pm Last Edit: Dec 01, 2018, 08:44 pm by 1to8modelmaker
Die 11 Kanal kommen von zwei unabhängigen Empfängern in den beiden Modellen.KAnn aber auch von einem Empfänger kommen und über den Multiplexer umgeschaltet werden.

uwefed

Du hast also eine 12 Kanal- Modellfernsteuerung und möchtest mit den 12 Kanälen 2x11 Kanäle generieren um 22 Servos zu steuern?
Grüße Uwe 

agmue

Die bisherigen Versuche mit mehr als einem Kanal hat leider nicht geklappt.
Der erste Parameter von setPWM() gibt die Pinnummer an, der Werte von 0 bis 15 haben kann. Du benötigst dann 0 bis 10 für 11 Kanäle.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

1to8modelmaker

Uwe genau so habe ich das vor.Agmue Du hast es genau gelesen.

agmue

Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Go Up