デッドタイム付きPWM出力ピンの割り当てについて

MTU3aやGPTにはモータ向けのハーフブリッジの上下アームのゲート信号用のPWM出力ピンがあります。BLDCなどにも使えるように三相用の複数タイマーを連携した使い方もできますね。本日の質問ですが、なぜ?ルネサスのサンプルはわざわざ上下を逆に接続してソフトウェア側でコンペアマッチレジスタ値側でわざわざ数値で逆にするような工夫で対応しているのか?という疑問です。

具体的にルネサスのモータ評価ボードのサンプルコードのBLDCのDutyセット部分のコードを掲載します。

最後のp_st_driver->BLDCDutySetというところは実態がMTU3/4連動ならTGRC、TGRDの値をセットするだけです。

動作としてタイマが0からアップカントを開始しTGRCやTGRDに到達したら設定された値にMTIOCxA、MTIOCxBが変化し、デッドタイム経過後MTIOCxC、MTIOCxDが変化、周期レジスタの値まで行ったら今度はダウンカウント、MTIOCxC、MTIOCxDが変化、デッドタイム経過後、MTIOCxA、MTIOCxBが変化するようになります。

TGRCとTGRDが増加するとMTIOCxC、MTIOCxD、MTIOCxA、MTIOCxBの正論理状態は減少します。

で、再度、私の疑問点を書くとルネサスのモータ評価基板やスマートコンフィギュレータですが上アームがMTIOCxA、MTIOCxBとなっています。アクティブレベルをハイレベルにすると動作としては上に書いたように値の反転のような処理が必要になります。余分な引き算を3回発生させる必要があるということです。


上下が逆じゃないのか?それはなぜ?他に理由があってそうしているなど理由があるのでしょうか?

GPTならMTIOCxAが上アーム、MTIOCxBが下アームに使われているモータ評価ボードの基板を見ています。MTU3aと同じように逆じゃないかな?と感じています。何かそのようにする理由があるのでしょうか?

一応、私が知っている範囲で調べたところSH2のモータ評価用ボード(KENTAC 13600CPU、ルネサスの有償セミナーで配布された回路図より)の頃にはすでにこのようになっていました。ソフトウェアでひっくり返しなしでいいように配線するつまりGPTならMTIOCxBを上アームに使う場合に何か不都合があるのでしょうか?知見のある方は教えてください。

なお、これの大きな気づきになったのはRXマイコンではなくRAマイコンのGPT_OPS機能ピンの上アーム出力ピンGPOUUP、GPOVUP、GPO WUPが同じピンに割り当てられているGPTのMTIOCxBだったのでMTIOCxBが本来は上アームなのにどこかの時点でMTIOCxAが上アームとして使われるようになったなど背景があり、それを元にサンプルコードが展開されたのに引きずられただけ?なのかなと思っています。

まとめます

・ルネサスや昭和電業の評価ボードの実装(ゲートドライバは正論理)

GPT MTIOCxA:上アーム

GPT MTIOCxB :下アーム

MTU MTIOC3B, MTIOC4A, MTIOC4B:上アーム

MTU MTIOC3D, MTIOC4C, MTIOC4D:下アーム

・スマートコンフィギュレータ

MTU MTIOC3B, MTIOC4A, MTIOC4B:上アーム

MTU MTIOC3D, MTIOC4C, MTIOC4D:下アーム

これが上下アームのピンは本来、逆すればいいのでは?計算コストを増やしてまでこうなっている理由はあるのか?ということです。

評価ボード

https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk0emx270s00020bj-evaluation-system-bldc-motor

https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/ra-cortex-m-mcus/rtk0ema270s00020bj-mck-ra6t2-renesas-flexible-motor-control-kit-ra6t2-mcu-group

