RL78/G14 PWMの使い方とコード|マニュアル不要|マイコン入門

当サイトにはアフィリエイト広告が表示されます。

RL78ではPWMをするときにタイマを最低でも二つ使う。
一つはマスターと呼び、これはPWM周波数を決める。
もう一つはスレーブと呼び、こっちはPWMのデューティーを決める。

興味があるところを読む

RL78内蔵タイマーの性格

PWM周波数を決める「マスター」は必須。
スレーブは複数有っても構わなくて、複数有れば複数のデューティーのPWMを同時に出力可能だ(マスターは一個だけなので周波数は同じ)。
今回はマスターを一個にスレーブ二個で試した。つまりタイマを3個使う。

タイマーの設定

マスター:TAU1のチャンネル0(周期は100μS)
スレーブ:TAU1のチャンネル1(デューティー50%)、チャンネル2(デューティー10%)

コード生成でこんな感じで設定した。
割込みは使わないけど、実験用に発生させることにした。

端子配置表へ反映させると、TO11とTO12が端子配置される。

更にコード生成させると”R_TAU1_Create()”にそれなりのコードが出力される。このコードの中で大事なのはデューティーを決めるレジスタとその値だ。
なんとなくわざとらしい数値がある(0640と0140)んで、これをいじってデューティーが変わるか調べれば良い。

今回はスレーブのチャンネル1だけを調べてるんで、オシロをTO11(P30)に接続しておく。
コードはこんな感じで作ってみた。

デューティーは50%で0x640だから100%なら二倍の0xC80だろうってことで(コード生成時に100%にすれば計算するまでもなかった)。
ステップ実行するとオシロに表示される波形の幅が変化する。
RL78のハードウエアマニュアルを読むのが面倒くさい自分には、コード生成は確かに便利です。

スポンサーリンク
//================================================================================================
// TO11/12 16ビット・タイマ出力(モーターPWM)
//================================================================================================
void To11Main(void)
{
    To11Duty(80); // duty 80%
    R_TAU1_Channel0_Start();
    To11Duty(10); // duty 10%
    R_TAU1_Channel0_Stop();
}
// PWMのduty設定:duty比 0~100(%)
void To11Duty(uint8_t d)
{
    if (d >= 100) TDR11 = 0x0C80U;  // 100%=0x0C80U, 50%=0x0640U  
    else TDR11 = (0x0C80U / 100U) * d;
}
void To10Intr(void){    NOP();  }   // PWMマスター10INTR
void To11Intr(void){    NOP();  }   // PWMスレーブ11INTR
// TO12 16ビット・タイマ12出力(予備PWM出力)
void To12Main(void)
{
    TDR12 = 0x0C80U;    // duty 100%
    R_TAU1_Channel0_Start();
    TDR12 = 0x0640U;    // duty 50%
    TDR12 = 0x0U;  // duty 0%
    R_TAU1_Channel0_Stop();
}
void To12Intr(void){    NOP();  }   // PWMスレーブ12INTR 
スポンサーリンク
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


興味があるところを読む