Config_ICUでのIRQの設定について

いつも大変お世話になっております。リューキィです。

現在、RX65N Envision Kitでロータリーエンコーダを使用した試作機の開発をしているのですが、

信号の入力も表示も出来ているのですが、なぜか1回転した時の数字がズレてしまう事が多々発生してしまっています。

ロータリーエンコーダの接続の方法や、接続端子の接触不良等も疑ったのですがどうやら問題なさそうで、次にマイコン側の端子の設定

を疑っている次第です。

13chのD7(IRQ1)とD6(IRQ2)ロータリーエンコーダの信号線は接続しており、

モジュールのConfig_ICUでIRQ1/2ともに立上りエッジのレベル15 フィルタ無しにしてあります。

また、メインソース上で

R_GPIO_PinDirectionSet( GPIO_PORT_D_PIN_1, GPIO_DIRECTION_INPUT );
gpio_err |=R_GPIO_PinControl (GPIO_PORT_D_PIN_1, GPIO_CMD_IN_PULL_UP_ENABLE);
R_GPIO_PinDirectionSet( GPIO_PORT_3_PIN_2, GPIO_DIRECTION_INPUT );
gpio_err |=R_GPIO_PinControl (GPIO_PORT_3_PIN_2, GPIO_CMD_IN_PULL_UP_ENABLE);

で入力端子設定とプルアップ設定も行っております。

(※もしかしたらこれが二重設定とかになっていて邪魔をしているのか??とも思い始めました)

また、ロータリーエンコーダのカウントは

IRQ1が立ち上がった際に、IRQ2の状態を見て0だったらカウントをインクリメント

IRQ2が立ち上がった際に、IRQ1の状態を見て0だったらカウントをデクリメント

としています。(それぞれの立ち上がりを見ずとも、一行目にelseでデクリメントすれば良いのもわかっているのですが、ズレが発生しているので何か問題があるのかもと思い、わざと

分けてあります)

ロータリーエンコーダの1周の分解能は40なので、非常に少ないのですが数回転回すとズレる状態です。

何かわかる方がいらっしゃいましたら、ご指導いただきたく思います。

