こんにちは、
参考までに -
私はeMIOS ICUのチャンネルを使用して、IPWMモードで変化するPWMデューティサイクルを測定しています。現在、私は「ブロッキング」方式でデューティサイクルを正常に測定できています。
私の入力信号は、デューティサイクル100%(実質的にPWMなし)から、私が測定する必要のある特定のデューティサイクルのPWM信号へと変化します。
私の.mex設定は以下のとおりです。
私のサンプルコードは以下のとおりです。
この方法でも動作しますが、信号測定を一度開始し、測定完了前に処理がブロックされるのを避けるため、Emios_Icu_Ip_StopSignalMeasurement() を呼び出すことなく、定期的に Emios_Icu_Ip_GetDutyCycleValues() を呼び出す方が望ましいです。あるいは、測定が完了するたびに割り込みが発生する仕組みでも構いません。
最初に Emios_Icu_Ip_StartSignalMeasurement() だけを呼び出し、定期的に (PWM 周波数が 1kHz の間、1 秒ごとに) Emios_Icu_Ip_GetDutyCycleValues() を呼び出すようにしてみましたが、データが不正確です。
私の理解では、SAICは可変PWM信号(私の用途に合致すると考えています)に適していると思いますが、遅延測定を伴うIPWMも使用できると考えています。デューティサイクルの急激な変化は想定しておらず、周波数も一定であるため、返される結果が数ミリ秒程度遅れたり、古くなったりしても問題ありません。
IPWMを使ってこれを実現する方法、あるいはSAICでしか実現できない方法を明確に説明していただけると大変助かります。
ありがとう
こんにちは、
発生している問題は、S32K3におけるeMIOS ICU IPWMモードの既知の制限事項です。
IPWMは本質的に「測定ウィンドウベース」であり、連続的ではないため、測定を再開/終了せずに定期的に読み取ると、古い値や部分的にしか更新されていない値が得られます。
IPWMは非同期の定期ポーリング向けには設計されていません。
次のいずれかを選択する必要があります。
よろしくお願いいたします。
ピーター