Oui c'est une des difficultés.
On utilise le PWM de l'Arduino pour générer le signal de changement de POLARITE de la carte moteur, donc changement de DIRection dans l'absolu.
Sur la carte moteur, l'entrée PWM qui sert normalement à donner la pulsation correspondant à la vitesse du moteur n'est pas utilisée. On la fixe à 1 pour activer la tension de sortie de façon permanente.
Donc sur la carte moteur :
entrée PWM reçoit 1 pour voie sous tension ou 0 pour voie hors tension
entrée DIR reçoit la modulation d'impulsion qui permet d'inverser la tension pour former le signal DCC
Sur l'arduino :
un timer X génère le signal PWM en mode dit "fast pwm"
Dans ce mode, le timer utilise deux comparateurs :
le comparateur A contient la longueur d'une alternance (donc d'un bit) totale. Lorsqu'il boucle, on passe au bit suivant.
le comparateur B contient la longueur d'une DEMIE alternance et définie le rapport cyclique du PWM
Comme en DCC le rapport cyclique est de 1:1, le comparateur B est chargé avec la valeur du comparateur A divisée par deux, et on lui demande de basculer de 1 à 0 ou 0 à 1 quand il déclenche.
Au début d'une pulsation de signal DCC, le timer reset les comparateurs : les sorties correspondantes de l'Arduino sont à 0.
Après la moitié d'un bit, le comparateur B déclenche et INVERSE sa sortie, il passe à 1.
Plus tard, le comparateur A va provoquer le cyclage du mécanisme. C'est une fonction interne au CPU : on ne pilote aucun signal avec ce comparateur.
Donc on relie la sortie de signalement du comparateur B, qui s'appelle OUTPUT COMPARE x B avec x = numéro du timer utilisé à l'entrée DIR de la carte moteur.
Pour le timer 1 sur un MEGA, OUTPUT COMPARE 1 B est sur la broche 12.
Ensuite, il faut envoyer un signal 1 sur l'entrée PWM de la carte moteur. Ici on peut soit le rendre pilotable avec une quelconque sortie de l'Arduino, soit simplement le relier à VCC. Mais dans ce cas on ne peut plus couper le signal / l'alimentation de la voie (surcharge, arret d'urgence....)