RX651用のマウス基板の設計とRX631との違い

いままでRX631を載せたマウス基板を用いて、デバイスの動作確認をおこなっていましたが、AD変換が上手くいかなかったので、マウス基板をまた作りなおしました。

RX631-48ピンが手に入りづらくなっていたことに加えて、RAMが多い高性能のマイコンを使いたいと思ったので、今回はRX651-64ピン用のマウス基板を設計しました。

RX651用のマウス基板の回路設計

赤外線センサーのAD変換結果がおかしな値となっていたため、RX651のユーザーズマニュアル ハードウェア編 を参考にして回路を再設計をしました。

回路図の変更点

再設計した回路図は図1です。

図1:再設計した回路図
図1:再設計した回路図
回路図PDF版

今回の回路図で前回の回路図から変更した主な箇所は以下の3つです。

  1. マイコンをRX631からRX651に変更
  2. 1つのFETで1つの赤外線LEDをスイッチング
  3. マウス基板とAS5047P基板をつなげるコネクタを4x2から3x2に変更

冒頭で述べたようにRX631からRX651に変更しています。

加えて、いままで1つのFETで2つの赤外線LEDをスイッチングしていましたが、プログラムが書きにくかったので、1つのFETで1つの赤外線LEDをスイッチングするようにしました。

あとは、AS5047PのA端子とB端子はマイコンと接続しなくてもよいことがわかりましたので、コネクタを4x2から3x2に変更しています。

DRV8836やMPU6000も手に入りづらくなっているので、変更しようかなと思いましたが、使い方を再び調査しないといけないので辞めときました。

配線図の変更点

再設計した配線図は以下です。

図2:再設計した配線図
図2:再設計した配線図

配線図PDF版(縮尺:2.5倍)

今回の配線図で前回の配線図から変更した主な箇所は以下の3つです。

  1. マイコンのAVSSや赤外線センサにつながっているGNDはレギュレータ付近のコンデンサのGNDと一点接続する
  2. 赤外線センサーの出力信号とデジタル信号線を交差させない
  3. モータドライバーのGNDはレギュレータ付近のコンデンサのGNDと一点接続する

変更点1と2についてはRX651のマニュアルp.2548にある「53.6.12 ボード設計上の注意」に書いてあることを参考にしています。いままでは、プリント基板の2層ともベタGNDにしていましたが、1層だけベタGNDにして、GNDを1点接続できるようにしました。

また、モータドライバーからのノイズで問題が生じるというブログ記事をいくつか拝見しましたので、モータドライバーのGNDについてもレギュレータ付近のコンデンサのGNDと一点接続させました。

届いたマウス基板

Elecrowに発注して届いたマウス基板が図3です。

図3:届いたマウス基板
図3:届いたマウス基板

文字は少し乱れていましたが、フットプリントがとても綺麗にできていて良かったです。

ハンダ付けして組み立てたマウスが図4となります。

図4:組み立てたマウス
図4:組み立てたマウス

前回のマウス基板では、センサーの出力はオシロコープで正常だったにもかかわらず、AD変換の結果がずっと4095になっていたり、電圧が上がると逆にAD変換の結果が下がったりして、謎の動作をしていました。

今回のマウス基板では、AD変換の結果が正常な値でしたので、とても良かったです。

RX651とRX631の違い

RXマイコン(RX631)のソフト開発で記述したプログラムを書き換えました。その過程で気づいたRX631と違った点を述べていきます。

性能

前回購入したRX631と今回購入したRX651の性能の違いは以下の表のようになっています。システムクロック(ICLK)というのはRXマイコンのCPU動作クロックの呼び名です。

RX631 RX651
型名 R5F5631PDDFL R5F5651EHDFM
ピンの数 48 64
RAM容量 64KB 640KB
ROM容量 512KB 2MB
ICLK周波数 100MHz 120MHz

全体的にメモリの容量が多くなっているので、プログラムや計算結果などを多く保存できます。

また、 ICLK周波数も120MHzに上がっているので、計算速度が速くなってます。

書き込みにメインクロックがいらない

以下の記事で説明しましたが、RX631では書き込みにメインクロックが必要でした。

