⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k60-keil

📁 K60-Keil版本(下载安装MDK4.23)
💻
字号:
/*============================================================================
文件名称:pwm.c
功能概要:K60 pwm
版权所有:卿丞数码
=============================================================================*/
#include <MK60N512MD100.h>              /* MK60N512MD100 Definitions          */
#include "pwm.h"
#include "define.h"

/*============================================================================
函数名称:FTM0_Init
函数返回:无
参数说明:                     
功能概要:通过FTM0实现PWM功能设置
版权所有:卿丞数码
=============================================================================*/
void FTM0_Init(void)
{
	SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK;   			/* Enable PORTC gate clocking   */ 
	SIM->SCGC6|=SIM_SCGC6_FTM0_MASK;      			//Enable the Clock to the FTM0 Module

	PORTC->PCR[1] =	PORT_PCR_MUX(0x04);				//FTM0_CH0 参考管脚映射表
	PORTC->PCR[2] =	PORT_PCR_MUX(0x04);									//FTM0_CH1


	FTM0->OUTMASK=0x00;	 							/*0 Channel output is not masked. It continues to operate normally.
							                          1 Channel output is masked. It is forced to its inactive state.*/
	
	FTM0->MODE |= FTM_MODE_WPDIS_MASK;				//Disable Write Protection - enables changes to QUADEN, DECAPEN, etc. 
	FTM0->MODE &=~ FTM_MODE_FTMEN_MASK;				//FTMEN is bit 0, need to set to zero so DECAPEN can be set to 0 
	FTM0->QDCTRL &=~FTM_QDCTRL_QUADEN_MASK; 		//Set Edge Aligned PWM QUADEN is Bit 1, Set Quadrature Decoder Mode (QUADEN) Enable to 0,   (disabled)
	
	/*设置FTM0模式:设置为边沿PWM模式*/
	FTM0->CONTROLS[0].CnSC |= FTM_CnSC_ELSB_MASK; 	//Edge or level select
 	FTM0->CONTROLS[0].CnSC &=~FTM_CnSC_ELSA_MASK; 	//Edge or level Select
	FTM0->CONTROLS[0].CnSC |= FTM_CnSC_MSB_MASK; 	//Channel Mode select

	FTM0->CONTROLS[1].CnSC |= FTM_CnSC_ELSB_MASK; 	//Edge or level select
 	FTM0->CONTROLS[1].CnSC &=~FTM_CnSC_ELSA_MASK; 	//Edge or level Select
	FTM0->CONTROLS[1].CnSC |= FTM_CnSC_MSB_MASK; 	//Channel Mode select





	/*占空比=CnV/(MOD+1) PMW频率=系统频率/2/(2^FTM1_SC_PS)/FTM1_MOD */
	FTM0->CNT = 0; 									//FTM Counter Value - reset counter to zero
	FTM0->MOD = 1125;  								//设置周期
	FTM0->CNTIN = 0; 								//Set the Counter Initial Value to 0

	FTM0->SC = 0; 									//Make sure its Off!

	FTM0->CONTROLS[0].CnV=0;
	FTM0->CONTROLS[1].CnV=0;
	FTM0->SC |=  FTM_SC_CLKS(1); 					// Selects Clock source to be "system clock" 
	/*
	000 - 0 - No divide		  
	001 - 1 - Divide by 2
	010 - 2 - Divide by 4
	011 - 3 - Divide by 8
	100 - 4 - Divide by 16
	101 - 5 - Divide by 32
	110 - 6 - Divide by 64 
	111 - 7 - Divide by 128
	*/
	FTM0->SC |= FTM_SC_PS(3); 						//sets pre-scale value see details below  No divide

}
/*============================================================================
函数名称:FTM1_Init
函数返回:无
参数说明:                     
功能概要:通过FTM1实现50hz PWM功能设置
版权所有:卿丞数码
=============================================================================*/
void FTM1_Init(void)
{      
	PORTA->PCR[12] =PORT_PCR_MUX(3)| PORT_PCR_DSE_MASK;
	SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; 
	SIM->SCGC6 |= SIM_SCGC6_FTM1_MASK;   // 使能FTM1时钟

	FTM1->CONTROLS[0].CnSC |= FTM_CnSC_ELSB_MASK;	
	FTM1->CONTROLS[0].CnSC &= ~FTM_CnSC_ELSA_MASK;
	FTM1->CONTROLS[0].CnSC |= FTM_CnSC_MSB_MASK;   

	FTM1->MODE |= FTM_MODE_WPDIS_MASK;				//Disable Write Protection - enables changes to QUADEN, DECAPEN, etc. 
	FTM1->MODE &=~ FTM_MODE_FTMEN_MASK;				//FTMEN is bit 0, need to set to zero so DECAPEN can be set to 0 
	FTM1->QDCTRL &=~FTM_QDCTRL_QUADEN_MASK; 		//Set Edge Aligned PWM QUADEN is Bit 1, Set Quadrature Decoder Mode (QUADEN) Enable to 0,   (disabled)  

	FTM1->SC=0;
	FTM1->CNTIN = 0;   	   // FTM0计数器的初始值
	FTM1->CNT = 0;         // 写任意值到该寄存器,FTM0计数器将重新装载CNTIN中的值
  
	FTM1->MOD =28125;//14063;// 28125;					 // FTM0计数器的终点值	50hz 0.1321197468534452

	FTM1->CONTROLS[0].CnV=0;
	FTM1->SC |= FTM_SC_PS(6) | FTM_SC_CLKS(1);  // Select bus clock

}
/*============================================================================
函数名称:UpdatePWM
函数返回:无
参数说明:PwmChannel:PWM通道号0-7 PwmValue:占空比设置值  占空比=PwmValue/(MOD+1)                     
功能概要:更新通道占空比 
通道0:PC1 
通道1:PC2 
通道2:PC3
通道3:PC4 
通道4:PD4 
通道5:PD5
通道6:PD6 
通道7:PD7 
版权所有:卿丞数码
=============================================================================*/
void MotorUpdatePWM(unsigned short PwmChannel,unsigned short PwmValue)
{
	FTM0->CONTROLS[PwmChannel].CnV=PwmValue;	
}
/*============================================================================
函数名称:MotorRun
函数返回:无
参数说明:Speed :电机速度    范围-4500~+4500 负数表示倒转,绝对值越大速度值越大          
功能概要:电机转动函数
正输入端为通道0:PC1 
负输入端为通道1:PC2 
版权所有:卿丞数码
=============================================================================*/
void MotorRun(int16_t speed)
{
	if(speed<0)
	{
		MotorUpdatePWM(1,-speed);
		MotorUpdatePWM(0,0);
	}
	else
	{
		MotorUpdatePWM(0,speed);
		MotorUpdatePWM(1,0);	
	}
	
}
/*============================================================================
函数名称:SteerUpdatePWM
函数返回:无
参数说明:PwmChannel:PWM通道号0-1 PwmValue:占空比设置值  占空比=PwmValue/(MOD+1)                     
功能概要:舵机更新通道占空比 
通道0:PA12 
通道1:PA11
版权所有:卿丞数码
=============================================================================*/
void SteerUpdatePWM(unsigned short PwmChannel,unsigned short PwmValue)
{
	FTM1->CONTROLS[PwmChannel].CnV=PwmValue;
}
/*============================================================================
函数名称:MotorRun
函数返回:无
参数说明:Angle :舵机转动角度 ,范围-100~+100 负数表示右转,正数表示左转,绝对值
		  越大转角值越大          
功能概要:舵机转动函数
版权所有:卿丞数码
=============================================================================*/
void SteerRun(int16_t Angle)
{
	SteerUpdatePWM(0,Angle+DirectMiddle); 	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -