いつも大変お世話になっております。リューキィです。
現在、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さん、こんにちは。リューキィです。
実際に使う際は、モーターを回してロータリーエンコーダで回転から、高さを検出するだけです。
強いて言えば、指定した高さ付近でモーターの速度を下げて、ちょうどで停止させたいくらいなのですが、それらの動作はリレーモジュールを使い、スピコンの効いている回路に切替ます。それらの命令はRX65Nから飛びます。
ロータリーエンコーダを回しながらとは、IRQ2は気にせずに、エンコーダからの出力信号を同時に拾う状態でしょうか?
リューキィさん、こんにちは。NoMaYです。> ロータリーエンコーダを回しながらとは、IRQ2は気にせずに、エンコーダからの出力信号を同時に拾う状態でしょうか?IRQ2は気にせずに、でよいです。エンコーダからの出力は、前のリプライの時点では拾うつもりはなかったのですが、言われてみれば、拾って頂いた方がよいかな、と思うようになり、拾って頂きたいです。あと、今の時点では、RX65N Envision Kitに別の(A相/B相以外の)信号が入って来たりとか、しているのでは無いようですね。
同期をとっているわけではないので、ズレますが、5ms 2ms 1msの時です。
入力端子は今の所、この二つだけです。先々には傾斜を見るアナログセンサーを付けるかもしれませんが、あくまで先の話です。
実際に乗せる際に気になっているのは、アースがボディアースであることですかね。これも乗せてからなので、今は関係ないです。
リューキィさん、こんにちは。NoMaYです。どうもありがとうございました。何かこれといって差異はありませんでしたね。また悩んでみます。今日は、もう頭が働きそうに無いです、、、
本当にいつもすみません。
ゆっくりご自愛ください。自分は出張等があり、次回触れそうなタイミングは火曜日になりそうです。
リューキィさん、こんにちは。NoMaYです。再開した時にやることをメモしました。(1) 再開時に下のオシロの画面コピーの1枚目と同じ現象になるか念の為に確認する。これまで頂いていた投稿から感じるのは、そちらの環境がいくら何でも不安定過ぎるかなぁ、という感じがする為です。(2) 以下の設定で上記の(1)と同じことをするとどういう波形になるか?(2-1) emWinを止める(これまでの投稿の記載で書けば、main()のMainTask()呼び出しをコメントアウトする)(2-1') 上記の(1)ではemWinが動いていた(なおemWinが動くことに伴ってLCDドライバ/DRW2Dドライバ/R_SCI_IICドライバ等も動いている)(2-2) 他方で、main()にはIRQ割り込みとポート出力が使えるようにコードを入れておく(3) 下のオシロの画面コピーの2枚目の時にemWin(及び関連ドライバ)は動いていたか?(3-1) main()のMainTask()呼び出しのコメントアウトを解除したものの、MainTask()の中でコメントアウトされたものが無かったか?(3-2) CMTを1つ追加で使ったわけであるが、そのせいでemWin(及び関連ドライバ)で必要なCMTが不足して動作不能になっていなかったか?(4) IRQ割り込みを遅延させているのは何の処理か?(暫定的に以下の(4-1-1)や(4-1-2)であると仮定)(4-1-1) 通常処理での何かの長時間のclrpsw_i~setpsw_iの期間?(4-1-2) 何かの長時間の割り込み処理?(4-2) RX65N Envision Kitにもともとあったものなのか? リューキィさんのアプリケーションコードによるものか?(4-3) どうやって `何の処理が?` というのを特定するか (私の課題かなぁ)(5) どういう対処案があるか(5-1) hirakuni45さんのアドバイスの方法hirakuni45さんからのリプライ/アドバイスcommunity-ja.renesas.com/cafe_rene/forums-groups/beginners/f/002-2095199602/9604/config_icu-irq/46944#46944(5-2) 多重割り込みもしもemWinのバイナリライブラリの中だと、、、詰み?、、、(まだDTCで対処出来る可能性があるだろうか?、、、)以下、これまでに頂いていたオシロの画面コピーの一部です。(私の書き込みがあります。)黄色: ロータリエンコーダからの出力ピンク色: それをIRQに入れて立ち上がりエッジ検出の割り込み処理でデバッグ用ポート出力をトグルしたもの黄色: 未測定ピンク色: CMTで1msの割り込みを発生させて割り込み処理でデバッグ用ポート出力をトグルしたもの
いつもいつも事細かにありがとうございます。
すみません。恥ずかしくて言い出せ無かったのですが、main()内にMainTask()が見つかりません。前回、emWinが動いたままでオシロを使った検証をしていたのも、実はそれが理由です。。。
e2studioでMainTask()のワードで検索も掛けてみたのですが、
この状態で、RX65n_GUI_base_proj.c内のMainTask()をコメントアウトしてデバッグをかけても、画面は表示された状態のままです。
検索ワードをMainTaskで切っても
こんな感じです。
話が少し変わりますが、先日の検証で端子への立ち上がりの割込みIRQは今のところ原因不明でズレが生じるのですが、タイマでの割込みでは割込みにズレが生じないので、タイマの割込みを100μsにしてP32の状態を監視しし、トルグしてみるとズレ無しで拾い上げることが出来ました。(先日IRQではズレが生じたので、オンオフの電気的なズレを疑ったのですが、しっかりとオンオフの状態が確認出来ました)
それで立上りのタイミングを監視し、同時にP33の状態を見ることで、一応はロータリーエンコーダの活用が出来ている状態にはなりました。(前転逆転を繰り返すと、タイミングによってはインクリメント・デクリメントが続けて起こる現象もありましたが、立下りも見ることで、対応できました。以下がソース画面です。)
問題点:1)TMR0は別の事(モーターの突入電流を防ぐ為のリレー切替時)で使用していたのですが、こちらに充てると別のタイマかカウントが必要になる。
2)そもそもなぜIRQでの割込みがズレていたのか理由がわからない。(自分の知識やスキルではわからない気しかしませんが。。。)
3)マイコンの起動時にカウントが1ズレる事がある。ロータリーエンコーダの状態をタイマで監視しているので、監視開始時に条件が揃っていると、立上りとみなし作動してしまう。(これはIRQでもありました。IRQの場合はタイマで回避できそうですが)
リューキィさん、こんにちは。NoMaYです。とり急ぎですが、、、私の手元では以下のフォルダを見たことが無いです。aw/Generated/aw/Target/また、添付されていた画面コピーの第一印象では、以下のファイルはビルド対象から外れていると思われます。aw/Target/src/RX65n_GUI_Base.c私が以前に渡した土台のプロジェクトでは、main()は以下のソースにある筈なのです。ありませんでしょうか?src/rpb_rx65n.cもし、そのソースが消えているのでしたら、そもそもmain()はどこにあるのか探してみて頂けないでしょうか?あと、e2 studioが2022-10になってますね?いつ頃入れ替えましたかね?ひょっとして、emWinはV6.26ですか?
リューキィさん、こんにちは。NoMaYです。> 2)そもそもなぜIRQでの割込みがズレていたのか理由がわからない。(自分の知識やスキルではわからない気しかしませんが。。。)以下の文でIRQ割り込みが遅れること自体はイメージ出来ますか?(誰が原因かは脇へ置くとしてですけれども。) ただし、今回の件では、私も、以下の理由なのか?違う理由なのか?以下だとしても誰が原因なのか?、分かっていません。現状のFIT/CGでは仕様として一度に1つの割り込みしか受け付けません。また、RXマイコンの機能として、割り込みをプログラム上で禁止するということが出来ます。ですので、以下のようなことが起こり得るのです。(1) 既に何らかの割り込み処理が実行中である時にIRQ割り込みが発生しても実行中の割り込みが終わるまでIRQ割り込みに飛ばない(2) どこかで誰かが割り込みを禁止しているとその誰かが割り込みを許可に戻さない限りIRQ割り込みに飛ばない
メインは以下の所です。このメインの中にはMainTask()はありません。。。
emWin自体はver6.22でした。
e2studioは色々バグった際にe2studioそのものを入れ替えてみたので、今ダウンロードフォルダを見たところ、11/5となっていました。