こんにちは、組み込みエンジニア歴20年以上のtomozoです。
今回は、ルネサス社製
RL78マイコンでPWM制御プログラムについて徹底解説します。
この記事は
- e2studioのコード生成を使ってプログラムを始めて作る組み込み初心者の方
- RL78のPWM制御の基礎を知りたい方
向けの記事です。
コードの自動生成機能を使うと期待通り動作する周辺機能のプログラム
をすぐに作ることができて、プログラミング作業がはかどります。
マニュアルを読みながら一つずつ設定を入力していくのは
結構苦労しますからね。
プログラミングが終わって実際に動かしてみると
全然動かなくて原因調査に何日もかかることもあります。
そういった作業はサクッとミスなく終わらせられれば
クリエイティブな設計作業や他の業務、学習などに
時間を充てることができるようになります。
この記事を読めば
- e2studioでコード生成する方法
- RL78でPWM出力制御
が分かるようになります。
それでは早速解説をはじめます。
目次
設計するもの
PWM出力についてはこちらの記事で紹介しています。
【初心者向】マイコン基本機能【PWM制御】現役エンジニアが徹底解説今回の内容の準備になりますのでまずは一読下さい。
設計するものの要点をまとめると以下の表のようになります。
機能 | PWM出力(デューティを自分で設定) |
マイコン | ルネサス社製 RL78/G13 R5F1006A |
使用するマイコンの周辺機能 | タイマー(PWM出力) |
備考 | e2studioのコード生成を使用する |
コードを自動生成
それでは早速、コードを自動生成します。
e2studioの準備がまだの方はこちらを確認して下さい。
【ルネサス/e2stdio】コード生成ツールとは?どう使う?【手順図解】
①e2stdioを起動してプロジェクトエクスプローラーウインドウから
「コード生成」-「周辺機能」-「タイマ」を選びダブルクリックします。
②周辺機能のウインドウから
一般設定タブで
チャネル0 PWM出力(マスタ)
チャネル1 PWM出力(スレーブ)
を選択します。
RL78ではチャネルを2つを使ってPWM出力を構成します。
③チャネル0(マスター)のタブでPWMの周期を設定します。
今回は下図のように100usとしました。
④チャネル1(スレーブ)のタブでPWMのデューティを設定します。
今回は25%にしました。
デューティというのは周期に占めるHighの区間のことです。
今回の設定で下図のようなPWMの出力を出そうとしています。
⑤最後に「コードを生成する」をクリックするとコードが生成されます。
生成コードの確認
生成されたコードを確認してみましょう。
以下の.cと.hのファイルができています。
tomozo
主なファイルを簡単に説明すると以下のようになります。
r_cg_cgc.c | クロック関係の初期設定 |
r_cg_timer.c | タイマー関係の初期設定 |
r_cg_timer_user.c | タイマー関係のユーザープログラム |
r_cg_timer.cの中でPWM出力に関係して
どんな初期設定が行われているかを見てみましょう。
void R_TAU0_Create(void)
この関数はタイマーユニットを制御するのに必要な初期化関数です。
各レジスタで行っていることは以下です。
①タイマ・アレイ・ユニット0の入力クロック供給
②タイマクロック選択レジスタTPS0で動作クロックをfclk(32Mhz)に設定
③各チャネルをストップ
④割り込みを禁止に設定
⑤割り込みフラグをクリア
⑥チャネル0と1の割り込みレベルを設定
⑦チャネル0をマスターPWM出力に設定
⑧チャネル0のタイマーデータレジスタにC7FH(3199)を設定
入力クロックが32Mhzなので
32Mhz × 3199 ≒ 100usとなっています。
⑨チャネル0の出力値設定
⑩チャネル0の出力許可
⑪チャネル1スレーブPWM出力に設定
⑫チャネル1のタイマーデータレジスタに320H(800)を設定
800 ÷ 3199 ≒ 0.25 すなわち25%になっています。
⑬チャネル1スレーブチャネル出力モード設定
⑭タイマ出力レベル・レジスタでチャネル1を正論理出力(アクティブ・ハイ)に設定
⑮チャネル1の出力値設定
⑯チャネル1の出力許可
⑰TO01ピンの出力設定
より詳しく知りたい方はこちらのRL78/G13のハードウェアマニュアルを参照ください。
コードを見ると一つ一つは難しい設定ではありませんが、
自分で調べながらプログラムを書くと慣れていなければ時間がかかったり
正しく設定できずになってしまいそうですね。
しかし、コードの自動生成を使えば一瞬でプログラムが作れて非常に便利です。
ただし趣味やプライベートの電子工作なら結果的に動けばいいですが、
製品を作るのであれば、プログラムの内容は理解しておくことが重要です。
なぜなら何かあった時に変更を加えたり、問題の原因を調べたりできないからです。
動作確認
コード生成しただけではタイマーは動作していないので、
以下のコードを入力しましょう。
メイン関数で呼ばれる
R_MAIN_UserInit関数で
チャネル0のタイマーをスタートします。
以上でターゲットボードがある方は期待したように
PWM波形が出力されるか動作確認してみてください。
tomozo
まとめ
PWM出力はe2studioのコード生成で簡単に作成可能
RL78の場合マスターとスレーブのチャネル2個使用する
デューティも自由に設定可能
生成されたコードの初期設定の流れと内容は理解しておくことが重要
考になったとか、もっとここが知りたいなど一言でも
コメント、意見などいただけると励みになります。
こちらの記事でマイコンの基本機能についてまとめています。
もしよければご覧ください。
マイコン基本機能5選【初心者組み込みエンジニア必見】
このサイトでは
学校や友人、親は教えてくれない
資産運用についても紹介しています。
できるだけ早く自分の将来のために勉強しておかないと
もっと早く知っておけば良かったって後悔しますよ。
インデックス投資はおすすめ!厳選ファンド(商品)3つと利回り検証