Renesas Community
Renesas Community
  • User
    Join or sign in
  • Site
  • Search Community
  • User
  • Renesas Engineering Community
  • FAQ
  • HELP
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
GR-ADZUKI WAVPを使うとPWMの周期が変わる
  • Forums
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 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関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • State Verified Answer
  • Replies 39 replies
  • Subscribers 429 subscribers
  • Views 49887 views
  • Users 0 members are here
  • GR-ADZUKI
Options
  • Share
  • More
  • Cancel
Related Tags
  • auzuki
  • azuki
  • BASIC
  • GR-ADZUKI
  • GR-ADZUKI Node.js Johnny-Five
  • GR-ADZUKI S4A モーター
  • GR-ADZUKI USB
  • WDT
  • デジタルコンパス
  • リセット
  • 省電力
Related

WAVPを使うとPWMの周期が変わる

maenoh!
maenoh! over 5 years ago

WAVPを使うとモーター用PWMの周期がかわってしまうようです。

パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。

void loop() {
    analogWrite(6,50);
 wavp.play("organ.wav");
 wavp.play("okoto.wav");
 wavp.play("jingle2.wav");
}

  • Reply
  • Cancel
  • Cancel
  • maenoh!
    0 maenoh! over 5 years ago
    因みにWAVP無しでモーター用PWMとサーボの同時利用でも、サーボ波形が止まったりします。WAVP+モーターPWM+サーボが順番に動くようなサンプルプログラムを提供して頂けるとありがたいです。急ぎませんが。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    +1 fujita nozomu over 5 years ago

    WAVPを使うとモーター用PWMの周期がかわってしまうようです。

    パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。

    GR-ADZUKI はどうだかわからないのですが、GR-KURUMI の標準のライブラリでのタイマ・アレイ・ユニットの各タイマの割り振りを今確認したところ

    チャネル 内容
    0 ハードウェア PWM のマスタ・チャネル
    1 3番ピン ハードウェア PWM 出力, MsTimer2
    2 5番ピン ハードウェア PWM 出力
    3 10番ピン ハードウェア PWM 出力
    4 9番ピン ハードウェア PWM 出力, Servo ライブラリ使用時のタイマ
    5 マイクロ秒タイマ
    6 ソフトウェア PWM 用タイマ
    7 6番ピン ハードウェア PWM 出力

    こんな感じで使用しており、恐らくは 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 でも同様の手は使えると思います。

    • Cancel
    • Up 0 Down
    • Reply
    • Reject Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to fujita nozomu
    fujitaさん、ありがとうございます。モーター制御は(6,11)と(9,10)なのですが、”ソフトウェア PWM に変更することも可能"であれば、解決できるかもしれません。”TCR04 9番ピン ハードウェア PWM 出力、Servo ライブラリ使用時のタイマ”というのがちょっと心配ですが。そもそもWAVPの利用後に初期状態にタイマー設定を戻すライブラリがあればいいのかもしれません。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • @chobichan
    0 @chobichan over 5 years ago in reply to maenoh!
    BD6211の仕様書を読むと、本当はVREFにアナログ信号を入れるとPWMが出来るはず(笑)。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to @chobichan
    まずすみません、WAVPでハードPWMの周期が変わる仕様は明示してなかったですね(Readmeにタイマーのリソースだけ書いてありますが、それでは分からないですね)。周期が変わってもanalogWriteという機能自体は果たすとは思いますが、少なくともPlayが終わったら周期は元に戻すように変更しようかと思います。
    次にDCモーターとサーボの同時使用について、これは考慮が漏れてすみません。ADZUKIもKURUMIもタイマー使用状況はFujitaさんが書かれている通りですが、同時使用で機能しないのはダメですね。
    S4Aのサーボは、以下の通りにソフトで20ms周期を作っており、普通に同時に動いていたので気づくのが遅れました。ちょっと検討させていただきます。

    void servo(byte pinNumber, byte angle) {
    if (angle != 255)
    pulse(pinNumber, (angle * 11) + 560);
    }

    void pulse(byte pinNumber, unsigned int pulseWidth) {
    digitalWrite(pinNumber, HIGH);
    delayMicroseconds(pulseWidth);
    digitalWrite(pinNumber, LOW);
    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to maenoh!

    > モーター制御は(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 の使用をやめると内部タイマーの使い方はもっと自由にできそうな感じですね。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to fujita nozomu
    fujitaさん、ありがとうございます。モーター関連のソフトウェアPWM化はうまくいきました。ただし、これに更にWAVPを追加すると6ピンのPWM制御やdigitalWriteがうまく機能しないようです。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    S4Aのアナログ出力が5,6,9で、デジタル出力が10,11,12,13。正転、逆転はデジタルのHIGH/LOWで制御でき、またWAVPが3,5のために、プロデューサーミーティングの結果から、現在のピンアサインになってますが、
    japan.renesasrulz.com/.../thread

    ADZUKIではピン10に使われているタイマーをサーボ用に割り当てたいと思います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to Okamiya Yuuki

    > 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 切り替えで正転と逆転ですか。勘違いしてました。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago

    > パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。

    秋月の BD6211F の頁にあるデータシートを見てみたのですが、

    項目 記号 最小 標準 最大 単位 条件
    入力周波数範囲 FMAX 20 - 100 kHz FIN/RIN

    となっており、Wavp を使わない条件での「周期が2ms程度(≒490Hz)」というのはこの IC の使用方法として宜しくないのでは。

    32MHz の RL78/G13 でモータードライバの PWM と Wavp の PWM を両立させるには、両 PWM のタイマのマスタ・チャネルを 32KHz とかで動作させるのが良い気がします。

    Wavp やモーター制御を使用せずにアナログ出力を使用した場合に Arduino の PWM とは PWM の周波数が変わってしまってはまずい場合も考えられるので、マスタ・チャネルを 490Hz と 32kHz で切り替えができれば良いかもしれません。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to Okamiya Yuuki
    > WAVPが3,5

    3 のチャネル 1 のタイマーは attachMicroIntervalTimerHandler() や MsTimer2 で使用しているので

    > ADZUKIではピン10に使われているタイマーをサーボ用に割り当てたいと思います。

    と同様の考慮が必要でしょう。しかし タイマーの空きがないので機能のトレードオフが必要と思います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to fujita nozomu

    そうですね。悩ましいですがトレードオフになりますね。WAVPはチャネルを選べるようにしましたが、attachMicroIntervalTimerHandler() や MsTimer2をすでに使用している場合は5ピンだけの出力になるようにした方がよさそうですね。

    >Maenoさん

    Webコンパイラに以下のテストバージョンを用意しました。ピン10をソフトPWMにして、サーボ専用にタイマーを割り当てました。ちょっと試していただけないでしょうか?

    GR-ADZUKI_Sketch_e.101.zip

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    GR-ADZUKI_Sketch_e.101は、モーターとサーボの制御に関しては、正常に動作しました。更にGR-COTTONのサンプルプログラムから赤外線リモコン受信の部分を移植して組み合わせてみたのですが、リモコン受信時にサーボの波形が少し乱れます。あと、toneとnoToneが正常に動作していないようです。ロボット用途の場合はWAVPは一時的にピン5だけでいいです。もちろん音楽用途ではステレオ再生を希望しますが。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    Maenoさん、ご確認ありがとうございます。
    IRに関してですが、COTTONのサンプルでは割り込み処理が長いため、割り込み冒頭でinterrupts()を挿入する必要があります。ただ、これだけだと割り込み優先順位がサーボと一緒のため、動作しませんでした。サーボの優先順位をひとつ上げて動作確認したテンプレートを用意しましたので、確認していただけますでしょうか。

    GR-ADZUKI_Sketch_e.101b.zip

    それからtoneに関してですが、tone用のタイマーはピン3に割り当てられているものを使用しているため、ピン3に圧電スピーカーをつけている場合は音がなりません。私はピン5で確認しましたが音がなりました。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to Okamiya Yuuki
    Maenoさん、たびたびすみません。
    Toneライブラリの確認をしましたが、実装が中途半端で音程の変更とかDurationが正しく機能していませんでした。以下、テンプレートを更新しましたので、ご確認いただければ幸いです。

    GR-ADZUKI_Sketch_e.101c.zip

    Toneサンプル:

    void setup(){
    for(int i = 0; i < 500; i+=10){
    tone(5, 500 + i);
    delay(10);
    }
    for(int i = 0; i < 500; i+=10){
    tone(5, 1000 - i);
    delay(10);
    }
    noTone(5);
    delay(500);
    tone(5, 400, 200);
    delay(500);
    tone(5, 400, 1000);
    }

    void loop(){

    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
>
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2022 Renesas Electronics Corporation. All rights reserved.