//----------------------------------------------------------------------------------------------------
void PWM_Init(void)
{
  //电机
  ftm_init_struct0.FTM_Ftmx = FTM0;	                                        //使能FTM0通道
  ftm_init_struct0.FTM_Mode = FTM_MODE_PWM;	                                //输出PWM模式
  ftm_init_struct0.FTM_PwmFreq = 20000;	                                        //PWM频率18000Hz
  ftm_init_struct0.FTM_PwmDeadtimeCfg=DEADTIME_CH45|DEADTIME_CH67;
  
    //编码器 FTM1:A12 A13    
  ftm_init_struct1.FTM_Ftmx = FTM1;              //只有FTM1和FTM2有正交解码功能
  ftm_init_struct1.FTM_Mode = FTM_MODE_QD;       //正交解码功能
  ftm_init_struct1.FTM_QdMode = QD_MODE_PHAB;    //AB相输入模式
  //编码器 FTM2:A10 A11
  ftm_init_struct2.FTM_Ftmx = FTM2;              //只有FTM1和FTM2有正交解码功能
  ftm_init_struct2.FTM_Mode = FTM_MODE_QD;       //正交解码功能
  ftm_init_struct2.FTM_QdMode = QD_MODE_PHAB;    //AB相输入模式
  
  LPLD_FTM_Init(ftm_init_struct0);
  LPLD_FTM_Init(ftm_init_struct1);
  LPLD_FTM_Init(ftm_init_struct2);

  LPLD_FTM_PWM_Enable(FTM0, FTM_Ch4, 0, PTD4, ALIGN_LEFT);
  LPLD_FTM_PWM_Enable(FTM0, FTM_Ch5, 0, PTD5, ALIGN_LEFT);
  LPLD_FTM_PWM_Enable(FTM0, FTM_Ch6, 0, PTD6, ALIGN_LEFT);
  LPLD_FTM_PWM_Enable(FTM0, FTM_Ch7, 0, PTD7, ALIGN_LEFT);
  
  LPLD_FTM_QD_Enable(FTM1, PTA12, PTA13);//右电机
  LPLD_FTM_QD_Enable(FTM2, PTA10, PTA11);//左电机

}
Example #2
0
void Motor_Init(void)
{
    ftm_init_struct.FTM_Ftmx = FTM0;	
    ftm_init_struct.FTM_Mode = FTM_MODE_PWM;	
    ftm_init_struct.FTM_PwmFreq = 7500 ;
    LPLD_FTM_Init(ftm_init_struct);
    LPLD_FTM_PWM_Enable(FTM0, 
            FTM_Ch0, 
            0, 
            PTC1, 
            ALIGN_LEFT        
            );    
    LPLD_FTM_PWM_Enable(FTM0, 
            FTM_Ch1, 
            0, 
            PTC2, 
            ALIGN_LEFT        
            );    
    LPLD_FTM_PWM_Enable(FTM0, 
            FTM_Ch2, 
            0, 
            PTC3, 
            ALIGN_LEFT        
            );    
    LPLD_FTM_PWM_Enable(FTM0, 
            FTM_Ch3, 
            0, 
            PTC4, 
            ALIGN_LEFT        
            );    
}
/*
 * 初始化FTM的PWM输出功能
 *
 */
