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なので、非常に少ないのですが数回転回すとズレる状態です。

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

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

Parents
  • リューキィさん、こんにちは。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と設定の仕方やコードも、まったくそのままでしたんですが。。。)

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

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

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

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

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

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

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

Children
No Data