よろしくお願い致します。

  • リューキィさん、こんにちは。NoMaYです。

    自分なら、こんなことを試してみるような気がする、という一案ですけれども。

    (1) ロータリエンコーダの出力波形(つまりマイコンへの入力波形)をオシロで観測する
    (2) マイコン側のIRQルーチンで空ポートにHigh/Lowを出力するようにして(1)と同時にオシロで観測する
    (2') あるいは角度を保持している変数があると思われるけれども、それのインクリメント時/デクリメント時にHigh/Lowを出力するとか
    (3) 4ch以上のオシロを使う、というか、ロジアナの方が良いのかな

    (4) 観測結果を見ながら何か変なところは無いか探す
    (5) 原因を考察する

    まったくのあてずっぽうで書くのですけれども、数回転すると期待値からズレるということですので、、、

    (A) そもそも、マイコン入力波形の電圧幅が0~3.3Vのフルスイングでなくて、ずっと小さい電圧幅になっているとか?
    (B) マイコン入力波形がなまっていて、IRQ割り込みの発生がバタついているとか?(そんなゆっくりな変化では無いと思いますが、、、)
    (C) ロータリエンコーダの出力波形のパルス幅がどれくらいか分かりませんが、それよりずっと長い割り込み禁止区間があるとか?

    そういうところが気になりました。

    [追記]

    ロータリエンコーダとは - マイクロテック・ラボラトリー
    www.mtl.co.jp/manufacture/encoder.html

    Google検索: ロータリエンコーダ
    www.google.com/search?q=ロータリエンコーダ
     

  • NoMaY、こんにちは。リューキィさんです。

    いつもいつもありがとうございます。

    ロータリーエンコーダのメーカーにも問い合わせてみたんですが、現状オシロで見てみるしかもうやれることが無さそうな感じです。

    エンコーダ側の電源入力は5Vで、出力も5Vなので電圧幅が足りないってことは無いと思うんですよね。。。

    試しにIRQ2・3が5Vトレラントだったんで、そっちで3.3Vに降圧せずに5Vで受けてみたりもしたんですが、変化なしでした。正転逆転共にたまに狂う感じで、インリメントなら多くて、デクリメントなら少ない現象なので、もしかしてチャタリングが起きている???とも思っているんですが、オシロを見ていないので今のところ未解決です。ちなみに、IRQ3の端子でエンコーダを動かした際は、一瞬でアンダーフローしてフリーズ&次回プロジェクト起動時に画面が真っ暗なままという現象に襲われました。(IRQ2と設定の仕方やコードも、まったくそのままでしたんですが。。。)

    社内にしっかりとしたオシロが無いので(元々そういうのを扱ってきていないので)手詰まり感しか無いです。。。

  • リューキィさん、こんにちは。NoMaYです。

    ところで、使用されているロータリエンコーダのメーカと型番は何でしょうか?データシートのURLも知りたいです。

  • マイクロテック・ラボラトリーの製品で

    https://www.mtl.co.jp/dcms_media/other/me-30-p_series.pdf

    です。

  • リューキィさん、こんにちは。NoMaYです。

    データシートのURLをありがとうございました。今までの文面から察すると、電圧出力タイプのME○-30-40-Pという型番ですかね。(なお、○の部分は、S、H、D、の何れか。)

    そして、ME○-30-40-Pには5Vを給電していて、ME○-30-40-Pの出力を分圧してから、P32(IRQ2-DS)とPD1(IRQ1-DS)に入力していて、マイコン内部でプルアップ抵抗を有効にしている、ということですね。また、IRQのノイズフィルタはOFFにしている。

    具体的に、何回転ぐらいで何カウントずれるのでしょか?(何回転ぐらいで1カウントずれる?と言うべきなのかな?) また、そもそもどうやって回しているのですか?どれぐらいの速さで回しているのですか?(40カウントのエンコーダということは、1カウント当たり360/40=9度ですかね。直角90度を10等分ですかね。)


    ちなみに、データシートを見ると、電圧出力タイプといっても、2.2KΩでプルアップしたオープンコレクタを使った回路のことのようですので、どう分圧しているのか気になりました。(エンコーダの出力端子とGNDの間に3.3KΩを入れた?)

    そして、マイコンの設定で気になったのは、マイコン内部のプルアップ抵抗は要らないのでは?というのと、ノイズフィルタはONの方が良いのでは?ということでした。

  • ロータリーエンコーダを使う上でのポイントは、正回転、逆回転で上手くカウントするかです。

    チャタリングが有れば、細かく振動したのと同じです。それらを上手く処理出来ているかです。

    2個のモーメンタリー・スイッチで2相信号を作って実験してみたらどうですか。

  • こんにちは。NoMaYです。

    少し脱線しますけれども、RXマイコンのタイマの位相計数モードというのが、これを自動でやってくれるものかな。

    RX65Nグループ、RX651グループ ユーザーズマニュアル ハードウェア編
    R01UH0590JJ0230 Rev.2.30 Pages 2763 2019.06.20
    www.renesas.com/jp/ja/document/mah/rx65n-group-rx651-group-users-manualhardware-rev230#page=1028

    24.3.6.2 カスケード接続32 ビット位相計数モード

    …略…

    カスケード接続32 ビット位相計数モードは、A 相、B 相とZ 相の三相信号の入力が可能です。A 相/B 相に外部入力位相クロックMTCLKA/MTCLKB またはMTCLKC/MTCLKD、Z 相にMTIOC1A をそれぞれエンコーダパルスの信号とします。

    …略…


    [追記]

    カウンタの基礎知識 - コンテック
    www.contec.com/jp/support/basic-knowledge/daq-control/counter/#anc-03

    Google検索: ロータリエンコーダ 位相計数カウンタ OR 位相計数モード
    www.google.com/search?q=ロータリエンコーダ 位相計数カウンタ OR 位相計数モード

    Google検索: ロータリエンコーダ ソフトウェア OR プログラム
    www.google.com/search?q=ロータリエンコーダ ソフトウェア OR プログラム
     

  • NoMaY、こんにちは。リューキィさんです。

    ズレに関しては法則性が見つからないです。何回回してもズレない時もあれば、突然ずれたり、ゆっくり回した方がズレているような気もしますが、高速で複数回(回数にしばりなし)回してもズレる時はズレています。

    接続方法が怪しいのかと思い、メーカーにも問い合わせたんですが、デジタル入力端子に出力端子を入れて問題ないと言われたんですが、出力端子とGNDの間に抵抗がいるんですかね???(本当にそこらへんが全くわからなくて。。。独学でコンデンサとか勉強してもネットで読んでもさっぱりな状態です。プログラムなら、なんとか食らいつけるんですけど、回路は基礎知識が無さ過ぎて。。。)

    マイコン内部の設定ですが、先日投稿した後に、試しにgpioの方のインプット設定やプルアップ設定をコメントアウトしてみても、動作したので今は外しています。フィルタはいじってないので、入れて試してみます。

  • リカルドさん。こんにちは、リューキィです。

    ご指導ありがとうございます。

    チャタリングなのだろうか?と自分の根拠のない仮定です。

    2相信号を作るという考え方があるのですね!ちょっとその考え方自体を理解していないので、調べてみたいと思います!!ありがとうございます!!

  • すみません!!NoMaYさん

    「さん」が抜けてました。