GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
WAVPを使うとモーター用PWMの周期がかわってしまうようです。
パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。
void loop() { analogWrite(6,50); wavp.play("organ.wav"); wavp.play("okoto.wav"); wavp.play("jingle2.wav");}
WAVPを使うとモーター用PWMの周期がかわってしまうようです。 パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。
GR-ADZUKI はどうだかわからないのですが、GR-KURUMI の標準のライブラリでのタイマ・アレイ・ユニットの各タイマの割り振りを今確認したところ
こんな感じで使用しており、恐らくは ADZUKI でも大して変わらないのではないかと思います。
Wavp は TCR00 をマスタ・チャネルとして使用し、チャネル1 と チャネル2 を出力にして残りのタイマのハードウェア PWM の使用は考慮されていない感じです。
http://gadget.renesas.com/ja/product/kemuri.html に GR-KURUMI のピンマップが掲載されておりハードウェア PWM とソフトウェア PWM に使用できるピンがわかりますが、実際この図は間違っており、ハードウェア PWM に割り当てられたピン以外は全てソフトウェア PWM に使用できるライブラリの作りとなっており、恐らくは ADZUKI でも変わらないと思うので、DC モーター制御程度ならソフトウェア PWM を試してみるというのも手だと思います。ソフトウェア PWM はハードウェア PWM の約490Hz の1/4、約122Hz で動作していたと思いますが DC モーター程度なら支障はないのでは。
GR-KURUMI のライブラリでは gr_common/RLduino78/cores/pintable.h の中 PinTable[] というテーブルでハードウェア PWM/ソフトウェア PWM の定義を行っており、ハードウェア PWM に設定されているピンをこゝを変更することでソフトウェア PWM に変更することも可能だった筈です。恐らくは ADZUKI でも同様の手は使えると思います。
> モーター制御は(6,11)と(9,10)なのですが、
GR-ADZUKI の回路図見てみましたが、モーターの制御が
MOTOR1 F 6番ピン ハードウェア PWM 出力 MOTOR1 B 11番ピン ソフトウェア PWM 出力 MOTOR0 F 9番ピン ハードウェア PWM 出力、Servo ライブラリ使用時のタイマ MOTOR0 B 10番ピン ハードウェア PWM 出力
こんな感じになっており、4つある信号の内の 3つがハードウェア PWM で、のこり 1つがソフトウェア PWM なのですね、ちょっと驚きました。
モーター制御には安定したハードウェア PWM を優先して割り当てたいと考えるのが人情と思うのですがそうなっていないのは、恐らくはボード設計者が GR-KURUMI のピンマップ を参照し、11番ピンを他の PWM 出力可能なピンと同等と勘違いされたのではないかと推測します。
んで、GR-KURUMI では ハードウェア PWM が 5ピン使えたので、それに該当する残り 2ピンはどうなっているかというと、
SW1 3番ピン ハードウェア PWM 出力 NC? 5番ピン ハードウェア PWM 出力
こんな感じで、TCR01 は謎のスイッチに接続されており、スイッチが閉の状態では GND に接続されるため出力としての使用は考慮されていないようです。
残りの 5番ピンはオンボードでは使用されておらずピンソケットとして信号が出ており自由に使えるようです。
話を戻して、モーター制御の 4つの信号の内 1つがソフトウェア PWM であるということは、いっそのこと 4つ全部がソフトウェア PWM でも支障はないんじゃないかと。
んで、ADZUKI はオンボードでハードウェア PWM の使用はモーター制御以外には考慮されていないため、モーター制御にハードウェア PWM の使用をやめると内部タイマーの使い方はもっと自由にできそうな感じですね。
> S4Aのアナログ出力が5,6,9で、デジタル出力が10,11,12,13。正転、逆転はデジタルのHIGH/LOWで制御
あゝ、成る程。モーター制御の PWM は
19 P13/TxD2/SO20/(SDAA0)/(TI04)/(TO04) 22 P10/SCK00/SCL00/(TI07)/(TO07)
で、
18 P14/RxD2/SI20/SDA20/(SCLA0)/(TI03)/(TO03) 9 P72/KR2/SO21 D11(sPWM)(SO21)
の HIGH/LOW 切り替えで正転と逆転ですか。勘違いしてました。
そうですね。悩ましいですがトレードオフになりますね。WAVPはチャネルを選べるようにしましたが、attachMicroIntervalTimerHandler() や MsTimer2をすでに使用している場合は5ピンだけの出力になるようにした方がよさそうですね。
>Maenoさん
Webコンパイラに以下のテストバージョンを用意しました。ピン10をソフトPWMにして、サーボ専用にタイマーを割り当てました。ちょっと試していただけないでしょうか?
GR-ADZUKI_Sketch_e.101.zip
Maenoさん、ご確認ありがとうございます。Toneを使った場合、ピン3のanalogWriteは多分乱れてしまうと思いますが、ピン3を使用したToneは大丈夫ですね。ちょっと紛らわしくてすみません。
以下のwav_libライブラリを試してみていただきたいのですが、以下のように第2引数にenumマクロを指定すると5ピンだけの出力になります。
Wavp wavp(44100, WAVP_OUTPUT_5);