Go Down

Topic: diminuire velocità servomotore con PCA9685 (Read 201 times) previous topic - next topic

waffenfritz

Ciao a tutti, sto utilizzando Arduino mega2560 con 3 moduli PCA9685, ai quali ho collegato 40 servomotori (16 per ogni modulo).

Con questa impostazione, andrò a comandarli tramite un software (JMRI) il quale permetterà il movimento del singolo servo da 19° a 47° (in frequenza è pari a 152/214).

Tutto il circuito funziona perfettamente e ora mi sono posto l'obbiettivo di riuscire a rallentare la velocità di rotazione del servo.

Ho provato molte soluzioni tra cui l'inserimento del ciclo For con il risultato che il motore ha effettivamente rallentato la corsa ma questa viene ripetuta all'infinito "scavalcando" la variabile "if" con la quale il servo si muoveva solo quando gli si dava il comando.


Code: [Select]

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <CMRI.h>
#include <Auto485.h>
#define CMRI_ADDR 1
#define DE_PIN 2
Auto485 bus(DE_PIN); // Arduino pin 2 -> MAX485 DE and RE pins
CMRI cmri(CMRI_ADDR, 24, 48, bus); // deafltus to a SMINI with address 0. SMINI = 24 inputs, 48 outputs

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x41);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x42);

int Tbit1;
int Tbit2;
int Tbit3;
int Tbit4;
int Tbit5;
int Tbit6;
int Tbit7;
int Tbit8;
int Tbit9;
int Tbit10;
int Tbit11;
int Tbit12;
int Tbit13;
int Tbit14;
int Tbit15;
int Tbit16;
int Tbit17;
int Tbit18;
int Tbit19;
int Tbit20;
int Tbit21;
int Tbit22;
int Tbit23;
int Tbit24;
int Tbit25;
int Tbit26;
int Tbit27;
int Tbit28;
int Tbit29;
int Tbit30;
int Tbit31;
int Tbit32;
int Tbit33;
int Tbit34;
int Tbit35;
int Tbit36;
int Tbit37;
int Tbit38;
int Tbit39;
int Tbit40;
int Tbit41;

void setup() {
  Serial.begin(9600);

  pwm.begin();
  pwm.setPWMFreq(60);
  pwm.setPWM(0, 0, 214);
  pwm.setPWM(1, 0, 214);
  pwm.setPWM(2, 0, 214);
  pwm.setPWM(3, 0, 214);
  pwm.setPWM(4, 0, 214);
  pwm.setPWM(5, 0, 214);
  pwm.setPWM(6, 0, 214);
  pwm.setPWM(7, 0, 214);
  pwm.setPWM(8, 0, 214);
  pwm.setPWM(9, 0, 214);
  pwm.setPWM(10, 0, 214);
  pwm.setPWM(11, 0, 214);
  pwm.setPWM(12, 0, 214);
  pwm.setPWM(13, 0, 214);
  pwm.setPWM(14, 0, 214);
  pwm.setPWM(15, 0, 214);

  pwm1.begin();
  pwm1.setPWMFreq(60);
  pwm1.setPWM(0, 1, 214);
  pwm1.setPWM(1, 1, 214);
  pwm1.setPWM(2, 1, 214);
  pwm1.setPWM(3, 1, 214);
  pwm1.setPWM(4, 1, 214);
  pwm1.setPWM(5, 1, 214);
  pwm1.setPWM(6, 1, 214);
  pwm1.setPWM(7, 1, 214);
  pwm1.setPWM(8, 1, 214);
  pwm1.setPWM(9, 1, 214);
  pwm1.setPWM(10, 1, 214);
  pwm1.setPWM(11, 1, 214);
  pwm1.setPWM(12, 1, 214);
  pwm1.setPWM(13, 1, 214);
  pwm1.setPWM(14, 1, 214);
  pwm1.setPWM(15, 1, 214);

  pwm2.begin();
  pwm2.setPWMFreq(60);
  pwm2.setPWM(0, 2, 214);
  pwm2.setPWM(1, 2, 214);
  pwm2.setPWM(2, 2, 214);
  pwm2.setPWM(3, 2, 214);
  pwm2.setPWM(4, 2, 214);
  pwm2.setPWM(5, 2, 214);
  pwm2.setPWM(6, 2, 214);
  pwm2.setPWM(7, 2, 214);
  pwm2.setPWM(8, 2, 214);
  pwm2.setPWM(9, 2, 214);
  pwm2.setPWM(10, 2, 214);
  pwm2.setPWM(11, 2, 214);
  pwm2.setPWM(12, 2, 214);
  pwm2.setPWM(13, 2, 214);
  pwm2.setPWM(14, 2, 214);
  pwm2.setPWM(15, 2, 214);

  bus.begin(9600);
}

