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 427 subscribers
  • Views 50208 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 6 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
Parents
  • fujita nozomu
    +1 fujita nozomu over 6 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 6 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 6 years ago in reply to maenoh!
    BD6211の仕様書を読むと、本当はVREFにアナログ信号を入れるとPWMが出来るはず(笑)。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 6 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
Reply
  • Okamiya Yuuki
    0 Okamiya Yuuki over 6 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
Children
No Data
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2023 Renesas Electronics Corporation. All rights reserved.