====== 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. ''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'' ?