こんにちは、
クランクとカムの信号に合わせてインジェクションと点火を作動させるドライバを実装する必要があります。
このドライバを実装するための最適なソリューションを理解する必要があります。
私の疑問は次のとおりです:
1) AN4907SW.zip で提供される API は、S32K3xx に存在する eTPU と互換性がありますか?
2)いいえの場合、この API を S32K3xx に適合させるのは良い解決策ですか、それとも ConfigTool を使用するのが最善の解決策でしょうか?
このアプリケーションについて S32K3xx の例はありますか?
よろしく、フランチェスコ。
こんにちは@francescovico
ビッグ エンディアンからリトルエンディアンにデータを変換するには、データ型のサイズに応じてビット シフトとマスクを調整してバイト順序を逆にする必要があります。
GCC は、このプロセスを簡素化する組み込み関数を提供します。例: uint32_t __builtin_bswap32 (uint32_t x)。詳細については、GCC ドキュメントの7.2.3 バイトスワッピング組み込みを参照してください。
こんにちは@VaneB 、
私が正しく理解していれば、オートモーティブ機能 (CRANK、SPARK...) はビッグエンディアンマイクロコントローラ用に作られています。
S32K364 (リトルエンディアン) 上のオートモーティブ機能で eTPU を使用するには、次を選択して関数セットをダウンロードする必要があります。
そして関数を変更します:
uint32_t *fs_memcpy32(uint32_t *dest、uint32_t *source、uint32_t size);
void fs_memset32(uint32_t *開始、uint32_t 値、int32_t サイズ);
各 32 ビット値を交換して、リトルエンディアン コードとパラメータを読み書きするというのは本当ですか?
よろしく、フランチェスコ。
こんにちは@francescovico
電動化アプリケーション向け S32K39/37/36 マイクロコントローラにはeTPU が含まれています。ただし、現在、これらのデバイス向けに利用できる MPC5634 の AN4907 に類似した専用のドキュメントやデモはありません。
ただし、AN4907 ドキュメント、デモ、マイクロコードは S32K39/37/36 ファミリに適していますが、これらのデバイスはリトルエンディアン アーキテクチャを使用していることに注意してください。したがって、メモリ アクセス API を変更する必要があります。
リトルエンディアン に更新された CodeWarrior eTPU 関数セレクタ でモータ制御関連のモジュールを参照できます。
BR、ヴェインB
指摘していただきありがとうございます!
エンディアン変換の問題が発生しました。その結果、欠落した歯のマスクが正しく構成されず、1 回転あたり 350 度、または 1 サイクルあたり 700 度とカウントされました。
現在、元の投稿のデモ アプリは修正されています。
こんにちは@MilanBrejlさん、
現在、Fuel Cyl 1 etpu ドライバを使用しようとしています。
ドライバは s24AngleNormalEnd を「開始角度」として使用し、s24AngleStop で噴射を停止するようです。
u24InjectionTime の持続時間は決して尊重されません。
それは可能ですか?
.rarが添付されていますインジェクターパラメータが以下の「燃料シリンダー 1」のピコスコープ取得を含むファイル:
Etpu_Fuel_Ip_ConfigType fuel_1_config =
{
.s24角度法線終了= DEG2TCR2(-180)、
.s24アングルストップ= DEG2TCR2(-360)、
.s24角度オフセット再計算= DEG2TCR2(-30)、
.u24注入時間= USEC2TCR1(1200)、
.u24補償時間= USEC2TCR1(0)、
.u24注入時間最小値= USEC2TCR1(0)、
.u24オフタイム最小値= USEC2TCR1(0)、
.eGenerationDisable= ETPU_FUEL_GENERATION_ALLOWED
};
ピコスコープ取得では、正確に 180° で注入が開始され、360° で注入が停止し、注入持続時間が 30 ms (1.2 ms であるべき) であることが確認できます。
よろしく、フランチェスコ。
こんにちは@MilanBrejlさん、
現在、Fuel Cyl 1 etpu ドライバを使用しようとしています。
ドライバはs24AngleNormalEnd を「開始角度」として使用し、s24AngleStop ですべての噴射を停止するようです。
u24InjectionTime の持続時間は決して尊重されません。
それは可能ですか?
.rarが添付されていますインジェクターパラメータが以下の「燃料シリンダー 1」のピコスコープ取得を含むファイル:
Etpu_Fuel_Ip_ConfigType fuel_1_config =
{
.s24角度法線終了= DEG2TCR2(-180)、
.s24アングルストップ= DEG2TCR2(-360)、
.s24角度オフセット再計算= DEG2TCR2(-30)、
.u24注入時間= USEC2TCR1(1200)、
.u24補償時間= USEC2TCR1(0)、
.u24注入時間最小値= USEC2TCR1(0)、
.u24オフタイム最小値= USEC2TCR1(0)、
.eGenerationDisable= ETPU_FUEL_GENERATION_ALLOWED
};
ピコスコープ取得では、正確に 180° で注入が開始され、360° で注入が停止し、注入持続時間が 30 ms (1.2 ms であるべき) であることが確認できます。
よろしく、フランチェスコ。
こんにちは@MilanBrejlさん、
おっしゃる通り、 s24AngleOffsetRecalc は正の数である必要がありますが、次のように記述します。
s24角度オフセット再計算 = DEG2TCR2(30)
結果は同じです(。
私は 16 チャネルの 2 つの ETPU (A と B) を備えた S32K364 を使用しています。
ETPUA で燃料ドライバーを使用するとドライバーは正常に動作しますが、ETPUB チャネル 0 を使用する必要があります。
私の必要性は、STAC レジスタを使用して、ETPUA から ETPUB に TCR1 と TCR2 を共有することです。
STAC レジスタが正しく初期化されていない可能性があります。
よろしく、フランチェスコ。
こんにちは@francescovicoさん、
これは、eTPU1 から eTPU2 に TCR1 と TCR2 を共有するように STAC_ENG1 および STAC_ENG2 レジスタを設定する方法です。
役に立つかどうか教えてください。
よろしくお願いいたします。
ミラノ
こんにちは@MilanBrejlさん、
私のレジスターはあなたの提案と全く同じです:
しかし、問題はまだ存在しています。
添付のピコスコープ取得では、ETPU A で生成されたスパークが青色で、ETPU B で生成されたスパークが赤色で確認できます。
両方のスパークの終了角度は 180 度、滞在時間は 8000 マイクロ秒です。
よろしく、フランチェスコ。
こんにちは@francescovicoさん、
私のサイトでもあなたの問題を再現し、根本的な原因を見つけました。両方の eTPU エンジン間で TCR1/TCR2 時間/角度バスを共有するだけでは不十分です。スパークおよび燃料機能は、実際のエンジン速度に基づいて時間を角度に変換します。TRR(ティック レート レジスタ)を使用します。このレジスタは、Angle Clock ロジックの一部であり、eTPU A で実行される Crank eTPU 機能によって管理されます。したがって、TRR の正しい値は eTPU A でのみ保持されます。次に、eTPU B TRR を使用した eTPU B の時間から角度への変換で間違った結果が返されます。
これはかなり基本的な問題で、おそらく両方の eTPU エンジンでエンジン制御を実行している人に会ったことがないので、これは解決されていません。特に、新しい S32K3 デバイスは 16+16 チャネルに制限されているため、これは重要になります。このユースケースを提起していただき、またお待ちいただきありがとうございます。
添付のデモ アプリケーションは、(このスレッド内の) 以前のものに基づいており、次の変更が追加されています。
どこ
これが役に立つことを願います。
よろしくお願いいたします。
ミラノ
こんにちは@MilanBrejlさん、
今では完璧に動作しています。
サポートしていただき本当にありがとうございます!
よろしく、フランチェスコ。
こんにちは。私もK396基板について調べており、クランクシャフト、カムシャフト、オイルインジェクターにETPUを使用したいと考えています。この件についてもう少し詳しくお話しいただけますでしょうか?