Das mit Jetson.GPIO Python-Bibliothek </ A> gelieferte PWM-Beispielskript hat endlich funktioniert. Notieren Sie es sich. Erstens ist das Video. <img width = "50%" alt = "Screenshot 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 "> </ A>
Die anderen fünf Beispielskripte wurden im Buch "Jetson Nano Super Primer" geschrieben.
simple_pwm.py In der README.md der Bibliothek steht nur "Siehe simple_pwm.py für Details zur Verwendung des PWM-Kanals", was im Vergleich zu anderen Beispielskripten schwer zu verstehen war.
"Die Jetson.GPIO-Bibliothek unterstützt PWM nur an dem Pin, an den der Hardware-PWM-Controller angeschlossen ist. Im Gegensatz zur RPi.GPIO-Bibliothek implementiert die Jetson.GPIO-Bibliothek keine softwareemulierte PWM. Jetson Nano Unterstützt zwei Hardware-PWM-Kanäle. Der System-Pinmux muss so konfiguriert sein, dass der Hardware-PWM-Controller mit dem zugehörigen Pin verbunden wird. Wenn Pinmux nicht konfiguriert ist, erreicht das PWM-Signal den Pin. Nein. Die Jetson.GPIO-Bibliothek ändert die Pinmux-Konfiguration nicht dynamisch, um dies zu erreichen. Weitere Informationen zum Konfigurieren von Pinmux finden Sie in der L4T-Dokumentation. "
Es gab hohe Hürden wie Pinmux- und L4T-Dokumente (= Linux für Tegra), aber ich habe endlich mein Verständnis eingeholt und konnte es sicher verschieben. Zunächst konnte ich das Beispielskript ausführen, solange ich die richtigen Pinmux-Einstellungen hatte. Das in JetPack 4.3 (r32.3.1) hinzugefügte Jetson-IO-Tool erleichterte das Einrichten von Pinmux.
(Referenz) Ich habe versucht, die Pinmux-Tabelle mit dem in JetPack 4.3 (r32.3.1) hinzugefügten Jetson-IO-Tool festzulegen. </ A> Ich habe versucht, zwei Hardware-PWMs von Jetson Nano zu verwenden. </ A>
Verstehen Sie zunächst den Inhalt des enthaltenen Beispielskripts.
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()
Das Skript muss geändert werden, da zwei Servomotoren verwendet werden (Geekservo 9g 360 ° -Servomotor).
(Geändertes Skript)
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()
(Ausführungsergebnis)
$ 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%
...