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

📄 capture_pulse.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
sys_data_type	TIM_FLAGS;
#define		zs_flag		TIM_FLAGS.Bit.BIT0	//转速信号有信号标志
#define		cs_flag		TIM_FLAGS.Bit.BIT1
#define		pulse_flag	TIM_FLAGS.Bit.BIT2
unsigned char	zs_count=0;			//转速脉冲计数器
unsigned int	zs_temp=0;
unsigned int	zs[21];

unsigned char	cs_count=0;			//车速脉冲计数器
unsigned int	cs_temp=0;
unsigned int	cs[11];

unsigned char	lch_count=0;


void Init_TIM(void)
{
	//车速
	T1SC=0x46;							//64分频		524280us
	T1SC1=0x48;							//下降沿捕捉中断
	//转速

	T2SC=0x43;	//0x43						//8分频			65535us
	T2SC1=0x48;							//下降沿捕捉中断
}
//***********************定时器1中断服务函数***********************************
void interrupt 6 TIM1_INTSVR(void)
{
	T1SC_TOF=0;							//清溢出中断标志
	if(cs_flag&&cs_count!=11)
	{
		CAN_DATA2.Byte=0;
		cs_count=0;
	}
	cs_flag=1;
}
//***********************车速(T1CH1)中断服务函数*****************************
void interrupt 5 Capture_chesu(void)
{
	unsigned char	csh,csl;
	T1SC1_CH1F=0;						//清捕捉中断标志
	csh=T1CH1H;
	csl=T1CH1L;
	if(cs_count!=11)
	{
		cs[cs_count]=csh*0x100+csl;
		cs[cs_count]=cs[cs_count]-cs_temp;
		cs_count++;
	}
	cs_temp=csh*0x100+csl;
	lch_count++;
	if(lch_count==8)
	{
	  lch_count=0;
	  licheng++;
	}
	cs_flag=0;
}
//////////////////////////////////////////////////////////////
//定义:	 void  sub_chesu(void)								//
//描述:	 计算车速值,结果Km/h/byte,填写报文				//
//////////////////////////////////////////////////////////////
void sub_chesu(void)
{
	unsigned char	i;
	unsigned char	break_count=11;
	unsigned int	cstemp;
	unsigned long	data_temp;
	if(cs_count==11)
	{
		pulse_flag=1;											//排序,小--》大
		while(pulse_flag)
		{
			pulse_flag=0;
			break_count--;
			if(break_count!=0)
			{
				for(i=0;i<9;i++)
				{
					if(cs[i]>cs[i+1])
					{
						pulse_flag=1;
						cstemp=cs[i];
						cs[i]=cs[i+1];
						cs[i+1]=cstemp;
					}
				}
			}
		}
		data_temp=cs[4]+cs[5];							
		data_temp=data_temp/2;							//取中间两个的平均作为车速信号周期
		cstemp=(unsigned int)data_temp;
		if(cstemp<165)	cstemp=170;					//频率不大于378HZ
		else
		{
			data_temp=data_temp*8;
			data_temp=0xf4240/data_temp;				//计算车速信号周期
			cstemp=(unsigned int)data_temp;
			cstemp=cstemp*9/20;					//车速=(频率×3600)÷(8×1000)
//			cstemp=cstemp*72/129;					//Km/h/b
		}
		CAN_DATA2.Byte=(unsigned char)cstemp;
		cs_count=0;
	}
}
//***********************定时器2中断服务函数***********************************
//100ms
void interrupt 9 TIM2_INTSVR(void)
{
	T2SC_TOF=0;							//清溢出中断标志
	if(zs_flag&&zs_count!=21)
	{
		CAN_DATA1.Byte=0;
		CAN_DATA0.Byte=0;
		zs_count=0;
	}
	zs_flag=1;
} 
//***********************转速(T2CH1)中断服务函数*****************************
void interrupt 8 Capture_zhuansu(void)
{
	unsigned char	zsh,zsl;
	T2SC1_CH1F=0;						//清捕捉中断标志
	zsh=T2CH1H;
	zsl=T2CH1L;
	zs[zs_count]=zsh*0x100+zsl;
	zs[zs_count]=zs[zs_count]-zs_temp;
	zs_temp=zsh*0x100+zsl;
	zs_count++;
	if(zs_count>=21)	T2SC1=0x00;
	zs_flag=0;
}
//////////////////////////////////////////////////////////////
//定义:	 void  sub_zhuansu(void)							//
//描述:	 计算转速值,结果20rpm/byte,填写报文				//
//////////////////////////////////////////////////////////////

void sub_zhuansu(void)
{
	unsigned char	i;
	unsigned char	break_count=21;
	unsigned int	zstemp;
	unsigned long	data_temp;
	if(zs_count>=21)
	{
	    pulse_flag=1;											//排序,小--》大
		while(pulse_flag)
		{
			pulse_flag=0;
			break_count--;
			if(break_count!=0)
			{
				for(i=0;i<19;i++)
				{
					if(zs[i]>zs[i+1])
					{
						pulse_flag=1;
						zstemp=zs[i];
						zs[i]=zs[i+1];
						zs[i+1]=zstemp;
					}
				}
			}
		}
		data_temp=zs[8]+zs[9]+zs[10]+zs[11];//data_temp=zs[9]+zs[10];//
		data_temp=data_temp/4;///4取平均值
		zstemp=(unsigned int)data_temp;
		if(zstemp<336)		zstemp=6002;		//3000转
		else
		{
			data_temp=0xf4240/data_temp;//data_temp=0x7a120/data_temp;			//
			data_temp=data_temp*240/119;//60*2;	//求转速						//
//			data_temp=data_temp/119;						//0.5rpm/b
			zstemp=(unsigned int)data_temp;//强制转换
		}
		//zstemp=(unsigned int)data_temp;
		CAN_DATA1.Byte=(unsigned char)(zstemp%0x100);
		CAN_DATA0.Byte=(unsigned char)(zstemp/0x100);		
		zs_count=0;	//计数器清零
		T2SC1=0x48;//开中断
	}
}

⌨️ 快捷键说明

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