Moteur PWM: TCCR2A,TCCR2B, OCR2A, OCR2B

Si j'ai bien compris, tu voudrais deux sorties Hardware PWM?

pour moi, c'est hyper simple, il suffit de faire tourner le timer2 en fast PWM avec TOP = 0xFF (255), et "connecter" les sorties OC2A et OC2B via les COM2A et COM2B en PWM... Ensuite, tu inscris la valeur de chacune de tes sorties via OCR2A et OCR2B.

// PWM A sur sortie OC2A - pin 11
// PWM B sur sortie OC2B - pin 3

void PWM_setup( boolean motA, boolean motB){
  TCCR2A = 0x03;  // Fast PWM, TOP = 0xFF
  if (motA){  // on initialise OC2A (pin 11)
    TCCR2A += 0x80; // Fast PWM sur OC2A
    OCR2A = 0;  // PWM A = 0
  }
  if (motB){  // on initialise OC2B (pin 3)
    TCCR2A += 0x20; // Fast PWM sur OC2B
    OCR2B = 0;  // PWM B = 0
  }
//  TCCR2B = 0x01;  // fréquence PWM = 16000000/1/256 = 62.5KHz ou
  TCCR2B = 0x02;  // fréquence PWM = 16000000/8/256 = 7.81KHz ou
//  TCCR2B = 0x03;  // fréquence PWM = 16000000/32/256 = 1.953KHz ou
//  TCCR2B = 0x04;  // fréquence PWM = 16000000/64/256 = 976Hz (au choix)

}

void PWM_put(byte canal, byte value){
  // envoie la valeur "value" (0-255) sur le canal "canal"(0 = A, 1 = B)

  if (canal) {  // canal b
    OCR2B = value;
  } else {  // canal A
    OCR2A = value;
  }
}

void setup(){
  PWM_setup(true, true);  // initialise les deux sorties PWM
}

void loop(){
  byte i;

  i++;
  PWM_put (0, i);
  PWM_put (1, 255-i);
  delay(100);  // change de valeur toutes les 100ms
}

Ce code va te faire tourner les deux moteurs en rampe. le moteur connecté à la pin 11 va démarrer à 0 et monter dans les tours, le moteur sur la pin 3 va démarrer à donf et descendre progressivement. La boucle dure 26 secondes environ.

Dans PWM_setup(), tu choisis l'une des quatre lignes concernant TCCR2B selon la fréquence de PWM que tu trouve la mieux adaptée (selon le bruit que feront tes moteurs, surtout, je pense que la première ligne à 62.5K est trop rapide)...

C'est un code généraliste, car si tu n'as besoin que d'une PWM, il te suffit de faire PWM_setup(true, false); ou PWM_setup(false, true); au niveau du setup() pour activer la PWM sur la pin 11 ou 3 respectivement. Attention par la suite à indiquer le bon canal dans PWM_put(canal, value);...

EDIT :
Ma méthode est certes la plus sûre et la plus directe (comment j'me la pète...), mais elle a l'inconvéniant de te restreindre grave sur le choix des pins. Une PWM logicielle est risquée (selon les interruptions qui peuvent arriver, cela peut déstabiliser la PWM), et bouffe du temps de traitement...