NanoPi-DUOを使ってみる

ハードウェアPWM

NanoPi-DUOのPin#31はデバッグポートのRXですが、同時にハードウェアPWMとしても使うことができます。
ハードウェアPWMを使うときは、npi-configを使ってハードウェアPMWを有効にします。




ここでpwm0を有効に変更します。


pwm0を有効にするとデバッグポートは使えなくなります。
デバッグポートにTTL-USB変換を繋げているとブート時にkernelがハングします。


再起動後にsshでログインすると以下のデバイスが使えるようになります。


今回はPWMの確認用にSG90のサーボモータを使いました。
サーボモータ(SG90)
Nanopi DUO
オレンジ
PA5(Pin#31)

5V
茶色
GND

SG90のデー タシートにPWM Period(20mSec)とポジション毎のパルス幅が記載されていますが、
ポジションごとのパルス幅は今までの実測値を使いました。
以下のスクリプトでSG90が 0°→ +90° → -90° → 0° に動きます。
コマンドについてはこ ちらを参考にしました。
#!/bin/bash
set -x
#Export PWM channel for user control.
sudo sh -c "echo 0 > /sys/class/pwm/pwmchip0/export"

#Select the period of PWM signal. Value is in nanoseconds.
sudo sh -c "echo 20000000 > /sys/class/pwm/pwmchip0/pwm0/period"

#Change the polarity of the PWM signal.
#The polarity can only be changed if the PWM is not enabled.
sudo sh -c "echo "normal" > /sys/class/pwm/pwmchip0/pwm0/polarity"

#Enable the PWM signal.
sudo sh -c "echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable"

#Select the duty cycle. Value is in nanoseconds and must be less than the period.
#Move to Center
sudo sh -c "echo 1450000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"
sleep 2

#Move to Angle +90
sudo sh -c "echo 2350000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"
sleep 2

#Move to Angle -90
sudo sh -c "echo 625000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"
sleep 2

#Move to Center
sudo sh -c "echo 1450000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"
sleep 2

#Disable the PWM signal.
sudo sh -c "echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable"

#UnExport PWM channel for user control.
sudo sh -c "echo 0 > /sys/class/pwm/pwmchip0/unexport"

PWMの動作を確認後にnpi-configでpwm0を無効にしましたが、デバッグポートが使えなくなったままです。
但しカーネルがクラッシュするわけではなく、単にデバッグコンソールが以下の場所で止まるだけで、
sshではログインすることができます。


続く....