#PWM
##従来の面倒なやり方
今まではマイコンを使っていました。
毎回ソースを書き、コンパイル、焼き込んで、実験と、手間が多かった。
今回Raspberry PI ZEROを手に入れたので、簡単にPWM信号を出す事が出来る。
また、コマンドラインから直接制御出来るツールがあると言う。
今回はこれを使ってコマンドラインだけでPWMを操作する。
##Raspberry PIのGPIO関係ツール
ラズパイにはGPIOと言われる40ピンのコネクタがある。
Raspberry Pi GPIO Pinout
電源ライン(+5V/+3.3V/GND)の他に、汎用I/Oポートがあり、一部機能割当てがある。
この割当が飛び飛びで覚えるのが難しい…。
尚、機能は
・PWM(0が2つ?逆相?と1)
・I2C(2組)
・SPI(2組)
・UART(1組)
の4つがある事を確認した。
但し、機能が回路化されているのは下3つだけなのか?
PWMは飽くまでも汎用I/Oの範疇とみなされている気がする。
同じような扱いにGCLKというのが0〜2まである。
クロックジェネレータなのか?今はまだ勉強不足です。
##制御ソフト導入
gpio
と言うコマンドがあるらしいが、標準では導入されて居なかった。
そこで調べ、参考資料を得た。
Raspberry-PiにおけるGPIO関係ツールのインストール方法 – Раздан-3
gitしてビルドする感じ。gitも入ってません。(;´Д`)
ビルドは大丈夫だろうか?まずはgitを導入
sudo apt install -y git
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
~/RaspberryPI $ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony
- Device tree is enabled.
*--> Raspberry Pi Zero W Rev 1.1 - This Raspberry Pi supports user-level GPIO access.
ここまでOK。
#ロジアナ
ロジアナは以前記事にした中華ロジアナです。
中華ロジアナを買った - Qiita
USBを接続するだけで、認識も問題なく、最近の中華は良く動きます。(笑)
変な爆弾がなければ最高ですね。(;´∀`)
##ソフトウェア
定番sigrokのPulseViewを使います。
sigrok
#実験
##実験風景
PWMの出力をロジアナのD0線で監視する…予定。
##PWM出力
gpioコマンドを使ってwPI番号1をPWM動作させる。
※gpioコマンドではwPI番号を使う)
また、ラズパイのPWMは基本クロックが19.2MHzであり、
・基本周波数を決める分周カウンタを設定。(pwmr)
・1ピリオドを決める分周カウンタを設定。(pwmr)
・デューティーを設定する。(pwm)
今回は19.2MHzを2分周して9.6MHzとし、
基本周波数は9.6MHzを96分周した0.1MHz(100KHz)とした。
またこの場合、デューティーは0(0%)〜96(100%)が指定できる。
最初は24(25%)を指定した。
gpio mode 1 pwm
gpio pwm-ms
gpio pwmc 2
gpio pwmr 96
gpio pwm 24
この辺の話しは下記を参考にさせて貰った。貴重な情報ありがたい。
くたじんの鎌倉生活 RaspberryPiのPWM制御、周波数とデューティー比について
※ただこの方、基本クロック19.2MHzを2分周して9.1MHzと書かれた。
※typoか計算間違えか、9.6MHzなのだが、おや?と思いつつも知らぬ我が身、少し混乱してしまった。
##sigrokの画面
正しく25%比の波形が出ている様に見える…がこれでは良く分からない。
そんな時はこの黄と緑のアイコンをクリック。プルダウンからPWMを選ぼう。
※その他にも多数の解析が出来る。これはなかなか良いツールかも知れない。
すると新しくPWMの線が追加される。PWMの所をクリックすると、この線に対して設定できる。
D0線を指定して、色は紫にしてみた。
しかし、数値がおかしい、随分25%からかけ離れている?
PWMの割合を48(50%)にしても好転しない…やはり中華か?
実はこれは解像度の問題。サンプリング用レンジとサンプリング周波数を引き上げると…
正しく48(50%)比が出る。
サンプル量は記録するメモリにも影響する。
あまり大きくすると、計測終了時に負荷が大きくなる事があり、たまにソフトの反応が消える。。。
概ね10Msamplesを目処に使っているが、PCの性能との兼ね合いだろう。
今回のPWMは基本周波数が100KHzなので、最低でもサンプリング周波数は10倍は欲しい。
細かく見たい時は80倍、8MHzもあればかなり細かく観測できる。
また、範囲の詳細を見たい場合は、このボタンを押すと、
範囲を指定して、詳細を見る事も出来る。またカーソル位置にマウスオーバーするとタイミングの委細も表示する。
10Mサンプリングレンジ・8MHzサンプリングならば、この通り、綺麗にPWM波形が観測できる。
デューティを1にしてみた。
ここまで来ると、サンプリング周波数を最大にあげてもオンタイム3回の計測しか出来ない。そろそろ限界だ。
しかしなかなか使えると思う。
もう少し低い周波数(PWMの基準周波数を10〜25KHz位)に落とせば結構な精度ではないだろうか?
#今後の予定
##他のモード
I2CやSPI、汎用I/O等、マイコンで試していた事を少しずつこちらの環境に移していきたい。
また、簡易とはいえ、中華ロジアナもそこそこ使える性能なので、今後も事あればデバッグに使っていきたい。
#謝辞
今回も沢山の先人の記録を拝見し、知恵を分けて頂いた。感謝と同時に、ありがとうございました。