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です。

    その後、どうでしょうか?既に解決済みでしょうか?前回の後、hirakuni45さんからアドバイスがあったものの、他には、発生しているトラブルの原因の特定に繋がりそうな、また、その原因の回避策に繋がりそうな、そういうリプライは無かったですね。

    実は、あれから何か調査方法はないかと以下のスレッドで私は考えていたのですが、ちょっと難易度が高いかな、という案しか思い浮かばなかったのですが、今しがた、難易度は低めだろう、と思われる案が思い浮かびました。

    難易度は低めだろう、と思われる調査方法案

    (1) 今のプログラムとは別にもうひとつプログラムを作る
    (2) LCDの表示とかそういったものをバッサバッサと捨てて、ロータリエンコーダの信号を調べることのみに専念するプログラムを作る ← 重要
    (3) 1μsec程度でカウントアップするフリーランカウンタをRXスマートコンフィグレータのCGコンポーネントで作る
    (4) まずはロータリエンコーダのA相の信号をP32(IRQ2-DS)とPD1(IRQ1-DS)に入れる
    (5) P32(IRQ2-DS)では立ち上がりエッジのみ検出し、PD1(IRQ1-DS)では立下りエッジのみ検出する
    (6) 検出したら上記の(3)のフリーランカウンタの値をメモリにどんどん残していく
    (7) 文房具屋さんへ行って方眼紙を買ってくる
    (8) 買ってきた方眼紙上で上記の(6)で集めたデータをプロットしてロータリエンコーダの信号の波形を手作業で描いてみる
    (8') 最近、日本で、未だにFAXが使われているとか、未だにフロッピーディスクが使われているとか、話題になったけれども気にしない ← 重要
    (8'') たぶん、ロボットを多用した最先端の自動車工場でも、人手で何かをやっている作業は存在する(と思うのだけれども)
    (9) A相の確認が出来たらB相についても確認する

    (10) もし波形にバタつきが見られたら、それを証拠にロータリエンコーダのメーカさんに原因として考えられることを聞く
    (11) そして波形にバタつきが見られたら、それで症状の説明が付くか考察する
    (12) また波形にバタつきが見られたら、機械式ロータリエンコーダのチャタリング除去と同じやり方を実装してみる

    (X) バタつきが見られなかったら、その時は、また、何か考える

    [メモ]

    あれこれ考えていた別スレッド

    FIT R_SCI_RXモジュールでprintfをfrom inside interrupt routine内から行えるかどうか考えてみるスレッド
    community-ja.renesas.com/cafe_rene/forums-groups/tools/f/forum21/9610/fit-r_sci_rx-printf-from-inside-interrupt-routine/46949#46949
     

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

    いつもいつもありがとうございます。別件の締切が差し迫った仕事が山積みになり、そちらに明け暮れていました。

    ロータリーエンコーダですが、どうもギアの嚙み合わせでのバタつきやノイズ等もかなり影響しているのでは?というところで作業が止まっています。それらを確認するために配線の整理をしたりしていたのですが、また別でコンパイル中にエラーログが出るようになり、それを解析してみようと試行錯誤してたところ、ぐちゃぐちゃになっている状態です。エラーログ自体が意味不明な表示が多いので、難易度が高いです。。。話がそれてすみません。

  • 基本的に、今まではIRQ2が立ち上がった時に、IRQ3の状態(HIGH or LOW)を見て、++ or --をしていたんですが、通常IRQ3の立ち上がりも見る必要があるんでしょうか??

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

    ちょっと待って下さい。幅を広げた写真ですが、これはIRQ2の割り込み処理でポート出力(ピンク色)がトグルしているタイミングが、ロータリエンコーダのA相のパルス(黄色)のハイ幅の半分より後になっていますよね?(なっている箇所が幾つもありますよね?)

    ひょっとして、この文章の意味が既に分からない、の?か??も???、、、

  • そうなんですよね。なんでズレるのかがわからないです。なのでソースがおかしいのかも!?と思い、ソースの画像も付けた次第です。自分が思い描いている感じだと、立ち上がる度にオン/オフしているので、2つの信号の立ち上がりにトルグの立ち上がりと立下りが重なるはずなんですけど。。。

  • もしかして、やっぱり自分が意味を書き違えていますでしょうか???

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

    いやいやいや、これが原因なのですよ。(もう少し正確には、もっと根っこの原因があるのですが、そのせいでこういうことが起きるのです。) その、すみません、失礼を承知で言うと、歴然とマイコンの知識不足、なのですよ。

    次の作業をどうするか考えてみます。

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

    すみません、いや、1msの割り込みは綺麗に入っていたので、まだ何か私も見落としていることがありそうです。

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

    すみません。知識不足なのは100も200も承知なので全然失礼じゃないです。すみません。

    本当にお手数だけお掛けして、申し訳ないです。。。

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

    以下の条件で、もう一度、1msで黄色をトグルさせる写真を何枚か撮って頂けませんか?

    ・ 今日の10:43の写真相当
    つまり
    ・ CMTで1msの割り込みを作る
    ・ それでポート出力をトグルさせる
    ・ MainTask()は動かす
    ただし
    ・ 写真の幅は先ほどの写真のように広げる

    先程のリプライの「1msの割り込みは綺麗に入っていた」は20ms~30msのレベルの割り込み禁止に気を取られていた時の私の理解を書いたものですので、1msの割り込みが正確に1ms毎に入っていたかどうかを、改めて確認したいのです。

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

    > 以下の条件で、もう一度、1msで黄色をトグルさせる写真を何枚か撮って頂けませんか?

    色は、黄色ではなくて、ピンク色ですかね。すみません。

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

    これで良いでしょうか?

    1msタイマでトルグして

    5ms 2ms 1ms の幅で撮影しました。

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

    どうもありがとうございました。はい、それでよいです。他方で、A相とIRQ2の波形では、あんなに歴然と割り込みが遅れているのが見えたのに、この写真では異常が見られませんね。

    ちなみに、ロータリエンコーダを回すと、それに連動して何かの機器が動作して、その機器から通信が入って来たりとか、あるいは、それに連動してRX65N Envision Kitに別の(A相/B相以外の)信号が入って来たりとか、そのようなことはあったりするのでしょうか?


    今思い浮かんだのは、ロータリエンコーダを回しながら先程と同じ写真を撮ってみるとどうなるでしょうか?

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

    実際に使う際は、モーターを回してロータリーエンコーダで回転から、高さを検出するだけです。

    強いて言えば、指定した高さ付近でモーターの速度を下げて、ちょうどで停止させたいくらいなのですが、それらの動作はリレーモジュールを使い、スピコンの効いている回路に切替ます。それらの命令はRX65Nから飛びます。

    ロータリーエンコーダを回しながらとは、IRQ2は気にせずに、エンコーダからの出力信号を同時に拾う状態でしょうか?

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

    > ロータリーエンコーダを回しながらとは、IRQ2は気にせずに、エンコーダからの出力信号を同時に拾う状態でしょうか?

    IRQ2は気にせずに、でよいです。エンコーダからの出力は、前のリプライの時点では拾うつもりはなかったのですが、言われてみれば、拾って頂いた方がよいかな、と思うようになり、拾って頂きたいです。


    あと、今の時点では、RX65N Envision Kitに別の(A相/B相以外の)信号が入って来たりとか、しているのでは無いようですね。

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

    同期をとっているわけではないので、ズレますが、5ms 2ms 1msの時です。

    入力端子は今の所、この二つだけです。先々には傾斜を見るアナログセンサーを付けるかもしれませんが、あくまで先の話です。

    実際に乗せる際に気になっているのは、アースがボディアースであることですかね。これも乗せてからなので、今は関係ないです。

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

    どうもありがとうございました。何かこれといって差異はありませんでしたね。また悩んでみます。今日は、もう頭が働きそうに無いです、、、

  • 本当にいつもすみません。

    ゆっくりご自愛ください。自分は出張等があり、次回触れそうなタイミングは火曜日になりそうです。