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


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

embedded:logiciel:pwm [2015/08/26 20:37] (current)
Line 1: Line 1:
 +====== 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''​.
 +
 +<code sh>
 +echo 1 > request
 +</​code>​
 +
 +On peut ensuite régler la période en ns :
 +<code sh>
 +echo PERIOD_NS > period_ns
 +</​code>​
 +
 +Puis la charge utile toujours en ns:
 +<code sh>
 +echo DUTY_NS > duty_ns
 +</​code>​
 +
 +Enfin, il faut le démarrer:
 +<code sh>
 +echo 1 > run
 +</​code>​
 +
 +
 +===== 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.
 +
 +''​OPP''//​x//​ 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 =====
 +
 +  * [[http://​saadahmad.ca/​using-pwm-on-the-beaglebone-black/​]] -> constante ''​CLOCKS_PER_SEC''​ ?