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

📄 mc33984.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
#define		MC33984_WAKE	PTC_PTC2
#define		MC33984_RESET	PTC_PTC3

#define		EN				PTC_PTC5			//74HC154使能低有效

sys_data_type	_MC33984_FLAGS,MC33984_OUT[15],MC33984_STATUS0,MC33984_STATUS1;//MC33984标志,输出寄存器,故障寄存器

#define		fault_flag		_MC33984_FLAGS.Bit.BIT0				//MC33984故障检测标志
#define		fault_ok		_MC33984_FLAGS.Bit.BIT1				//MC33984故障检测完成标志
#define		fault_clk		_MC33984_FLAGS.Bit.BIT2			//故障清除时序

unsigned char	fault_count=0;									//MC33984故障计数器
unsigned char	out_count=0;									//MC33984输出计数器

//////////////////////////////////////////////////////////////
//定义:	 void  init_33984(void)								//
//描述:	 对MC33984进行初始化								//
//参量:	 unsigned char CommandWord:要写入的命令字			//
//说明: 过压、欠压保护开,不进行过压、欠压故障判断			//
//////////////////////////////////////////////////////////////
void Init_MC33984(void)			 //984初始化
{	   
	void SPI_33984(unsigned char _33984_CS,unsigned char _33984_CMD);
	unsigned char	i;
	for(i=0;i<15;i++)
	{
		MC33984_OUT[i].Byte=0x1a;								//关闭所有输出
		
		SPI_33984(i,0x28);
							   //SOCHLR 电流过高或过低限制寄存器SOCHLR 
		SPI_33984(i,0xa8);													   
							   //SOCHLR 电流过高或过低限制寄存器SOCHLR  
							   //	  位	赋值  定义
							   //	  s	 0	输出0	
							   //		    1	输出1
							   
							   //	  0	 0\ 
							   //	  1	 1 |   地址位
							   //	  0	 0/
							   //	  
							   //	  SOCH   1	大额过流设置:75A
							   
							   //	  SOCL2  0\ 
							   //	  SOCL1  0 |   小额过流设置:25A
							   //	  SOCL0  0/ 
							   //SOCL2(D2) SOCL1(D1) SOCL0(D0) 低过流量症断(A)
							   //0	    0	    0	    25
							   //0	    0	    1	    22.5
							   //0	    1	    0	    20
							   //0	    1	    1	    17.5
							   //1	    0	    0	    15
							   //1	    0	    1	    12.5
							   //1	    1	    0	    10
							   //1	    1	    1	    7.5
							   
							   //SOCH (D3) 高过流量症断(A)
							   //0	    100
							   //1	    75	
		
		SPI_33984(i,0x30);				 
	  						    //CDTOLR 电流检测寄存器 
		SPI_33984(i,0xb0);							    
	  						    //CDTOLR 电流检测寄存器
							   //	  位	赋值  定义
							   //	  s	 0	输出0
							   //		    1	输出1
							   
							   //	  0	 0\ 
							   //	  1	 1 |   地址位
							   //	  1	 1/
							   
							   //	  OL dis 0	使能小额过流检测
							   
							   //	  CD dis 0	使能开路检测
							  
							   //	  OCLT1  0\
							   //			 |   电流检测时间155ms 
							   //	  OCLT0  0/ 

		SPI_33984(i,0x42);    		 //屏蔽端口直接控制
	    //SPI_33984(i,0x44);    		 //使能端口直接控制,另外,在使用中发现,使能该寄存器,由spi控制状态检测仍有效
							   //DICR 直接输入控制寄存器
		SPI_33984(i,0xc2);   			 //屏蔽端口直接控制
	    //SPI_33984(i,0xc4);    		 //使能端口直接控制,另外,在使用中发现,使能该寄存器,由spi控制状态检测仍有效						  
							   //DICR 直接输入控制寄存器
							   //	  位	   赋值  定义
							   //	  s	    0	输出0
							   //			  1	输出1
							   
							   //	  1	    1\ 
							   //	  0	    0 |   地址位
							   //	  0	    0/
							   
							   //	  FAST SR   0	低速电流复制  |  1 高速电流复制 
							   
							   //	  CSNS high 0	高电流复制比1:41000  |  0 1;20500
							   
							   //	  IN dis    1	屏蔽端口直接操作输出  |  0 使能端口直接操作
							   
							   //	  A/O	  0 
							   
		SPI_33984(i,0x50);			   
							   //OSDR 输入开关延时寄存器
							   //	  位    赋值  定义
							   //	  0	0\
							   //	  1	1 |   地址位
							   //	  0	0 |
							   //	  1	1/
							  
							   //	  0	0 
							   
							   //	  OSD2  0\
							   //	  OSD1  0 |   开关输出不延时
							   //	  OSD0  0/ 
							   //OSD[2:0](D2,D1,D0)	HS0开关延时间(ms)   HS1开关延时间(ms)
							   //000				0			    0
							   //001				75			   0
							   //010				150			  150
							   //011				225			  150
							   //100				300			  300
							   //101				375			  300
							   //110				450			  450
							   //111				525			  450			    
			   
		SPI_33984(i,0xd1);
							   //WDR 看门狗时间设置寄存器
							   //	  位    赋值  定义
							   //	  1	1\
							   //	  1	1 |   地址位
							   //	  0	0 |
							   //	  1	1/
							   
							   //	  0	0
							   //	  0	0
							   
							   //	  WD1   1\
							   //			|   看门狗时间1250ms  
							   //	  WD0   1/ 
							   //WD[1:0](D1,D0)   看门狗溢出时间 (ms)
							   //00			620
							   //01			310
							   //10			2500
							   //11			1250	    
		
		SPI_33984(i,0xe3);
							   //UOVR 过电压低电压配置寄存器 
							   //	  位    赋值  定义
							   //	  1	  1\   
							   //	  1	  1 | 地址位
							   //	  1	  1 |
							   //	  0	  0/
							  
							   //	  0	  0
							   //	  0	  0
							   
							   //	  UV_dis  0\
							   //			  |使能过电压,低电压检测  |  1  屏蔽该功能
							   //	  OV_dis  0/
	}
}
//////////////////////////////////////////////////////////////
//定义:	 void  Out_33984_1(void)							//
//描述:	 对MC33984输出端口控制								//
//说明: CSNS1 EN与CSNS2 EN为两路端口电流反馈设置    		//
//////////////////////////////////////////////////////////////
void Out_MC33984(void)
{
	void SPI_33984(unsigned char _33984_CS,unsigned char _33984_CMD);
	unsigned char	out_num;
	for(out_num=0;out_num<15;out_num++)	SPI_33984(out_num,MC33984_OUT[out_num].Byte);
}
//////////////////////////////////////////////////////////////
//			定义:      void  Dog_33984(void)				//
//			描述:      对MC33984进行喂狗处理				//
//////////////////////////////////////////////////////////////
void Dog_MC33984(void)
{
   	void SPI_33984(unsigned char _33984_CS,unsigned char _33984_CMD);
	unsigned char	dog_num;
	for(dog_num=0;dog_num<15;dog_num++)	SPI_33984(dog_num,0xd1);
}

