Haberler

Jetson Nano’da PWM Nasıl Kullanılır

Son zamanlarda, Jetson Nano ile DC motorumun hızını kontrol etmek için PWM sinyalini kullanmak istiyorum. İlk başta, bunun Raspberry Pi gibi basit olacağını düşündüm. Sonuçta, Nvidia 40 pinli başlığının RPi ile uyumlu olduğunu söyledi. Ama sonra Nvidia’nın geliştirici forumunda kontrol ettim. Kötü haber. Nvidia’ya göre, donanım PWM kullanmak istiyorsanız, Pinmux’u yeniden yapılandırmanız gerekiyor. Yazılım PWM kullanmaya çalışırsanız, kodu yazmadık.

Bu yüzden Nvidia’nın resmi web sitesinden ve diğer kaynaklardan birçok belge okudum. Aşağıda başvurduğum belgeler bulunmaktadır.

Referans makale:

Şimdi Jetson Nano’nuzdan PWM çıkışı almaya başlayalım. Ama öncesinde, sadece bir PWM sürücüsü almanızı şiddetle öneririm. Çok maliyetli olmayacak ve iyi çalışıyor.

1. DT dosyasını dışa aktarın.

yükleme başarılı
Jetson Nano 40 pinli pin çıkışı

Nvidia’nın resmi talimatlarına göre, Pin 33 PWM çıkışı olarak belirtilmiştir. Ama yukarıdaki pin çıkışında, 33 GPIO_PE6 olarak yapılandırılmış. Şimdi yapmamız gereken, 33’ü PWM olarak ayarlamak için Pinmux’u yeniden yapılandırmaktır.

Az önce indirdiğimiz DT dosyasını açın.

Jetson Nano’nun DT dosyası

GPIO_PE6‘yı bulmak oldukça kolay. Şimdi bunu PWM olarak değiştirelim.

Sonra bunu göreceksiniz.

Endişelenmeyin. Sadece Tamam’a tıklayın. Sonra Input‘u Output olarak değiştirin.

Bundan sonra, Generate DT File‘a tıklayın.

Tahta adı sorulduğunda,  jetson-nano-sd yeterli olmalıdır.

Son olarak, Excel tablosunu CSV UTF-8 (virgülle ayrılmış) (*.csv) formatında kaydedin, dosya adı jetson-nano-sd.csv olsun.

Üç dosyamız oldu, bu dosyayı Linux ana sisteminize kopyalayın.

yükleme başarılı

2. Gerekli araçları indirin

Öncelikle, SDK Manager’da Jetson Nano geliştirme ortamını indirin.

yükleme başarılı

Her şey tamamlandığında,  ~/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra yolunun altında source_sync.sh dosyasını görmelisiniz.

yükleme başarılı

Terminalde aşağıdaki komutu çalıştırarak çekirdek kodunu indirin

sudo apt install build-essential bc bzip2 xz-utils git-core vim-common ./source_sync.sh

Script çalışırken, giriş etiketi  tegra-l4t-r32.2.0 olmalıdır, etiket diğer şeylerin versiyonu ile tutarlı olmalıdır.

Sonra araç zincirini indirebiliriz.

Filtreyi kontrol etmenizi öneririm.

yükleme başarılı

Sonra 64-bit BSP için GCC Araç Zincirini indirin.

yükleme başarılı

Toolkit’i çıkarın ve yolu hatırlayın.

Örneğin, benim yolum /home/eric/bin/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.

3. Uboot’u derleyin

Linux’ta tegra-pinmux-scripts script’ini indirin.

https://github.com/NVIDIA/tegra-pinmux-scripts

tegra-pinmux-scripts dizininde bir csv klasörü oluşturun ve daha önce elde edilen csv dosyasını buraya kopyalayın.

cd tegra-pinmux-scripts
mkdir csv
cp <path-to-csv>/jetson-nano-sd.csv csv/p3450-porg.csv

Sonra aşağıdaki komutu çalıştırın.

./csv-to-board.py p3450-porg
./board-to-uboot.py p3450-porg > pinmux-config-p3450-porg.h