void loop() {

  cmri.process();
  Tbit1 = cmri.get_bit(0);
  Tbit2 = cmri.get_bit(1);
  Tbit3 = cmri.get_bit(2);
  Tbit4 = cmri.get_bit(3);
  Tbit5 = cmri.get_bit(4);
  Tbit6 = cmri.get_bit(5);
  Tbit7 = cmri.get_bit(6);
  Tbit8 = cmri.get_bit(7);
  Tbit9 = cmri.get_bit(8);
  Tbit10 = cmri.get_bit(9);
  Tbit11 = cmri.get_bit(10);
  Tbit12 = cmri.get_bit(11);
  Tbit13 = cmri.get_bit(12);
  Tbit14 = cmri.get_bit(13);
  Tbit15 = cmri.get_bit(14);
  Tbit16 = cmri.get_bit(15);
  Tbit17 = cmri.get_bit(16);
  Tbit18 = cmri.get_bit(17);
  Tbit19 = cmri.get_bit(18);
  Tbit20 = cmri.get_bit(19);
  Tbit21 = cmri.get_bit(20);
  Tbit22 = cmri.get_bit(21);
  Tbit23 = cmri.get_bit(22);
  Tbit24 = cmri.get_bit(23);
  Tbit25 = cmri.get_bit(24);
  Tbit26 = cmri.get_bit(25);
  Tbit27 = cmri.get_bit(26);
  Tbit28 = cmri.get_bit(27);
  Tbit29 = cmri.get_bit(28);
  Tbit30 = cmri.get_bit(29);
  Tbit31 = cmri.get_bit(30);
  Tbit32 = cmri.get_bit(31);
  Tbit33 = cmri.get_bit(32);
  Tbit34 = cmri.get_bit(33);
  Tbit35 = cmri.get_bit(34);
  Tbit36 = cmri.get_bit(35);
  Tbit37 = cmri.get_bit(36);
  Tbit38 = cmri.get_bit(37);
  Tbit39 = cmri.get_bit(38);
  Tbit40 = cmri.get_bit(39);
  Tbit41 = cmri.get_bit(40);

  if (Tbit1 == 1)
  {
    pwm.setPWM(0, 0, 152);
  }
  if (Tbit1 == 0)

  {
    pwm.setPWM(0, 0, 214);
  }
  if (Tbit2 == 1) {
    pwm.setPWM(1, 0, 152);
  }
  if (Tbit2 == 0) {
    pwm.setPWM(1, 0, 214);
  }
  if (Tbit3 == 1) {
    pwm.setPWM(2, 0, 152);
  }
  if (Tbit3 == 0) {
    pwm.setPWM(2, 0, 214);
  }
if (Tbit4 == 1) {
    pwm.setPWM(3, 0, 152);
  }
  if (Tbit4 == 0) {
    pwm.setPWM(3, 0, 214);
  }
  if (Tbit5 == 1) {
    pwm.setPWM(4, 0, 152);
  }
  if (Tbit5 == 0) {
    pwm.setPWM(4, 0, 214);
  }
  if (Tbit6 == 1) {
    pwm.setPWM(5, 0, 152);
  }
  if (Tbit6 == 0) {
    pwm.setPWM(5, 0, 214);
  }
  if (Tbit7 == 1) {
    pwm.setPWM(6, 0, 152);
  }
  if (Tbit7 == 0) {
    pwm.setPWM(6, 0, 214);
  }
  if (Tbit8 == 1) {
    pwm.setPWM(7, 0, 152);
  }
  if (Tbit8 == 0) {
    pwm.setPWM(7, 0, 214);
  }
  if (Tbit9 == 1) {
    pwm.setPWM(8, 0, 152);
  }
  if (Tbit9 == 0) {
    pwm.setPWM(8, 0, 214);
  }
  if (Tbit10 == 1) {
    pwm.setPWM(9, 0, 152);
  }
  if (Tbit10 == 0) {
    pwm.setPWM(9, 0, 214);
  }
  if (Tbit11 == 1) {
    pwm.setPWM(10, 0, 152);
  }
  if (Tbit11 == 0) {
    pwm.setPWM(10, 0, 214);
  }
  if (Tbit12 == 1) {
    pwm.setPWM(11, 0, 152);
  }
  if (Tbit12 == 0) {
    pwm.setPWM(11, 0, 214);
  }
  if (Tbit13 == 1) {
    pwm.setPWM(12, 0, 152);
  }
  if (Tbit13 == 0) {
    pwm.setPWM(12, 0, 214);
  }
  if (Tbit14 == 1) {
    pwm.setPWM(13, 0, 152);
  }
  if (Tbit4 == 0) {
    pwm.setPWM(13, 0, 214);
  }
  if (Tbit15 == 1) {
    pwm.setPWM(14, 0, 152);
  }
  if (Tbit15 == 0) {
    pwm.setPWM(14, 0, 214);
  }
  if (Tbit16 == 1) {
    pwm.setPWM(15, 0, 152);
  }
  if (Tbit16 == 0) {
    pwm.setPWM(15, 0, 214);
  }
  if (Tbit17 == 1) {
    pwm1.setPWM(0, 1, 152);
  }
  if (Tbit17 == 0) {
    pwm1.setPWM(0, 1, 214);
  }
 
   if (Tbit18 == 1){
   pwm1.setPWM(1, 1, 152);
   delay(15);
  }
 
 if (Tbit18 == 0){
   pwm1.setPWM(1, 1, 214);
    delay(15);


if (Tbit19 == 1) {
  pwm1.setPWM(2, 1, 152);
}
if (Tbit19 == 0) {
  pwm1.setPWM(2, 1, 214);
}
if (Tbit20 == 1) {
  pwm1.setPWM(3, 1, 152);
}
if (Tbit20 == 0) {
  pwm1.setPWM(3, 1, 214);
}
if (Tbit21 == 1) {
  pwm1.setPWM(4, 1, 152);
}
if (Tbit21 == 0) {
  pwm1.setPWM(4, 1, 214);
}
if (Tbit22 == 1) {
  pwm1.setPWM(5, 1, 152);
}
if (Tbit22 == 0) {
  pwm1.setPWM(5, 1, 214);
}
if (Tbit23 == 1) {
  pwm1.setPWM(6, 1, 152);
}
if (Tbit23 == 0) {
  pwm1.setPWM(6, 1, 214);
}
if (Tbit24 == 1) {
  pwm1.setPWM(7, 1, 152);
}
if (Tbit24 == 0) {
  pwm1.setPWM(7, 1, 214);
}
if (Tbit25 == 1) {
  pwm1.setPWM(8, 1, 152);
}
if (Tbit25 == 0) {
  pwm1.setPWM(8, 1, 214);
}
if (Tbit26 == 1) {
  pwm1.setPWM(9, 1, 152);
}
if (Tbit26 == 0) {
  pwm1.setPWM(9, 1, 214);
}
if (Tbit27 == 1) {
  pwm1.setPWM(10, 1, 152);
}
if (Tbit27 == 0) {
  pwm1.setPWM(10, 1, 214);
}
if (Tbit28 == 1) {
  pwm1.setPWM(11, 1, 152);
}
if (Tbit28 == 0) {
  pwm1.setPWM(11, 1, 214);
}
if (Tbit29 == 1) {
  pwm1.setPWM(12, 1, 152);
}
if (Tbit29 == 0) {
  pwm1.setPWM(12, 1, 214);
}
if (Tbit30 == 1) {
  pwm1.setPWM(13, 1, 152);
}
if (Tbit30 == 0) {
  pwm1.setPWM(13, 1, 214);
}
if (Tbit31 == 1) {
  pwm1.setPWM(14, 1, 152);
}
if (Tbit31 == 0) {
  pwm1.setPWM(14, 1, 214);
}
if (Tbit32 == 1) {
  pwm1.setPWM(15, 1, 152);
}
if (Tbit32 == 0) {
  pwm1.setPWM(15, 1, 214);
}
if (Tbit33 == 1) {
  pwm2.setPWM(0, 2, 152);
}
if (Tbit33 == 0) {
  pwm2.setPWM(0, 2, 214);
}
if (Tbit34 == 1) {
  pwm2.setPWM(1, 2, 152);
}
if (Tbit34 == 0) {
  pwm2.setPWM(1, 2, 214);
}
if (Tbit35 == 1) {
  pwm2.setPWM(2, 2, 152);
}
if (Tbit35 == 0) {
  pwm2.setPWM(2, 2, 214);
}
if (Tbit36 == 1) {
  pwm2.setPWM(3, 2, 152);
}
if (Tbit36 == 0) {
  pwm2.setPWM(3, 2, 214);
}
if (Tbit37 == 1) {
  pwm2.setPWM(4, 2, 152);
}
if (Tbit37 == 0) {
  pwm2.setPWM(4, 2, 214);
}
if (Tbit38 == 1) {
  pwm2.setPWM(5, 2, 152);
}
if (Tbit38 == 0) {
  pwm2.setPWM(5, 2, 214);
}
if (Tbit39 == 1) {
  pwm2.setPWM(6, 2, 152);
}
if (Tbit39 == 0) {
  pwm2.setPWM(6, 2, 214);
}
if (Tbit40 == 1) {
  pwm2.setPWM(7, 2, 152);
}
if (Tbit40 == 0) {
  pwm2.setPWM(7, 2, 214);
}
if (Tbit41 == 1) {
  pwm2.setPWM(8, 2, 152);
}
if (Tbit41 == 0) {
  pwm2.setPWM(8, 2, 214);
}
}

Go Up