こんにちは、
eMIOS ICU ドライバを使用して、入力 PWM 信号のデューティ サイクルを測定しようとしています。
私はRTD600、S32DS 3.6.2を使用しています。S32K3X4EVB-T172-RevB 評価キットを使用します。
私の立ち上げの目的のため、出力ピンを 50% のデューティ サイクルで PWM 信号として切り替えるだけの PIT を使用しています。オシロスコープを使用して出力動作が意図したとおりであることを確認しました。
プロジェクトをデバッグ モードで実行すると、検出されたデューティ サイクルは 100%、アクティブ時間と周期時間は 65536 のみが表示されます。その他の値はありません。
参考までに、設定のスクリーンショット、コードのスニペット、プロジェクト自体を添付します。
私は、
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-eMIOS-DS3-5-RTD500/ta-p/1992245?pro...
同じように。
SAIC モードと IPWM モードを試しましたが、どちらも効果がありませんでした。(提供されている例からプロジェクトを実行してみましたが、ICUピンからPWM信号を切断しても、読み取り値はすべて100%のデューティサイクルでした)
誰かが私を助けてくれて、私が何を間違っているのか教えてくれるとありがたいです。
こんにちは@PetrS 、
ご返信ありがとうございます!
あなたのアドバイスに従って、MCL で共通 eMIOS バスを構成しましたが、SAIC モードでは適切な読み取り値が得られましたが、IPWM モードでは得られませんでした。
たとえば、IPWM モードで 100 回の読み取りを行った場合、最初の 73 回程度の読み取りは 100% のデューティ サイクル、74 番目の読み取りは 340%、残りは 24% になりますが、これはやや不明瞭な値であり、意味を理解できません。説明のために、IPWM モードでは、毎回 Emios_Icu_Ip_GetDutyCycleValues を呼び出す前に Emios_Icu_Ip_GetPulseWidth を呼び出しており、ICU 構成で IcuSignalMeasureWithoutInterrupt が有効になっています。
SAICモード(IcuSignalMeasureWithoutInterruptが無効で、Emios_Icu_Ip_GetPulseWidthを呼び出さない)では、49~50%前後で推移する適切な値が得られます。
どちらの場合も、返された periodTime が 0 の場合、Emios_Icu_Ip_GetDutyCycleValues の結果を無視します。
IPWMモードに関して何か間違っているのでしょうか?eMIOS ICUとして設定した特定のチャネルに何か制限があるのでしょうか?
これまでのサポートに大変感謝しています。少なくとも SAIC モードが動作しているようで嬉しいです!
こんにちは、
チャネルの内部カウンターが開始されていません。これは、モジュールの GBTE ビットが設定されておらず、チャネルがプリスケール クロックを使用しているために発生します。したがって、グローバル プリスケーラも有効にする必要があります。
理想的には、MCL設定でeMIOS共通サポートを有効にします。
コード内で Emios_Mcl_Ip_Init(INST_EMIOS_0, &Emios_Mcl_Ip_Sa_0_Config) を呼び出します。
BR、ペトル
NXP またはコミュニティの誰かがこの件で私を助けてくれることを願っています。残念ながらまだここに留まっている