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

📄 openloop.c

📁 无刷直流电动机的开环运行程序
💻 C
字号:
#include  "f2407_C.h" 

#define pwm_half_per 1000		/*PWM调制频率*/
                                /*4000 PWM=5Khz*/
                                /*2000 PWM=10Khz*//*systemclock=40M*/
unsigned int hall=0x000;

/*禁止总中断子程序*/       
void  inline  disable() 
{
	asm(" setc INTM");
}  


/*开总中断子程序*/  
void  inline  enable() 
{
	asm(" clrc INTM");
}


void initial()
{
	disable(); 
	asm(" clrc	SXM");				/* 抑制符号位扩展 */
	asm(" clrc	OVM");				/* 累加器中结果正常溢出 */
	asm(" clrc	CNF");				/* B0被配置为数据存储空间 */  
	*SCSR1=0x8101;				    /* CLKIN=10M,CLKOUT=4*CLKIN=40M */
	*WDCR=0x0E8;				    /* 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     					     即WD保护位缺省值为1,故可以用软件禁止看门狗 */		      					 
	*IMR=0x0000;					/* 禁止所有中断 */
	*IFR=0x0FFFF;					/* 清除全部中断标志,"写1清0" */    
	WSGR=0x0000;				  	/* 禁止所有的等待状态 */
}

void EVA_init(void)
{

	*SCSR1=*SCSR1|0x0004;	/*enable EVA clock*/      
	*MCRA=(*MCRA|0x0FC0)&0x0FFC7;   /* IO引脚配置 */     
/*
 bit 15    no change:      0=IOPB7,     1=TCLKINA
 bit 14    no change:      0=IOPB6,     1=TDIRA
 bit 13    no change:      0=IOPB5,     1=T2PWM/T2CMP
 bit 1     no change:      0=IOPB4,     1=T1PWM/T1CMP
 bit 11            1:      0=IOPB3,     1=PWM6
 bit 10            1:      0=IOPB2,     1=PWM5
 bit 9             1:      0=IOPB1,     1=PWM4
 bit 8             1:      0=IOPB0,     1=PWM3
 bit 7             1:      0=IOPA7,     1=PWM2
 bit 6             1:      0=IOPA6,     1=PWM1
 bit 5             0:      0=IOPA5,     1=CAP3
 bit 4             0:      0=IOPA4,     1=CAP2/QEP2
 bit 3             0:      0=IOPA3,     1=CAP1/QEP1
 bit 2     no change:      0=IOPA2,     1=XINT1
 bit 1     no change:      0=IOPA1,     1=SCIRXD
 bit 0     no change:      0=IOPA0,     1=SCITXD
*/  
	*PADATDIR=*PADATDIR&0x0C7FF;    /*将IOPA3,IOPA4,IOPA5配置为输入方式*/   
    *T1CON=0x0800;                  /*连续增/减计数模式,不分频*/ 
	*T1PR=pwm_half_per;             /*设置PWM频率为20kHz*/   
	*T1CNT=0x00;  
	*ACTRA=0x0FFF;       
	*CMPR1=pwm_half_per*3/10;       /*设置PWM占空比为70%*/
	*CMPR2=pwm_half_per*3/10;
	*CMPR3=pwm_half_per*3/10;
	*COMCONA=0x8200;
} 

void main()
{   
	initial( );						 /* 系统初始化 */
	EVA_init();
	*T1CON=*T1CON|0x0040;            /*启动定时器1*/
	while(1)
	{   
		hall=*PADATDIR&0x0038;       /*屏蔽掉其它位,仅剩下三个霍尔信号*/
		switch(hall)
		{
			case 0x0008:	*ACTRA=0x03FD;	break;        /*PWM1-PWM6   ANC*/
			case 0x0010:	*ACTRA=0x0FD3;	break;        /*PWM3-PWM2	BNA*/
			case 0x0020:	*ACTRA=0x0D3F;	break;        /*PWM5-PWM4	CNB*/
			case 0x0018:	*ACTRA=0x03DF;	break;        /*PWM3-PWM6   BNC*/
			case 0x0028:	*ACTRA=0x0F3D;	break;        /*PWM1-PWM4	ANB*/
			case 0x0030:	*ACTRA=0x0DF3;	break;        /*PWM5-PWM2	CNA*/
			case 0x0000:	
			case 0x0038:        
			default:        *ACTRA=0x0333;	break;    
		}
	}
}
// 直接返回中断服务程序
void interrupt nothing( ) 
{
 	return;
}

⌨️ 快捷键说明

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