pinmux-config-p3450-porg.h‘yi /home/tonny/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra/sources/u-boot/board/nvidia/p3450-porg içindeki orijinal dosyanın üzerine yazmak için kullanın.

Sonra ortam değişkenlerini ayarlayın ve araç zincirinin ilgili bilgilerini içe aktarın.

export CROSS_COMPILE=/home/tonny/bin/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

dtc’yi kurun.

apt-get install device-tree-compiler

Uboot’un kök dizinine geri dönün  /home/tonny/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra/sources/u-boot ve uboot’u derleyin.

make distclean
make p3450-porg_defconfig
make

Son olarak, yeni derlenmiş uboot’u L4T ağacına aktarın.

cp u-boot.bin ../../bootloader/t210ref/p3450-porg/

4. CBoot’u güncelleyin

Öncelikle Jetson Nano’muzun cihaz ağacı versiyonunu kontrol etmemiz gerekiyor.

Jetson Nano’da aşağıdaki komutu çalıştırın.

cat /proc/device-tree/nvidia,dtsfilename

Örneğin, benim jetson nano’m tegra210-p3448-0000-p3449-0000-b00.dts. Bu, dosyanın b00 versiyonunu daha sonra değiştirmem gerektiği anlamına geliyor. Bazı insanlar nano’nun a02 versiyonunu alabilir ve a02 versiyonunu değiştirmelidir.

yükleme başarılı

L4T versiyonu 32.1 ise, kaynak kodunun bir kısmını güncellemek için  NVIDIA Jetson Nano Pinmux’un resmi belgelerine başvurmanız gerekir.

Linux ana bilgisayarına geri dönün, önceki Excel tablosu tarafından oluşturulan dtsi dosyasını kaynak kodundaki dosyanın üzerine yazmak için kullanın.

$ cd Linux_for_Tegra/sources/hardware/nvidia/platform/t210/porg/kernel-dts/porg-platforms/

cp <yeni-dt-dosyalari-yolu>/tegra210-jetson-nano-sd-pinmux.dtsi tegra210-porg-pinmux-p3448-0000-<nano-dt-sürümü>.dtsi

cp <yeni-dt-dosyalari-yolu>/tegra210-jetson-nano-sd-gpio-default.dtsi tegra210-porg-gpio-p3448-0000-<nano-dt-sürümü>.dtsi

Aygıt ağaç görüntüsünü oluşturmak için Linux_for_Tegra/sources/kernel/kernel-4.9/ klasörüne girin

cd Linux_for_Tegra/sources/kernel/kernel-4.9/
make ARCH=arm64 tegra_defconfig
make ARCH=arm64 dtbs

Son olarak, yeni derlenmiş aygıt ağaç görüntüsünü L4T ağacına aktarın

cp arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-<nano-dt-sürümü>.dtb ../../../kernel/dtb/

5. Flash

 Linux_for_Tegra klasörü altında çalıştırın

sudo ./create-jetson-nano-sd-card-image.sh -o sd-blob.img -s <sd_kart_boyutu> -r <nano-dt-revizyonu>

nano-dt-revizyonu ile nano-dt-sürümü arasındaki ilişki aşağıdaki gibidir

DT-Ver DT-Rev
a01 100
A02 200
b00 300

Burada sd kartım 32g, dt-ver b00, dolayısıyla aslında şunu çalıştırdım

sudo ./create-jetson-nano-sd-card-image.sh -o sd-blob.img -s 32G -r 300

Sonraki adımda, Linux_for_Tegra/bootloader/signed dizinine girin ve karşılık gelen sürümü tegra210-p3448-0000-p3449-0000-<nano-dt-sürümü>.dtb.encrypt jetson nano’ya kopyalayın

Daha sonra jetson nano üzerinde çalıştırın

sudo dd if = tegra210-p3448-0000-p3449-0000- <nano-dt-sürümü> .dtb.encrypt of = / dev / disk / by-partlabel / DTB

Tabii ki, öncelikle yedek almanızı ve bir sorun çıkması durumunda kurtarmanızı öneririm.

sudo dd if = / dev / disk / by-part label / DTB or = backup.dtb.encrypt

Leave a Reply

Your email address will not be published. Required fields are marked *