//////////////////////////////////////////////////
//定义:      void  Sleep_33984(void) 	 		//
//描述:      对MC33984芯片执行休眠				//
//说明:此函数对于MC33984执行休眠功能			//
//		此功能操作为芯片唤醒,复位端口均为低电平//
//////////////////////////////////////////////////
void Sleep_33984(void)
{
     MC33984_WAKE=0;
     MC33984_RESET=0;
}
///////////////////////////////////////////////////////////////
//定义:      void  Wake_33984(void)	 						 //
//描述:      唤醒MC33984芯片								 //
//说明:唤醒MC33984,此功能操作为芯片唤醒,复位端口均为低电平//
///////////////////////////////////////////////////////////////
void Wake_33984(void)
{
     MC33984_WAKE=1;
     MC33984_RESET=1;
}
//////////////////////////////////////////////////////////////////////////////////
//定义:      void  SPI_33984(unsigned char _33984_CS,unsigned char _33984_CMD)	//
//描述:      写命令给MC33984芯片							 					//
//说明:      SPI返回值丢弃									 					//
//////////////////////////////////////////////////////////////////////////////////
unsigned char SPI_33984(unsigned char _33984_CS,unsigned char _33984_CMD)
{
	PTA=PTA&0x0f;
	_33984_CS=_33984_CS<<4;
	PTA=PTA|_33984_CS;
	EN=0;						//片选
	asm	nop
	asm	nop
	SPDR=_33984_CMD;
	while((SPSCR&0x80)==0);
	asm	nop
	asm	nop
	EN=1;

	return(SPDR);
}
//////////////////////////////////////////////////////////////
//定义:	 void  Fault_33984(void)							//
//描述:	 判断故障,根据故障组织报文							//
//说明:此函数是对输出端口操作后,检测是否有故障产生		//
//		应当在void Out_33984()函数后紧接使用	 			//
//		此外,984芯片开路状态检测必须为输出断开后			//
//////////////////////////////////////////////////////////////
void FAULT_MC33984(void)
{
	sys_data_type	fault_temp;
	//状态寄存器STATR
	//OD7 (s) = 输出选择: logic [0] = HS0, logic [1] = HS1.
	//OD6 (OTF) = 过温标志.
	//OD5 (OCHFs) = 高过流标志. (此故障状态为锁存状态.)
	//OD4 (OCLFs) = 低过流标志. (此故障状态为锁存状态.)
	//OD3 (OLFs) = 开路标志.
	//OD2 (UVF) = 低电压标志. 
	//OD1 (OVF) = 过电压标志.
	//OD0 (FAULTs) =记录故障位(有故障时该位为1)
	
	MC33984_STATUS0.Byte=SPI_33984(fault_count,0x00);				//HS0故障诊断
	MC33984_STATUS0.Byte=SPI_33984(fault_count,0x00);				//MC33984返回值为对上一次命令的响应--故障
	MC33984_STATUS1.Byte=SPI_33984(fault_count,0x80);				//HS1故障诊断
	MC33984_STATUS1.Byte=SPI_33984(fault_count,0x80);				//返回故障
	if(MC33984_OUT[fault_count].Byte!=0x1a)							//如果MC33984有输出,关闭输出后进行开路检测
	{
		fault_temp.Byte=SPI_33984(fault_count,0x1a);				//关闭输出
		delay(160);													//延时200us
		if(MC33984_OUT[fault_count].Bit.BIT0)						//HS0有输出
		{
			fault_temp.Byte=SPI_33984(fault_count,0x00);			//HS0故障诊断
			fault_temp.Byte=SPI_33984(fault_count,0x00);			//返回故障
			if(fault_temp.Bit.BIT3)									//HS0开路
			{
				MC33984_STATUS0.Bit.BIT3=1;							//编写开路故障代码
				MC33984_STATUS0.Bit.BIT0=1;							//设定故障位
			}
		}
		if(MC33984_OUT[fault_count].Bit.BIT2)						//HS1有输出
		{
			fault_temp.Byte=SPI_33984(fault_count,0x80);			//HS1故障诊断
			fault_temp.Byte=SPI_33984(fault_count,0x80);			//返回故障
			if(fault_temp.Bit.BIT3)									//HS1开路
			{
				MC33984_STATUS1.Bit.BIT3=1;							//编写开路故障代码
				MC33984_STATUS1.Bit.BIT0=1;							//设定故障位
			}
		}
		fault_temp.Byte=SPI_33984(fault_count,MC33984_OUT[fault_count].Byte);//恢复MC33984输出状态
	}
	fault_ok=1;
	if(fault_count==14)	fault_flag=0;								//故障检测完成标志
}

⌨️ 快捷键说明

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