L'exemple de script PWM fourni avec la bibliothèque Jetson.GPIO Python a enfin fonctionné, alors notez-le. Le premier est la vidéo. <img width = "50%" alt = "Capture d'écran 2020-01-13 14.41.50.png " src = "https: // qiita-image" -store.s3.ap-northeast-1.amazonaws.com/0/72479/f86ca2dc-6388-10e9-8586-a338a3766792.png ">
Les cinq autres exemples de scripts ont été écrits dans le livre "Jetson Nano Super Primer".
simple_pwm.py Le fichier README.md de la bibliothèque dit seulement «Voir simple_pwm.py pour plus de détails sur la façon d'utiliser le canal PWM», ce qui était difficile à comprendre par rapport à d'autres exemples de scripts.
"La bibliothèque Jetson.GPIO prend uniquement en charge PWM sur la broche à laquelle le contrôleur PWM matériel est connecté. Contrairement à la bibliothèque RPi.GPIO, la bibliothèque Jetson.GPIO n'implémente pas le PWM émulé par logiciel. Jetson Nano Prend en charge deux canaux PWM matériels. Le pinmux du système doit être configuré pour connecter le contrôleur PWM matériel à la broche associée. Si pinmux n'est pas configuré, le signal PWM atteint la broche. Non. La bibliothèque Jetson.GPIO ne modifie pas dynamiquement la configuration de pinmux pour y parvenir. Lisez la documentation L4T pour plus d'informations sur la configuration de pinmux. "
Il y avait des obstacles importants tels que les documents pinmux et L4T (= Linux pour Tegra), mais j'ai finalement rattrapé ma compréhension et j'ai pu le déplacer en toute sécurité. Tout d'abord, j'ai pu exécuter l'exemple de script tant que j'avais les bons paramètres pinmux. L'outil Jetson-IO ajouté dans JetPack 4.3 (r32.3.1) a facilité la configuration de Pinmux.
(référence) J'ai essayé de définir la table Pinmux à l'aide de l'outil Jetson-IO ajouté dans JetPack 4.3 (r32.3.1). J'ai essayé d'utiliser deux PWM matériels de Jetson Nano.
Tout d'abord, comprenez le contenu de l'exemple de script inclus.
simple_pwm.py
import RPi.GPIO as GPIO
import time
output_pins = {
'JETSON_XAVIER': 18,
'JETSON_NANO': 33,
}
output_pin = output_pins.get(GPIO.model, None)
if output_pin is None:
raise Exception('PWM not supported on this board')
def main():
# Pin Setup:
# Board pin-numbering scheme
GPIO.setmode(GPIO.BOARD)
# set pin as an output pin with optional initial state of HIGH
GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.HIGH)
p = GPIO.PWM(output_pin, 50)
p.start(25)
print("PWM running. Press CTRL+C to exit.")
try:
while True:
time.sleep(1)
finally:
p.stop()
GPIO.cleanup()
if __name__ == '__main__':
main()
Le script doit être modifié car il utilise deux servomoteurs (servomoteur Geekservo 9g 360 °).
(Script modifié)
simple_pwm_servo.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
output_pin1 = 32
output_pin2 = 33
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(output_pin1, GPIO.OUT, initial=GPIO.HIGH)
p1 = GPIO.PWM(output_pin1, 50)
GPIO.setup(output_pin2, GPIO.OUT, initial=GPIO.HIGH)
p2 = GPIO.PWM(output_pin2, 50)
print("PWM running. Press CTRL+C to exit.")
try:
while True:
p1.start(2.5)
print("p1 start at 2.5%")
time.sleep(1)
p2.start(2.5)
print("p2 start at 2.5%")
time.sleep(1)
p1.start(7.25)
print("p1 start at 7.25%")
time.sleep(1)
p2.start(7.25)
print("p2 start at 7.25%")
time.sleep(1)
p1.start(12)
print("p1 start at 12%")
time.sleep(1)
p2.start(12)
print("p2 start at 12%")
time.sleep(1)
p1.start(7.25)
print("p1 start at 7.25%")
time.sleep(1)
p2.start(7.25)
print("p2 start at 7.25%")
time.sleep(1)
finally:
p1.stop()
p2.stop()
GPIO.cleanup()
if __name__ == '__main__':
main()
(Résultat de l'exécution)
$ python3 simple_pwm_servo.py
PWM running. Press CTRL+C to exit.
p1 start at 2.5%
p2 start at 2.5%
p1 start at 7.25%
p2 start at 7.25%
p1 start at 12%
p2 start at 12%
p1 start at 7.25%
p2 start at 7.25%
...
Recommended Posts