作るもの
RX64マイコンPWM信号を出力しました。
作る信号はサーボモーターとかラジコンで使用している信号と似た仕様です。
【仕様】
- 周期Tが固定
- パルス幅が最小W1から最大W2までの間で可変
- 出力を止めることなくパルス幅Wを変更する。
スマートコンフィグレータの設定
ポイントは TGRC(タイマジェネラルレジスタC) が__バッファレジスタ__として使用可能なチャンネルを選択することです。
RX64Mマイコンでは、 MTU(マルチファンクションタイマパルスユニット)0,3,4,5,6,7では TGRCがバッファとして使用可能とデータシートに記載されています。
(MTU1と2は使えない)
バッファレジスタの動作
バッファレジスタの作用を図示します。
- コンペアマッチ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;
}
動作確認
RX64Mマイコンで可変PWM pic.twitter.com/jzT3zqrI1F
— cyebu1103 (@cyebu1103) July 14, 2019