RL78シリーズのPWMについて

もしかしたらすでに投稿されているかもしれませんが・・・
RL78/G14のタイマアレイユニットを使用していて、データシートに書かれているようにPWM100%を出力しようとすると、

デューティー50%ぐらいの値が出力されてしまいます。

具体的には、データシートには、マスターとなるTDRxxレジスタに入力した値+1以上に、スレーブのTDRxxレジスタの値をセットするとPWM100%を実現できると読み取れますが、実際には、その値をセットしてもPWM100%の出力ではなく、50%ぐらいの値になっております。

 

何かお気づきの点がありましたら、ご教示お願いいたします。

  • 実際に試されてるコードを公開されるのが早いと思います
  • お恥ずかしいコードですが・・・
    TAUを走らせると、各ポートからPWM波形が出ることは確認しました。
    また、CS+とE1の環境にてデバッグしながら、CS+上でスレーブチャンネルのデューティーを設定するTDRxxレジスタに2001(100%狙い)を入力すると、デューティーが50%、キャリアも半分の5kHzとなっています。

    //以下、PWM多重出力設定(データシートのP372を参照)
    TAU0EN =1; //タイマアレイユニットイネーブル
    TPS0 = 0; //ひとまず20Mhzカウント
    TMR00 = 0; //マスターモード,動作クロックCK00,内部クロックカウント,PWMマスタ
    TMR01 = 0x0408; //スレーブチャンネル
    TMR02 = 0x0408; //スレーブチャンネル
    TMR03 = 0x0408; //スレーブチャンネル

    TDR00 = 2000; //マスター10kHz
    TDR01 = 1000; //デューティー50
    TDR02 = 500; //デューティー25
    TDR03 = 250; //デューティー12.5

    TOM0 = 0x0e; //スレーブチャンネル出力モード
    TOL0 =0; //スレーブチャンネル出力アクティブハイ
    TO0 =0; //初期出力は0
    //
    TOE0 = 0x0f; //出力ポートの動作許可
    //
    PM1_bit.no6=0; //PWMポートは出力
    PM1_bit.no7=0; //PWMポートは出力
    PM3_bit.no1=0; //PWMポートは出力
    PM0_bit.no1=0; //PWMポートは出力
    P1_bit.no6=0; //
    P1_bit.no7=0; //
    P3_bit.no1=0; //
    P0_bit.no1=0; //
    //
    TS0 = 0x0f; //タイマーのカウント開始。
    //PWM設定終了//以下、PWM多重出力設定(データシートのP372を参照)
    TAU0EN =1; //タイマアレイユニットイネーブル
    TPS0 = 0; //ひとまず20Mhzカウント
    TMR00 = 0; //マスターモード,動作クロックCK00,内部クロックカウント,PWMマスタ
    TMR01 = 0x0408; //スレーブチャンネル
    TMR02 = 0x0408; //スレーブチャンネル
    TMR03 = 0x0408; //スレーブチャンネル

    TDR00 = 2000; //マスター10kHz
    TDR01 = 1000; //デューティー50
    TDR02 = 500; //デューティー25
    TDR03 = 250; //デューティー12.5

    TOM0 = 0x0e; //スレーブチャンネル出力モード
    TOL0 =0; //スレーブチャンネル出力アクティブハイ
    TO0 =0; //初期出力は0
    //
    TOE0 = 0x0f; //出力ポートの動作許可
    //
    PM1_bit.no6=0; //PWMポートは出力
    PM1_bit.no7=0; //PWMポートは出力
    PM3_bit.no1=0; //PWMポートは出力
    PM0_bit.no1=0; //PWMポートは出力
    P1_bit.no6=0; //
    P1_bit.no7=0; //
    P3_bit.no1=0; //
    P0_bit.no1=0; //
    //
    TS0 = 0x0f; //タイマーのカウント開始。
    //PWM設定終了
  • チョコです。
    ざっと,眺めただけですが,TMR00~TMR03の設定がおかしいですね。bit0は1にしていないといけないはずです。また,TDR00の値は2000ではなく1999(=2000-1)に設定すべきです。
    ちなみに,TM00(マスタチャネル)の出力は必ず方形波(周波数は半分でデューティ50%)になります。どうも測定している端子を間違えているのでは。(それ以前に,多重PWMで4チャネルの出力が可能と考えているのでは?)
  • チョコです。
    追加でコメントします。
    やはり,原因はTMR01~TMR03のbit0が0になっていることです。
    デューティを100%未満に設定したときには,マスタチャネルがカウント終了したときにはスレーブはすでにカウント完了しているので,マスタチャネルのINT信号でスレーブはトリガされ,次の周期のカウントを開始します。
    しかし,100%以上に設定しているときには,マスタチャネルがカウント終了したときにはスレーブはまだカウント完了していません。そのため,そのタイミングでのマスタチャネルのINT信号でスレーブはトリガされません。つまり,マスタチャネルの2周期めではトリガが掛からないのでスレーブチャネルは停止したまま(出力は直ぐにインアクティブ)になります。2周期目の終了時のマスタチャネルのINTは,スレーブはカウント完了しているのでトリガが有効になり,スレーブは(出力をアクティブにして)カウントを再開します。
    これを眺めると,周波数が半分で,デューティ50%に見えることになります。

    これが,PWM出力は出ているが,デューティ100%でおかしくなる動作です。

    以上

  • チョコさん
    ありがとうございます。ご指摘いただいたTMRの最下位ビットに1が入っていないのが原因でした!
    ここに1を入れないとき、PWM100%指示をすると、PWMポートの出力がデューティー50%の周波数半分に変化(マスタのポートと同じ出力)するようです。