Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

TOMモジュールを使用してPWMを一定位相シフト用に構成したいのですが、TC377Tpコントローラーを使用しています。

設定方法を知りたい。 構成するコード例を提供するCAN

注:私はATOMを使用していません

0 件の賞賛
1 解決策
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちはナンビ、

 

私は私が直面していた問題を解決しました。

よろしく

ナレシュクマール

元の投稿で解決策を見る

0 件の賞賛
5 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

CAN 、あなたの側から期待される波形を共有しますか?

UMの「28.16.3位相シフト制御装置」のセクション CAN 確認できます。

よろしくお願いいたします。

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

私はあなたが私がtimモジュールを使用していないことを提案した章を通過しました、

私はTOMモジュールを使用しています

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

/*
* PWM.c
*
*作成日:2023年10月7日
*作成者:40030868
*/


#include "PWM.h"
#include "IfxGtm_Tom.h"
#include "IfxGtm_reg.h"
#include "IfxGtm_Tom_Pwm.h"
#include "IfxGtm_PinMap.h"
#define トップアスウィッチ &IfxGtm_TOM0_1_TOUT54_P21_3_OUT
#define トップBSウィッチ &IfxGtm_TOM0_3_TOUT56_P21_5_OUT
#define トップCSウィッチ &IfxGtm_TOM0_14_TOUT6_P02_6_OUT
#define ボットアスウィッチ &IfxGtm_TOM0_2_TOUT55_P21_4_OUT
#define ボットウィッチ &IfxGtm_TOM0_13_TOUT5_P02_5_OUT
#define ボットCSウィッチ &IfxGtm_TOM0_6_TOUT59_P20_0_OUT
#define DISABLE_CLOCK 0x555555u
#define サクセス1U
#define リセット 0U
static uint8 Tom1Init(GtmConfig0_d *stTom);
静的 uint8 g_stat_ucClockStatus_D = 0u;
静的Ifx_TimerValue g_stat_ulnTomDutyCycle_TA = 0u;
静的Ifx_TimerValue g_stat_ulnTomDutyCycle_TB = 0u;
静的Ifx_TimerValue g_stat_ulnTomDutyCycle_TC = 0u;
IfxGtm_Tom_Timer_Config stTimerConfig_D;
IfxGtm_Tom_PwmHl_Config stPwmHlConfig_D;
静的App_GtmTomPwmHl_D g_stat_GtmTom1_D;
静的GtmConfig0_d g_stat_Con_Config[1]={{INV_SWITCHING_FRQUENCY, INV_DEADTIME, IfxGtm_Tom_0, INV_MAX_TOM_CHANNEL, IfxGtm_Tom_Ch_0,{TopASwitch, TopBSwitch, TopCSwitch},{BotASwitch, BotBSwitch, BotCSwitch}
}};

 

 


uint8 GTMTom1Pwm_Init_D(無効)
{
uint8 ucTom1Status = 0u;
// uint8 ucTomStatus = 0u;
g_stat_ucClockStatus_D = Enable_GTMClock_Inv_D(); /*Enable CMU Clock*/
ucTom1Status = Tom1Init(&g_stat_Con_Config[0]); /*Enable TOM1 Channel*/
ucTom1Status = ucTom1Status&g_stat_ucClockStatus_D; /*Compute the return variable*/
return ucTom1Status;
}

 

 

