4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RXマイコンでPWM出力

Posted at

作るもの

RX64マイコンPWM信号を出力しました。
作る信号はサーボモーターとかラジコンで使用している信号と似た仕様です。
【仕様】

  • 周期Tが固定
  • パルス幅が最小W1から最大W2までの間で可変
  • 出力を止めることなくパルス幅Wを変更する。

image.png

スマートコンフィグレータの設定

スマートコンフィグレータの設定はこんな感じです。
image.png

ポイントは TGRC(タイマジェネラルレジスタC) が__バッファレジスタ__として使用可能なチャンネルを選択することです。

RX64Mマイコンでは、 MTU(マルチファンクションタイマパルスユニット)0,3,4,5,6,7では TGRCがバッファとして使用可能とデータシートに記載されています。
(MTU1と2は使えない)

バッファレジスタの動作

バッファレジスタの作用を図示します。

image.png

  • コンペアマッチBでカウンタクリア ⇒ TGRBレジスタの値が周期Tに相当する
  • コンペアマッチBで端子を1に設定 ⇒ 出だしがHighのパルスを生成
  • コンペアマッチAで端子を0に設定 ⇒ TGRAレジスタ値がHighパルス幅に相当する
  • コンペアマッチA発生時にTGRCの値をTGRAに転送する ⇒ 次の周期でのHighパルス幅を変更している。

TRGCのバッファ作用が無いとAGRAの値がレジスタライトのタイミングで更新されますので、書き込みタイミングによってはコンペアマッチAが発生しません。

スマートコンフィグレータが生成した関数

スマートコンフィグレータが生成したヘッダファイルのプロトタイプ宣言です。
_rx64m_MTU0_PWMの部分はスマートコンフィグレータのコンポーネント追加時に入力を求められた名称なので、デフォルトだと __Config_MTU0__のような名称になります。

void R_rx64m_MTU0_PWM_Create(void);
void R_rx64m_MTU0_PWM_Start(void);
void R_rx64m_MTU0_PWM_Stop(void);
void R_rx64m_MTU0_PWM_Create_UserInit(void);

クリエイトとスタート,ストップしかありませんので、パルス幅可変の部分は自分で追記する必要があります。
TRGCレジスタの値を書き換えるための関数を下記のように追加します。

void R_rx64m_MTU0_PWM_Set_RegA(unsigned short  iRegValue){
    MTU0.TGRC = iRegValue;
}

動作確認

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?