Master SIAME | Université Toulouse 3

Internet of things and System on Chip

Master SIAME | Université Toulouse 3

Internet of things and System on Chip

User Tools


PWM

Comme vous pourrez le constater en lisant la doc, le PWM de l'AM355x est beaucoup plus riche que celui de l'AT91SAM7S. Néanmoins, nous n'utiliserons que certaines de ces fonctionnalités. Egalement, il possède 4 modules PWM avec chacune 2 sorties, A et B.

Pilotage par le FS

Les fichiers virtuels PWM se trouvent dans /sys/class/pwm. Il y a un répertoire par module i et par sortie j PWM nommé ehrpwm.i:j.

Il faut d'abord activer la broche du GPIO en sortie (voir la configuration de note carte) puis activer le PWM en envoyant dans 1 dans le fichier request.

echo 1 > request

On peut ensuite régler la période en ns :

echo PERIOD_NS > period_ns

Puis la charge utile toujours en ns:

echo DUTY_NS > duty_ns

Enfin, il faut le démarrer:

echo 1 > run

Registres

  • TBCTL – configuration générale du PWM (dont la configuration de la fréquence),
  • TBPRD – configuration de la période,
  • CMPCTL – configuration du mode de chargement des registres A et B de comparaison pour la génération du signal,
  • CMPA – registre A,
  • CMPB – registre B,
  • AQCTLA – configuration des actions sur le signal de sortie A,
  • AQCTLB – configuration des actions sur le signal de sortie A,
  • AQSFRC – à voir
  • AQCSFRC – à voir

Calcul des temps

Le temps de comptage est appelé SYSCLKOUT dans la documentation et correspond à CORE_CLKOUTM4 / 2 (partie PWM).

Dans la partie “Voltage, Clock and Init”, le module dédié à la gestion de l'énergie (voltage, horloge, etc), on peut trouver que CORE_CLKOUTM4 = CLKDCOLDO / HSDIVIDER-M4.

HSDIVIDER-M4 semble se trouver dans le registre CM_DIV_M4_DPLL_CORE.

La documentation fournit la configuration dans 2 modes :

Mode CLKDCOLDO HSDIVIDER-M4 CORE_CLKOUTM4
OPP100 2000 MHz 10 200 MHz
OPP50 200 MHz 1 100 MHz

NB 100 MHz est la fréquence maximale du PWM.

OPPx représente le niveau de consommation choisie. A priori, on est donc en OPP100 et, par conséquent, SYSCLKOUT = 100 MHz.

La fréquence de comptage du PWM est configurée dans le registre TBCTL par 2 sous-champs (p. 2085-86) : CLKDIV et HSPCLDIV. Bien que la documentation prétende que l'horloge de comptage TBCLK est égale à SYSCLKOUT / (HSPCLKDIV - CLKDIV), ce qui est assez bizarre étant donné que CLKDIV est puissance de 2 et HSPCLKDIV seulement un multiple de 2 (on se retrouve avec un diviseur négatif), la vraie formule semble être (après expérimentation ) :

TBCLK = SYSCLKOUT / HSPCLKDIV / CLKDIV

Pour expérimenter, il faudrait valider avec un oscilloscope.

Références