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

📄 speed_reg.c

📁 无刷电机资料
💻 C
字号:
#define   PWM_MAX     	0x3f0
#define   PWM_MIN     	0x010 
#include "2407bit.h"
#include "2407e.h"
#include "Speed_Reg.h"
extern PIDREG1 pid0;
void EVA_PWM1_Init(SPEEDPID *speed1)
{
	//Pwm Init	
	(*MCRA)|=1<<PWM1;
	
	(*EVBIFRA)=0xffff;				//clear all interrupt flag
	(*ACTRA)  =0x0001;				//set pwm active high
	(*DBTCONA)=0x0000;				//disable dead area
	(*CMPR1)  =0x01ff;				//set compare register one	50% period
	(*T1PR)   =0x03ff;
	//(*CMPR1)  =speed1.period_max>>1;				//set compare register one	50% period
	//(*T1PR)   =speed1;				//set period  register	pwm is 20khz
	(*COMCONA)=(1<<CENABLE)|(0<<CLD1)|(1<<CLD0)|(0<<ACTRLD1)|(1<<ACTRLD0)|(1<<FCOMPOE);
	//CENABLE=1		enable compare opertion
	//FCOMPOE=1		pwmout enable
	(*T1CNT)  =0x0000;				//clear cnt
	(*GPTCONA)=1<<TCOMPOE;			//Timer1 compara enable			
	(*EVAIMRA)=0x0000;				//Mask all interrupt
	(*T1CON)=(0<<TMODE1)|(1<<TMODE0)|(0<<TPS2)|(0<<TPS1)|(0<<TPS0)|(1<<TENABLE)|(1<<TCLD1)|(1<<TCLD0);
	/*TMODE1:TMODE0 01  	增减数方式
	  TPS2 TPS1 TPS0 111 X/1
	  TENABLE	1		Enable Timer
	  TCLK1 TCLK0 11	Using CPU CLK
	  TCLD1	TCLD0 11	Reserved*/
	
	(*MCRA)&=~(1<<PWMEN1);			//Enable PWM out
	(*PADATDIR)|=(1<<(PWMEN1+8));
	(*PADATDIR)&=~(1<<PWMEN1);
	//Qep Init
	//T4Init
	(*MCRC)|=(1<<QEP3)|(1<<QEP4);
	*T4PR=0xffff;								//Set period register
	*T4CNT=0x0000;								//Clear Cnt2
	*CAPCONB=(1<<CAPQEPN1)|(1<<CAPQEPN0);		//Enable QEP
	*T4CON=(1<<TMODE1)|(1<<TMODE0)|(0<<TPS2)|(0<<TPS1)|(0<<TPS0)|(1<<TENABLE)|(1<<TCLKS1)|(1<<TCLKS0)|(1<<TCLD1)|(1<<TCLD0);
		 //TMODE1:TMODE0 11  	定向增减数方式
		 //TPS2 TPS1 TPS0 111 X/1
		 //TENABLE	1		Enable Timer
		 //TCLK1 TCLK0 11	Using As QEP
		 //TCLD1	TCLD0 11	Reserved

}
void EVA_PWM1_Updata(SPEEDPID *speed1)
{
	   speed1->pid_reg->pid_ref_reg1=(speed1->Speed)<<4;
	   speed1->pid_reg->pid_fb_reg1=(speed1->Qep_F)<<4; /* Pass inputs to pid1 */
	   speed1->pid_reg->calc(speed1->pid_reg);
	   speed1->Pwm= speed1->pid_reg->pid_out_reg1;
	   speed1->Pwm=((speed1->Pwm)>>4)+0x1ff;
		if(speed1->Pwm>PWM_MAX)
	    	speed1->Pwm=PWM_MAX;
	 	if(speed1->Pwm<PWM_MIN)
	    	speed1->Pwm=PWM_MIN;
		(*CMPR1)=speed1->Pwm;
}

	

⌨️ 快捷键说明

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