void pwm_init(void)
{
#if defined(CPU_MK60DZ10) || defined(CPU_MK60D10)
  ftm_init_struct.FTM_Ftmx = FTM0;	//使能FTM0通道
  ftm_init_struct.FTM_Mode = FTM_MODE_PWM;	//使能PWM模式
  ftm_init_struct.FTM_PwmFreq = 50;	//PWM频率50Hz
  
  LPLD_FTM_Init(ftm_init_struct);
  
  LPLD_FTM_PWM_Enable(FTM0, //使用FTM0
                      FTM_Ch0, //使能Ch0通道
                      angle_to_period(0), //初始化角度0度
                      PTC1, //使用Ch0通道的PTC1引脚
                      ALIGN_LEFT        //脉宽左对齐
                      );  
#elif defined(CPU_MK60F12) || defined(CPU_MK60F15)  
  ftm_init_struct.FTM_Ftmx = FTM2;	//使能FTM0通道
  ftm_init_struct.FTM_Mode = FTM_MODE_PWM;	//使能PWM模式
  ftm_init_struct.FTM_PwmFreq = 50;	//PWM频率50Hz
  
  LPLD_FTM_Init(ftm_init_struct);
  
  LPLD_FTM_PWM_Enable(FTM2, //使用FTM0
                      FTM_Ch0, //使能Ch0通道
                      angle_to_period(0), //初始化角度0度
                      PTD0, //使用Ch0通道的PTD0引脚
                      ALIGN_LEFT        //脉宽左对齐
                      );
#endif
}
Example #4
0
void pwm_init()
{
    FTM_InitTypeDef ftm_init_struct={0};
    ftm_init_struct.FTM_Ftmx = FTM0;	//使能FTM0通道
    ftm_init_struct.FTM_Mode = FTM_MODE_PWM;	//使能PWM模式
    ftm_init_struct.FTM_PwmFreq = 15000;  
    
    LPLD_FTM_Init(ftm_init_struct);
    
    //FTM0 ch4右前 ch5右后 ch6左后 ch7左前
    LPLD_FTM_PWM_Enable(FTM0,FTM_Ch4,0, PTD4,ALIGN_LEFT);
    LPLD_FTM_PWM_Enable(FTM0,FTM_Ch5,0, PTD5,ALIGN_LEFT);
    LPLD_FTM_PWM_Enable(FTM0,FTM_Ch6,0, PTD6,ALIGN_LEFT);
    LPLD_FTM_PWM_Enable(FTM0,FTM_Ch7,0, PTD7,ALIGN_LEFT);
}
Example #5
0
void Motor_Init(void)
{
	/* Initial motor pwm */

	FTM_InitTypeDef motorInitStruct;

    motorInitStruct.FTM_Ftmx = FTM0;
    motorInitStruct.FTM_Mode = FTM_MODE_PWM;
    motorInitStruct.FTM_PwmFreq = MOTOR_FRE;
    motorInitStruct.FTM_PwmDeadtimeCfg = DEADTIME_CH01;
    motorInitStruct.FTM_PwmDeadtimeDiv = DEADTIME_DIV1;
    motorInitStruct.FTM_PwmDeadtimeVal = 0;


    LPLD_FTM_Init(motorInitStruct);
/*----------left motor backward initial--------*/
    LPLD_FTM_PWM_Enable(FTM0,
                        FTM_Ch1,
                        0,
                        MOTOR_LEFT_BACKWARD,  //PTA4
                        ALIGN_LEFT
                        );
/*----------left motor forward initial--------*/
    LPLD_FTM_PWM_Enable(FTM0,
                        FTM_Ch2,
                        PWM_Expect,
                        MOTOR_LEFT_FORWARD,  //PTA5
                        ALIGN_LEFT
                        );
/*----------right motor backward initial--------*/
    LPLD_FTM_PWM_Enable(FTM0,
                        FTM_Ch3,
                        0,
                        MOTOR_RIGHT_BACKWARD,  //PTA6
                        ALIGN_LEFT
                        );
/*----------righ motor forward initial--------*/
    LPLD_FTM_PWM_Enable(FTM0,
                        FTM_Ch4,
                        PWM_Expect,
                        MOTOR_RIGHT_FORWARD,  //PTA7
                        ALIGN_LEFT
                        );
}
Example #6
0
status ftm_pwm_init(mypwm *pwm, uint32 FTM_PwmFreq, uint32 duty)
{
	pwm_init_struct.FTM_Ftmx = pwm->FTM_Ftmx; //使能FTM1通道
	pwm_init_struct.FTM_Mode = FTM_MODE_PWM; //使能PWM模式
	pwm_init_struct.FTM_PwmFreq = FTM_PwmFreq; //PWM频率100Hz
	pwm_init_struct.FTM_PwmDeadtimeCfg = DEADTIME_CH01;
	pwm_init_struct.FTM_PwmDeadtimeDiv = DEADTIME_DIV16;
	pwm_init_struct.FTM_PwmDeadtimeVal = 63;
	if( LPLD_FTM_Init(pwm_init_struct) && \
		LPLD_FTM_PWM_Enable(pwm->FTM_Ftmx, //使用FTM1
						  pwm->chn, //使能Ch1通道
						  duty, //初始化角度30度
						  pwm->pin, //使用Ch1通道的PTD1引脚
						  ALIGN_LEFT        //脉宽左对齐
						  ) )
	{
		return SUCCESS;
	}
	else
	{
		return ERROR;
	}
}
Example #7
0
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  Motor_Set
 *  Description:  Set PWM to Motor
 * =====================================================================================
 */
void Motor_Set(INT32S pwm,INT8U dir)// Called by Strategy Controller . Called Routine.
{
  
    //Dead Area fixed
    if(pwm > 0 && dir == MOTOR_LEFT ) pwm +=900;
    if(pwm < 0 && dir == MOTOR_LEFT ) pwm -=850;
    if(pwm > 0 && dir == MOTOR_RIGHT) pwm +=750;
    if(pwm < 0 && dir == MOTOR_RIGHT) pwm -=700;
  
  
    
    if(pwm >=10000) pwm = 10000;
    if(pwm <= -10000) pwm = -10000;
    
    if(MOTOR_LEFT == dir)
    {
        if(pwm>0)
        {
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch0, 
                    pwm, 
                    PTC1, 
                    ALIGN_LEFT        
                    );    
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch1, 
                    0, 
                    PTC2, 
                    ALIGN_LEFT        
                    );    
        }
        else
        {
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch0, 
                    0, 
                    PTC1, 
                    ALIGN_LEFT        
                    );    
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch1, 
                    -pwm, 
                    PTC2, 
                    ALIGN_LEFT        
                    );    
        }
    }
    else
    {
        if(pwm>0)
        {
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch2, 
                    0, 
                    PTC3, 
                    ALIGN_LEFT        
                    );    
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch3, 
                    pwm, 
                    PTC4, 
                    ALIGN_LEFT        
                    );    
        }
        else
        {
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch2, 
                    -pwm, 
                    PTC3, 
                    ALIGN_LEFT        
                    );    
            LPLD_FTM_PWM_Enable(FTM0, 
                    FTM_Ch3, 
                    0, 
                    PTC4, 
                    ALIGN_LEFT        
                    );    
        }
    }
}