static uint8 Tom1Init(GtmConfig0_d *stTom)
{
uint8 ucTomStatus = RESET, ucLoopCounter =RESET;

/* st_Gtm トム構成 */
IfxGtm_Tom_Timer_Config stTimerConfig;
IfxGtm_Tom_PwmHl_Config stPwmHlConfig;
IfxGtm_Tom_ToutMapP st_aCcx[INV_MAX_TOM_CHANNEL];
IfxGtm_Tom_ToutMapP st_aCoutx[INV_MAX_TOM_CHANNEL];

/****TOM 周波数設定*******
IfxGtm_Tom_Timer_initConfig(&stTimerConfig_D, &MODULE_GTM);/*タイマーチャネルのデフォルト設定をコピーします*/
stTimerConfig_D.base.frequency = stTom->m_fSwitchingFrequency;/*デフォルトのスイッチング周波数を更新します*/
stTimerConfig_D.ベース.min解像度 = 1.0F / stTimerConfig_D.基本周波数; /*パルスの最小分解能を計算します*/
stTimerConfig_D.tom = stTom->m_etTom;/*TOM グループを選択してください*/
ucTomStatus = IfxGtm_Tom_Timer_init(&g_stat_GtmTom1_D.drivers.timer, &stTimerConfig_D);/*TOM モジュールを設定します*/
/**************************************************/
/******TOM チャネル構成*******
IfxGtm_Tom_PwmHl_initConfig(&stPwmHlConfig_D);/*デフォルトのPWMチャネル構成をコピーします*/
for(;UCループカウンター{ /* Copy the Channel Details*/
st_aCcx[ucLoopCounter]= stTom->m_stCcx[ucLoopCounter];
st_aCoutx[ucLoopCounter]= stTom->m_stCoutx[ucLoopCounter];
}
stPwmHlConfig_D.timer = &g_stat_GtmTom1_D.drivers.timer; /*タイマーを選択してください*/
stPwmHlConfig_D.トム = stTimerConfig_D.トム; /*TOM モジュールの選択*/
stPwmHlConfig_D.base.deadtime = stTom->m_fDeadTime;/*ゲート切り替え時間によるデッドタイム*/
stPwmHlConfig_D.base.channelCount = INV_MAX_TOM_CHANNEL;/*最大TOMチャンネルをコピー*/
stPwmHlConfig_D.ccx = &st_aCcx[0];/*st_aCcxピンをコピーします*/
stPwmHlConfig_D.coutx = &st_aCoutx[0];/*COUT ピンをコピーします*/
stPwmHlConfig_D.base.outputMode = IfxPort_OutputMode_pushPull;

ucTomStatus &= IfxGtm_Tom_PwmHl_init(&g_stat_GtmTom1_D.drivers.pwm, &stPwmHlConfig_D);/*PWM チャネル レジスタを構成します*/
ucTomStatus &= IfxGtm_Tom_PwmHl_setMode(&g_stat_GtmTom1_D.drivers.pwm, Ifx_Pwm_Mode_centerAligned );/*PWMカウントをセンターアライメントモードとして構成します*/
IfxGtm_Tom_Timer_run(&g_stat_GtmTom1_D.drivers.timer); /*PWM タイマーの開始*/
ucTomStatusを返します。
}

extern uint8 Enable_GTMClock_Inv_D(void)
{
ブール値 bInterruptState = 0u;
Ifx_GTM *st_Gtm = &MODULE_GTM;
uint8 ucClkStatus = 0u;
IfxGtm_enable(st_Gtm);/*モジュール クロックst_Gtm有効にします。 st_Gtm モジュールクロック = SPB クロック*/
g_stat_GtmTom1_D.info.gtmFreq = IfxGtm_Cmu_getModuleFrequency(st_Gtm);


IfxGtm_Cmu_enableClocks(st_Gtm, DISABLE_CLOCK);/*コンフィギュレーション前に CMU クロックを無効にします*/
/* グローバルクロック周波数を設定します */
IfxGtm_Cmu_setGclkFrequency(st_Gtm, g_stat_GtmTom1_D.info.gtmFreq); /*TIM モジュール制御パイロット信号キャプチャ用に CMU CLK 0 を設定します*/
g_stat_GtmTom1_D.info.gtmGclkFreq = IfxGtm_Cmu_getGclkFrequency(st_Gtm);/*将来の使用のためにデータ構造を読み取って保存します*/

IfxGtm_Cmu_setClkFrequency(st_Gtm, IfxGtm_Cmu_Clk_0, g_stat_GtmTom1_D.info.gtmGclkFreq);
g_stat_GtmTom1_D.info.gtmCmuClk0Freq = IfxGtm_Cmu_getClkFrequency(st_Gtm, IfxGtm_Cmu_Clk_0, 真);

/* 割り込みを再度有効にします */
IfxGtm_Cmu_enableClocks(st_Gtm, IFXGTM_CMU_CLKEN_FXCLK |IFXGTM_CMU_CLKEN_CLK1 |IFXGTM_CMU_CLKEN_CLK0);/*CMU_FXCLK0とCMU_CLK1を有効にします*/
ucClkStatus = SUCCESS;
ucClkStatus を返します。
}

 

void UpdateDutyCycle_D(float32 SwitchingFrequency, uint8 ucDutyCycle_TA,uint8 ucDutyCycle_TB,uint8 ucDutyCycle_TC)
{
uint8 周波数更新 = リセット;
IfxPort_togglePin(LED3);
IfxGtm_Tom_Timer *stTimer = &g_stat_GtmTom1_D.drivers.timer;
IfxGtm_Tom_PwmHl *stPwmHl = &g_stat_GtmTom1_D.drivers.pwm;
Ifx_TimerValue ウルントンタイム[INV_MAX_TOM_CHANNEL];

uint32 ActualDutyCycle=RESET, DutyCycle_TA=RESET, DutyCycle_TB=RESET, DutyCycle_TC=RESET;

DutyCycle_TA=(uint32)ucDutyCycle_TA;
DutyCycle_TB=(uint32)ucDutyCycle_TB;
DutyCycle_TC=(uint32)ucDutyCycle_TC;

周波数更新= IfxGtm_Tom_Timer_setFrequency(stタイマー、スイッチング周波数);
stPwmHl->base.maxPulse=stTimer->base.period-stPwmHl->base.minPulse;
ActualDutyCycle=stTimer->base.period/PERCENTAGE_FACTOR;
g_stat_ulnTomDutyCycle_TA = 実際のデューティサイクル*DutyCycle_TA;
g_stat_ulnTomDutyCycle_TB = 実際のデューティサイクル*DutyCycle_TB;
g_stat_ulnTomDutyCycle_TC = 実際のデューティサイクル*DutyCycle_TC;

ulnTonTime[0] = g_stat_ulnTomDutyCycle_TA;/*チャンネル1 st_aCcx、カウトデューティサイクル*/
ulnTonTime[1] = g_stat_ulnTomDutyCycle_TB;
ulnTonTime[2] = g_stat_ulnTomDutyCycle_TC;
for(uint8 ucLoopCounter = 0; ucLoopCounter < 3; ucLoopCounter++)
{
IfxGtm_Tom_Timer_disableUpdate(stTimer); /*Stop Data Updation from Shadow Register to CM0 and CM1*/
IfxGtm_Tom_PwmHl_setOnTime(stPwmHl, &ulnTonTime[0]); /*Update DutyCycle in Shadow Register*/
IfxGtm_Tom_Timer_applyUpdate(stTimer); /*Enable Data Updation from Shadow Register to CM0 and CM1*/
//}

}

 

 

 

私は.hを追加します 以下のコンテンツ

 

 

/*
* PWM.h
*
*作成日:2023年10月7日
*作成者:40030868
*/

#ifndef SERVICELAYER_PWM_H_
#define SERVICELAYER_PWM_H_
#include
#include "SysSe/Bsp/Bsp.h"
#include "IfxGtm_Tom.h"
#include "IfxGtm_reg.h"
#include "IfxGtm_regdef.h"
#include "IfxGtm_Tom_Pwm.h"
#include "IfxGtm_PinMap.h"
#include "IfxGtm_Tom_PwmHl.h"
#define INV_SWITCHING_FRQUENCY 85000U
#define INV_DEADTIME 0.00000030F
#define INV_MAX_TOM_CHANNEL 3U
#define PERCENTAGE_FACTOR 100U

 


typedef 構造体
{
構造 体
{
float32 gtmFreq;
float32 gtmGclkFreq;
float32 gtmCmuClk0Freq;
float32 gtmCmuClk1Freq;
}情報;
構造 体
{
IfxGtm_Tom_Timer timer;
IfxGtm_Tom_PwmHl pwm;
}ドライバー;
構造 体
{
uint32 slotTimer;
}isrCounter;
}App_GtmTomPwmHl_D;


typedef 構造体
{
float32 m_fSwitchingFrequency;
float32 m_fDeadTime;
IfxGtm_Tom m_etTom;
uint8 m_ucNumberOfChannel;
IfxGtm_Tom_Ch m_eTimerChannel;
IfxGtm_Tom_ToutMapP m_stCcx[INV_MAX_TOM_CHANNEL];
IfxGtm_Tom_ToutMapP m_stCoutx[INV_MAX_TOM_CHANNEL];
}GtmConfig0_d;

void UpdateDutyCycle_D(float32 SwitchingFrequency, uint8 ucDutyCycle_TA,uint8 ucDutyCycle_TB,uint8 ucDutyCycle_TC);
extern uint8 GTMTom1Pwm_Init_D(void);
extern uint8 Enable_GTMClock_Inv_D(void);
#endif /* SERVICELAYER_PWM_H_ */

 

 

 

逆にトップに3 pwm、ボトムに3 pwmを生成したいので、このように構成しましたが、このピン(TopCSwitch、BotBSwitch)のpwmを取得していません、理由がわかりません構成のために複数のコードを参照したので CAN これについて私を助けてください。

注:位相シフトの問題は解決されました、今私はこれで問題に直面しています

 

 

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

最初の問題が解決されたので、これを新しいスレッドに移動できますか?

私たちの理解に基づいて、このコードはTopCSwitch、BotBSwitchに期待される4つの出力に対して期待どおりに機能します。これは正しいですか?

予想される波形と観測された波形を提供してください。

よろしくお願いいたします。

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちはナンビ、

 

私は私が直面していた問題を解決しました。

よろしく

ナレシュクマール

0 件の賞賛