RX63T を試用してみた

RX621 関係は、別件で忙しくて、中々進まない・・

前から、マイコン制御のインバーターやら、DC/DCコンバーターなどを実験してみたくて、色々、構想を練ったり、試作したり、壊したりしてたー

ブラシレスモーターの制御では、一般的には 20KHz 程度の PWM で、直接コイルをドライブする方式が主流で、ラジコンのモーターコントローラーとかがそれだ。
※大抵、8KHz と 16KHz を切り替え出来るようである。

また、正確なサイン波を作る 100V 用のインバーターを作りたいと思っていた。

それと、リチウムイオン電池の充電や、昇圧、降圧のような、アナログ回路が主流の分野をマイコンでどうにかする事を考えていた。
この辺のICとしてはリニアテクノロジーとかが多くのICをラインナップしているが、意外と割高で使うのをためらっていたのが現状。

DC/DC コンバーターはパワー MOS-FET の高速化と、コアの材料改良によって、かなり高いスイッチング周波数でも効率が落ちなくなってきている。

マイコンで、DC/DC のような物を実現する場合に問題となるのは PWM の周波数である、たとえば、20MHz のクロックでは、8 ビットの分解能だと、78.125KHz にしかならない、78KHz 程度では、小型のコイルを使う事が出来ない為、不十分だ・・

そんなこんなで RX マイコンであるー
RX63T の PWM は 100MHz で駆動できる、8 ビットの分解能なら 390KHz、9 ビットでも 195KHz で駆動できる、しかも、コアも 100MHz で動作する為、かなり高速な応答に備える事が出来そうである。
これを前から実験してみたくて、ウズウズしてたら、R5F563T6EDFMを小売してる事が判り、早速購入してみた 582円、構成は、64KFlash、8KRAM、と丁度手頃な感じで、RX621 のリソースを流用出来ると考えていた。

最近、ようやく、試作して、Lチカまで出来たので紹介する。

IMG_0520ss

それで判った事は、RX63T(63系) は 62系 と構成が変わり、62 系のプログラムでは動作しない事だ。
大きな違いは以下
・クロック回路が大幅に拡張されている。
内部発振で125KHzのクロックが使える。
PLL 回路の構成が拡張され、外部発振のクリスタルや、入力クロックの柔軟性が上がった。
各モジュールの分周回路が拡張された。
柔軟性が上がったのは良いが、クロックの設定が面倒になった。

static volatile uint8_t dummy_;

static void wait_()
{
    // とりあえず無駄ループ
    for(uint32_t i = 0; i < 5000; ++i) {
        i += dummy_ & 0;
    }
}

int main(int argc, char** argv)
{
    using namespace root;

    device::SYSTEM::PRCR = 0xa503;  // クロック、低消費電力、関係書き込み許可

    device::SYSTEM::MOSCWTCR.MSTS = 0b01101;    // 131072 サイクル待ち
    device::SYSTEM::MOSCCR.MOSTP = 0;           // メインクロック発振器動作
    dummy_ = device::SYSTEM::MOSCCR.MOSTP();
    device::SYSTEM::MOFCR.MOFXIN = 1;           // メインクロック強制発振
    dummy_ = device::SYSTEM::MOFCR.MOFXIN();
    wait_();

    device::SYSTEM::PLLCR.STC = 0xf;            // PLL 16 倍(192MHz)
    device::SYSTEM::PLLWTCR.PSTS = 0b01010;     // 131072 サイクル待ち
    device::SYSTEM::PLLCR2.PLLEN = 0;           // PLL 動作
    wait_();
    device::SYSTEM::SCKCR = device::SYSTEM::SCKCR.FCK.b(3)      // 1/8
                          | device::SYSTEM::SCKCR.ICK.b(1)      // 1/2
                          | device::SYSTEM::SCKCR.BCK.b(2)      // 1/4
                          | device::SYSTEM::SCKCR.PCKA.b(1)     // 1/2
                          | device::SYSTEM::SCKCR.PCKB.b(1)     // 1/4
                          | device::SYSTEM::SCKCR.PCKC.b(3)     // 1/8
                          | device::SYSTEM::SCKCR.PCKD.b(3);    // 1/8
    device::SYSTEM::SCKCR3.CKSEL = 4;   ///< PLL 回路選択

...

}

※以前は、USB を使いたい場合、12MHz の基準周波数を外せなかったが、今度はもう少し柔軟性がある。

・プロテクト回路が新設された。
これは、自動車の ECU や大型機械の制御など、より信頼性が必要な分野にコミット出来るようにしたものだと思われるが、重要なレジスター関係(クロック設定や消費電力削減関係など)には、プロテクト回路をセーフ状態にしないとアクセス出来ないようになった。
※これが判らなくて、はまった・・・www

・シリアルインターフェースが拡張された。
本来シリアルインターフェースの考え方(送信や受信の手続き)は、I2C や、SPI 通信と共有できる部分が多い、今回「簡易」とついているが、シリアルインターフェースが拡張されて、これらの機能が使えるようになった。

※他にもあるけど、とりあえずこんな感じ。
※現状のソースコードを github にプッシュしてある。

さて、次はいよいよ、とりあえず、降圧の DC/DC コンバーターを作ってみる。

※追記:2013年12月2日(基本回路)

回路図まで手が回らないので、とりあえず、ピン接続を書いておきます。
※ピン番号は 64 ピン版です(R5F563T6EDFM) 64K Flash、8K RAM

基本的な接続:
EMLE(1)  ---> GND (オンチップエミュレーター許可端子、許可する場合 VCC へ)
P01(4)   ---> 10K でプルダウン(ユーザーブートとブートの切り替え用)
VCL(3)   ---> 0.1uF のコンデンサを介して GND へ
RES#(6)  ---> プルアップ又は 3.3V 系リセットICへ
XTAL(7)  ---> 12MHz クリスタル(22pF のコンデンサで GND)
EXTAL(9) ---> 12MHz クリスタル(22pF のコンデンサで GND)
※PLL 回路や、周辺回路がリッチなので、色々な周波数を選択出来ます。

電源:
VSS(8)  ---> GND
VSS(22) ---> GND
VSS(44) ---> GND
VCC(10) ---> 3.3V
VCC(20) ---> 3.3V
VCC(42) ---> 3.3V
※各電源端子には 0.1uF のバイパスコンデンサを入れる。(3個)

セルフブート(Flash への SCI からの書き込み)に必要なピン:
MD(5) ---> Low: ブートモード、High: シングルチップモード

オプション設定メモリー:
FFFFFF80 ~ FFFFFF83: はシングルチップ時のエンディアンを選択します。
※通常何も設定しなければ、Flash のイレース値が 0xFF となる為リトルエンディアンとなります。
※その他の初期状態設定(OFS0、OFS1)は「オプション設定メモリー」の項を参照して下さい。