Parents
  • 理由に関しては心あたりはありません。

    が、以前から気になっていました。

    RAでは、GPT_OPSのGTOUUP(上アーム), GTOULO(下アーム)とGTIOCA/Bの関係が

    RA6T1 : 上アーム:A, 下アーム:B(計算量が増える組み合わせ)

    RA6T2 : 上アーム:B, 下アーム:A(直接コンペアマッチレジスタに設定出来る組み合わせ)

    RA6T3 : 上アーム:A, 下アーム:B

    RA8T1: 上アーム:A, 下アーム:B

    ※一部のマイコンでは、同一の端子にA/B両方割り振る事も出来ますが、概ね上記の様な関係です

    RA6T1→RA6T2になった際に、上下入れ替わったと思ったのですが、RA6T3では元に戻っていました。RX26Tなどでは、計算量が増える組み合わせです。RA6T2だけ、イレギュラーであるかと思います。

  • RA6T2も(評価ボードでは)Aが上、Bが下になっています。上に挙げたモータボードは両方ともあって、計算でひっくり返しがある回路構成でした。

    RX72M CPUボード

    RA6T1 CPUボード

    MCKーRA6T2

    全てという事です。ベクトル制御のコードを再利用しているため最初に躓いた結果なのかな?というのが理由かなと思っていますが。スマートコンフィギュレータの設定画面表示が逆なので、どこかに統一見解がありそうですが。今、新しくボードをRA6T2で作るので、評価ボードとは逆に割り当ててソフトウェアによるひっくり返しはなくなるようにする予定です。

    ルネサス中の人からコメントが得られるといいのですが・・・評価ボード設計は外部による可能性もあるんですよね。そして、その大元のリファレンスになっている設計がそうなっているのを引き継いでいるんじゃないかな?というのが私の推測です。なお、RAに至ってはFSPの生成コード(具体的にはrm_motor_driver.cのrm_motor_driver_set_uvw_duty)でひっくり返しが自動生成されるんで本家のご意向なんだろうけど逆にすればいいのにそれをしないのが謎すぎます。

  • 少し落ち着いて考えるとFSPのベクトル制御のコードが自動生成されるのでAを上、Bを下にしておかないと生成コードに手を入れるか、生成コードを全く利用しないということになりますね。うーん、まずはチップ抵抗でAとBを切り替えられる基板にしよう。RXマイコン用のサンプルコードも然り。

  • ・三角波でPWM波形を生成

    ・アクティブハイ

    ・初期値L, 周期終わりでL

    の場合は、コンペアマッチ値:大きい→デューティ:小さいの関係

    コンペアマッチ値=(1.0-duty)*half_cycle

    の式になると思います。この計算式がそのまま、相補PWMでも使われているのかな、と思いました。(ご指摘の通り相補PWMの場合は、上下の対応を逆にすれば「(1.0-duty)」の部分は「duty」に置き換えて計算量を減らせますが、シングルで波形を作る式をそのまま踏襲する形で回路設計して今に至る、というイメージです。)

    >Aを上、Bを下にしておかないと生成コードに手を入れるか、生成コードを全く利用しないということになりますね

    Motorスタックを使う場合はそうなるのかと思います。「Three-Phase-PWMまで」を使うのであれば、Bを上、Aを下の関係で、(1.0f - )の部分をなくす形でも行けると思います(デットタイム付き相補PWMタイマの部分まで、生成コードを使用する。API関数のdutyCycleSet()はカウンタ値を渡すので、(1.0f-duty), (duty)どちらの値も自分で計算して渡す形。)

  • デッドタイムを使いたいので相補PWMです。

    ひっくり返しなしで論理だけを反転するとデッドタイムが逆になり、ゲートON状態が上下アームで重なった状態になるのでソフトで反転なしでAを上、Bを下ができないのです。もし、B側の後にデッドタイム経過してA側が駆動する機能があればソフトウェアでの反転動作もなしで済むのになというのが感想。

    三角波形でもノコギリ波形でもアップして条件値以上で出力ピンが変化するという仕様なので相補PWMじゃなければ論理だけひっくり返せば対応できますが、相補PWMのデッドタイムはAの後にBが起動するので

    実装1)回路Aが上、Bが下→Duty設定のレジスタ値ひっくり返す(1.0-duty)

    実装2)回路Bが上、Aが下→Duty設定のレジスタ値そのまま(duty)

    で開発ツールは実装1)であることを暗に推奨している状態で、その理由も何も書いてない。かつMTU3aにしろGPTにしろユーザマニュアルには上下のどちらにするかの言及なし。スマートコンフュグレータのモータコンポーネントは実装1)で明示(ゲートドライバの回路構成が負論理の時はdutyそのままが成り立つけど、サンプルコードとかはひっくり返し前提)。

    他社であるTOSHIBAのTXZ/TXZ+シリーズのモータ用ペリフェラルPMDの資料を読む機会がありましたが、こちらはマニュアルで上下どちらを使うか明示してありますが、その上でベクトル制御のサンプルコードを確認したところソフトウェアによる値のひっくり返しが実装されていました。

    そういう文化・習慣なんだろうか?ソフトウェアを書くものとしてはDuty増加、レジスタ値も増加で書きたい気持ちになる。

  • >ひっくり返しなしで論理だけを反転するとデッドタイムが逆になり、ゲートON状態が上下アームで重なった状態になるので

    Three-Phase-PWMで相補PWM波形を出力すると、A:Posi(H側駆動前提)、B:Nega(L側駆動前提)の差動信号が出力されますが、デッドタイムを有効にすると、波形切り替わりのタイミングでA,B「両方Lの時間帯」が出来ます。

    この信号を、B:H側駆動回路に接続, A:L側駆動回路に接続、(H側L側両方アクティブH)としても問題無いと思うのですが。(接続をひっくり返しても、L側とH側が両方ONするタイミングは生じません)

    (デューティを50%の値とすると、A側の信号が基準(=50%デューティ)となり、B側の信号はデッドタイムの分だけずれが生じるので、ひっくり返した場合全く対称となる訳では無いですが。)

    (RA6T2では、実際B側をH駆動、A側をL駆動回路につないで、計算式は(1.0f-duty) →dutyにしてモータを駆動した事がありますが、特に問題はなかったと記憶しています。)

    (アクティブHの回路をアクティブLにするという思想でしょうか?モータ駆動回路には手を入れずに、AとBの配線を逆につなぐだけで良いと思うのですが。)

  • 当初の質問はAとBを逆にすべきでは?と思い、そうなってない理由を質問しています。実機での波形でもちゃんと調べた上で質問しています。

    なのに、TOSHIBA含めてルネサスのFSPの生成コードとルネサス提供サンプルは全部、ソフトウェアで反転させるコードを入れて今の実装をしているのはなぜ?なのかという質問ですね。中の人から回答を得たい。

Reply
  • 当初の質問はAとBを逆にすべきでは?と思い、そうなってない理由を質問しています。実機での波形でもちゃんと調べた上で質問しています。

    なのに、TOSHIBA含めてルネサスのFSPの生成コードとルネサス提供サンプルは全部、ソフトウェアで反転させるコードを入れて今の実装をしているのはなぜ?なのかという質問ですね。中の人から回答を得たい。

Children
No Data