在线时间24 小时
UID2080902
注册时间2014-9-16
NXP金币0
TA的每日心情 | 开心 2024-6-14 08:06 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
中级会员
 
- 积分
- 247
- 最后登录
- 2024-6-14
|
以前在k22上做电机控制没有遇到问题,现在把代码移植到KE04。一个定时器控制一个步进电机。用了FTM2和TPM0。加速曲线从500HZ加速的1.5k。遇到的问题,做加减速的时候,TPM0这路电机工作很正常。FTM2这路就出现了问题。1、占空比配置的是50%,结果就10~30%之间波动。2、频率不对,初始频率应该是500hz,结果是1.6K左右。3、加速完频率不对,应该是1.5k,结果是3.7k左右。
配置代码如下。
/********************
**函数名称:电机引脚初始化
**函数说明:
**输入参数:
********************/
void motor_gpio_init(void)
{
/*--------------clock引脚-------------*/
PORT_SetPinSelect(motor1_clock_module, motor1_cloc_pin); //选择定时器模块
PORT_SetPinSelect(motor2_clock_module, motor2_cloc_pin);
/*--------------dir引脚-------------*/
gpio_output_config(motor1_dir_gpio,motor1_dir_pin,0);
gpio_output_config(motor2_dir_gpio,motor2_dir_pin,0);
/*--------------half引脚-------------*/
gpio_output_config(motor1_half_gpio,motor1_half_pin,0);
gpio_output_config(motor2_half_gpio,motor2_half_pin,0);
/*--------------定时器2配置-------------*/
ftm_config_t ftmInfo;
ftm_PWM_Param.chnlNumber = kFTM_Chnl_3;
ftm_PWM_Param.level = kFTM_LowTrue;//低电平更新频率
ftm_PWM_Param.dutyCyclePercent = 50u;//占空比50%
ftm_PWM_Param.firstEdgeDelayPercent = 0U; //定时器0无该参数
FTM_GetDefaultConfig(&ftmInfo);//默认配置
FTM_Init(FTM2, &ftmInfo);
FTM_UpdateChnlEdgeLevelSelect(FTM2, kFTM_Chnl_3, kFTM_LowTrue);
FTM_EnableInterrupts(FTM2, kFTM_Chnl3InterruptEnable);//开中断
EnableIRQ(FTM2_IRQn); //中断使能
FTM_StartTimer(FTM2, kFTM_SystemClock);
/*--------------定时器0配置-------------*/
tpm_config_t tpmInfo;
tpm_PWM_Param.chnlNumber = kTPM_Chnl_1;
tpm_PWM_Param.level = kTPM_LowTrue; //低电平更新频率
tpm_PWM_Param.dutyCyclePercent = 50u;//占空比50%
TPM_GetDefaultConfig(&tpmInfo);
TPM_Init(TPM0, &tpmInfo);
TPM_EnableInterrupts(TPM0, kTPM_Chnl1InterruptEnable);
EnableIRQ(TPM0_IRQn);
TPM_StartTimer(TPM0, kTPM_SystemClock);
}
/********************
**函数名称:电机变速运行
**函数说明:
**输入参数:u8_motor_nunber:电机号,1~2
********************/
void motor_change_speed(uint8_t u8_motor_nunber,uint16_t u16_motor_speed)
{
switch(u8_motor_nunber)
{
case motor1:// 1号电机
FTM_SetupPwm(FTM2, &ftm_PWM_Param, 1u, kFTM_CenterAlignedPwm,u16_motor_speed, CLOCK_GetFreq(kCLOCK_TimerClk));
FTM_SetSoftwareTrigger(FTM2, true);//定时器0无该配置
break;
case motor2:// 2号电机
TPM_SetupPwm(TPM0, &tpm_PWM_Param, 1u, kTPM_CenterAlignedPwm,u16_motor_speed, CLOCK_GetFreq(kCLOCK_TimerClk));
break;
default:
break;
}
}
|
|