しかし、RX651ではSCI (UART) で書き込む場合、メインクロックがいらなくなりました。試しにセラロックをつけずに書き込んだところ、無事書き込めました。

また、PLL回路の入力クロックソースに高速オンチップオシレータ(HOCO)を選択できるようになりましたので、メインクロックがなくてもICLKを最大周波数で動作できます。

これでRXマイコンの書き込みのハードルも下がったかなと思います。

プログラム的な変更点

RX631からRX651でプログラムを書き換えたときの主な変更点を説明します。

ROMWTレジスタの設定

RX651からICLKを50MHz以上で動かす場合、ROM ウェイトサイクル設定レジスタ (ROMWT)の設定が必要となりました(マニュアルp.312「9.2.2 ROM ウェイトサイクル設定レジスタ (ROMWT)」を参照)。

そのため、メインクロックの設定とICLKの設定の間にROMWAITレジスタの設定を以下のように加えました。

/*---- MainCLK, SUBCLK and RTC Initialization ----*/
void init_clock(void){
     ~略~
    // Main CLK setting
    RTC.RCR4.BIT.RCKSEL     = 1;    // Select main CLK as count source
    SYSTEM.MOSCCR.BIT.MOSTP = 0;    // Main CLK ON
    for(i=0;i<1000;i++);            // Wait about 50ms

    // ROMWAIT setting
    SYSTEM.ROMWT.BIT.ROMWT  = 2;
    while(SYSTEM.ROMWT.BIT.ROMWT!=2);  // ROM wait cycle = 2cycle

    // SYSTEM CLK setting
    SYSTEM.PLLCR.BIT.PLIDIV = 0x0;  // Main CLK divided by 1
    SYSTEM.PLLCR.BIT.STC    = 0x17; // Main CLK multiplied by 12
     ~略~
}

MTU3とRSPIがPCLKAを使用

RX631ではMTU3とRSPIはクロックにPCLKBを使用していましたが、RX651ではPCLKAを使用しています。それなので、MTU3とRSPIがPCLKBで動いていると勘違いしないように注意する必要があります。

スピーカーを鳴らしたときに音が高くなっていたので、気づくことができました。

センサーホルダーでの失敗

図5のセンサーホルダーを3Dプリンタで作成したのですが、失敗したので報告します。

図5:作成したセンサーホルダー
図5:作成したセンサーホルダー

赤外線LEDを光らせて、センサーホルダーを付けたときのAD変換値をみてください。

表:センサーホルダーありのAD変換値
障害物 左前 左横 右前 右横
3607 3634 3587 3564
3689 3747 3661 3673

障害物がセンサーの前に無いときと有るときでAD変換値の差がほとんどありません。

おそらく、原因としてはセンサーホルダーによる散乱光だと考えられます。それにしても、散乱光が強すぎると思いますが....。

センサーホルダーを使う人で、散乱光の対策はどうしているのかと気になったところ以下の記事が見つかりました。

見つけた記事うむ夫の歩み Nucleo-32boardを使ったクラシックマウスの開発その8 ~センサーホルダー~

どうやら、熱収縮チューブを付けてホルダーに挿入すれば良いみたいです。ただ、作成したホルダーの穴の大きさが熱収縮チューブの分を考慮していないので、作り直す必要があります。

試しにセンサーホルダーを外して、赤外線LEDに熱収縮チューブを付けた場合のAD変換値は以下です。

表:センサーホルダーなし、熱収縮チューブありのAD変換値
障害物 左前 左横 右前 右横
350 343 278 574
1916 2078 2316 2951

AD変換の値に差があっていい感じです。

センサーホルダーを付けなくてもいいかなと少し思いましたが、基板にホルダーを差し込む穴もあるので、もう一度作成しなおそうと思います。

おわりに

今回、RX651用のマウス基板の設計とRX651とRX631の違いについて話しました。これで全てのデバイスの動作確認ができましたので、次回から本格的にマイクロマウスのプログラムを作成していきたいと思います。

参考文献

お問い合わせフォーム プライバシーポリシー

© 2021 Setoti All rights reserved.