BeagleBone PWM Limited à 100 Hz?
-
21-12-2019 - |
Question
J'utilise Beaglebone PAS BEAGLEBONE NOIR.
J'ai juste essayé de produire un PWM et je m'attendais à des fréquences potentielles de certains mégaherz sur un appareil aussi rapide.
J'ai découvert que 100Hz est le maximum exact que je peux définir par SYSFS.
J'ai commencé à creuser en ligne pour des exemples et ils n'ont pas mentionné une limite, mais ils n'ont pas non plus montré de valeur plus rapidement que 100Hz.
Exemple:
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 10000000 > period_ns
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 1000000 > period_ns
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 200 > period_freq
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 101 > period_freq
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 100 > period_freq
root@beaglebone:/sys/class/pwm/ehrpwm.0:0#
Tout AVR 10cent peut faire une pwm plus rapide que celle-là.
Y a-t-il des astuces que j'ai manquées?
Dois-je vraiment créer une PWM personnalisée par Manuallz TognGling GPIO si je veux une fréquence plus rapide que 100 Hz ?!
La solution
J'ai trouvé la solution juste après avoir ouvert ma question.
Je le posterai ici car je pense que cela pourrait en fait causer plus que moi de me demander :)
La fréquence PWM n'est bien sûr pas limitée comme celle sur un périphérique de 1 GHz, le pilote du noyau ne fonctionne tout simplement pas de la même manière que l'on pourrait s'attendre.
Si vous entrez une valeur de performance_percence (comme 1%), le conducteur semble simplement calculer la valeur Duty_ns en dehors de celui-ci et oublier le pourcentage après.
Un utilisateur normal penserait qu'il est en "mode en pourcentage", mais le fichier de pourcentage est en réalité lié à une enveloppe pour aider.
Les mêmes comptes pour la fréquence!
Si vous modifiez maintenant la fréquence à une valeur plus élevée, alors le noyau vérifie si la période de cycle Duty_NS s'adapte à la nouvelle période totale!
Il ignore que vous définissez réellement un pourcentage!
Donc, bien sûr, vous ne pouvez pas avoir une période de temps supérieure à la période entière, de sorte qu'il échoue.
Texte long Sommaire court:
Toujours définir Duty_cycle à zéro avant de définir la fréquence si la valeur précédente ne s'intègre pas dans la nouvelle période, cela évite la frustration.