厂家提供的芯片资料

This commit is contained in:
2026-10-19 15:33:00 +08:00
commit dcee04a348
36 changed files with 7640 additions and 0 deletions

View File

@@ -0,0 +1,661 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
#if _MODE_IHDEBUG_
/**************************************************************************
--------------------------------- 变量定义 --------------------------------
**************************************************************************/
volatile unsigned char Del_SendStatus;
volatile unsigned int StatusWork;
volatile unsigned int StatusError;
volatile unsigned int StatusProtect;
volatile unsigned char Count_IhDebugComm;
volatile unsigned int Del_IhDebugComm;
//-------------------------------------------------------------------------
volatile bit B_SendStatus_IhDebug;
volatile bit B_TestComm_IhDebug;
volatile bit B_CommErr_IhDebug;
//*************************************************************************
volatile unsigned int Bak_StatusWork;
volatile unsigned int Bak_StatusError;
volatile unsigned int Bak_StatusProtect;
volatile unsigned char Bak_PowerWork;
volatile unsigned char Bak_TimeAll_JXHeat;
volatile unsigned char Bak_TimeOn_JXHeat;
volatile unsigned char Bak_Num_LxLowAll;
volatile unsigned char Bak_Num_LxLowOn;
volatile unsigned int Bak_Num_TestCM;
//-------------------------------------------------------------------------
volatile bit B_Bak_JXNoCheck;
volatile bit B_Bak_JXCheckPan;
volatile bit B_Bak_LxLow;
/**************************************************************************
* 函数名称:REL_DealSendCurve
* 函数功能:发送数据处理(曲线)
* 入口参数:id = 发送ID值
* 出口参数:发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned int REL_DealSendCurve(unsigned char id)
{
switch(id)
{
case 0: //【曲线1数据】
return (unsigned int)AD_Volatage; //市电电压AD【9bit】
case 1: //【曲线2数据】
return (unsigned int)AD_Current; //工作电流AD【9bit】
case 2: //【曲线3数据】
return (unsigned int)AD_TmprPan; //锅底温度AD【8bit】
case 3: //【曲线4数据】
#ifndef _pAD_TOP
return 0;
#else
return (unsigned int)AD_TmprTop; //顶部温度AD【8bit】
#endif
case 4: //【曲线5数据】
return (unsigned int)AD_TmprIgbt; //IGBT温度AD【8bit】
case 5: //【曲线6数据】
return (unsigned int)AD_VRef; //内部基准电压AD【9bit】
case 6: //【曲线7数据】
return (unsigned int)Vol.flo.integer + C_Vol_Comp; //市电电压(V)
case 7: //【曲线8数据】
return (unsigned int)CurrentReal; //实际工作电流(A*256)
case 8: //【曲线9数据】
return (unsigned int)PowerReal; //实际输出功率(W)
case 9: //【曲线10数据】
return (unsigned int)PowerSet; //设置输出功率(W)
case 10://【曲线11数据】
return (unsigned int)Buf_PPGTMR; //当前PPGTMR值
case 11://【曲线12数据】
return (unsigned int)Count_Syn; //检锅振荡个数
case 12://【曲线13数据】
return (unsigned int)Time_Syn; //检锅振荡脉宽
case 13://【曲线14数据】
return (unsigned int)Count_BackPress; //1级过压保护计数
case 14://【曲线15数据】
return (unsigned int)Count_IgbtProtect; //IGBT硬件保护计数
default:
return 0;
}
}
/**************************************************************************
* 函数名称:REL_DealSendStatus
* 函数功能:发送数据处理(状态)
* 入口参数:id = 发送ID值
* 出口参数:发送ID值 + 发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned long REL_DealSendStatus(unsigned char id)
{
volatile unsigned long data;
//---------------------------------------------------------------------
if(B_SendStatus_IhDebug)
{
B_SendStatus_IhDebug = 0; //完成状态发送
switch(id)
{
case 1: //【工作状态】
data = 0xE0;
data <<= 16;
data += StatusWork;
return data;
case 2: //【故障状态】
data = 0xE1;
data <<= 16;
data += StatusError;
return data;
case 3: //【保护状态】
data = 0xE2;
data <<= 16;
data += StatusProtect;
return data;
default:
return 0;
}
}
else
{
return 0;
}
}
/**************************************************************************
* 函数名称:REL_DealReceData
* 函数功能:接收数据处理
* 入口参数:id = 接收ID值、value = 接收数据值
* 出口参数:发送ID值 + 发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned long REL_DealReceData(unsigned char id, unsigned int value)
{
volatile unsigned long data;
//*********************************************************************
if((id & 0xF0) == 0xE0) //【发送回传】
{
switch(id & 0x0F)
{
case 0:
Bak_StatusWork = value; //工作状态
break;
case 1:
Bak_StatusError = value; //故障状态
break;
case 2:
Bak_StatusProtect = value; //保护状态
break;
default:
break;
}
}
//*********************************************************************
else if(id == 0xA0) //【工作命令】
{
if(TestOne(value,0))
{
if(!B_Heat_En)
{
SetBit(value,1); //风扇强制使能
B_Fan_En = 1; //风扇使能
}
B_Heat_En = 1; //加热使能
}
else
{
B_Heat_En = 0;
}
if(TestOne(value,1))
{
B_Fan_En = 1; //风扇使能
}
else
{
B_Fan_En = 0;
}
if(TestOne(value,2))
{
B_Buzz_En = 1; //蜂鸣器使能
}
else
{
B_Buzz_En = 0;
}
if(TestOne(value,3))
{
ClrBit(value,3);
ClrBit(value,2); //蜂鸣器强制关闭
B_Buzz_En = 0;
if(!B_Buzz_Out)
{
Buzz_Short_One(); //蜂鸣器短鸣1声
}
}
if(TestOne(value,4))
{
ClrBit(value,4);
ClrBit(value,2); //蜂鸣器强制关闭
B_Buzz_En = 0;
if(!B_Buzz_Out)
{
Buzz_Long_One(); //蜂鸣器长鸣1声
}
}
if(TestOne(value,5))
{
if(!B_Bak_JXNoCheck)
{
ClrBit(value,6); //间隙加热使能(检锅)强制关闭
B_Bak_JXCheckPan = 0;
}
B_Bak_JXNoCheck = 1; //间隙加热使能(不检锅)
}
else
{
B_Bak_JXNoCheck = 0;
}
if(TestOne(value,6))
{
if(!B_Bak_JXCheckPan)
{
ClrBit(value,5); //间隙加热使能(不检锅)强制关闭
B_Bak_JXNoCheck = 0;
}
B_Bak_JXCheckPan = 1; //间隙加热使能(检锅)
}
else
{
B_Bak_JXCheckPan = 0;
}
if(TestOne(value,7))
{
if(!B_PPGDP_Can)
{
ClrBit(value,9); //连续低功率强制关闭
B_Bak_LxLow = 0;
}
B_PPGDP_Can = 1; //抖频使能
}
else
{
if(B_PPGDP_Can)
{
SetBit(value,8); //抖频使能强制禁止
B_PPGDP_Dis = 1; //抖频禁止
}
B_PPGDP_Can = 0;
}
if(TestOne(value,8))
{
B_PPGDP_Dis = 1; //抖频禁止
}
else
{
B_PPGDP_Dis = 0;
}
if(TestOne(value,9))
{
if(!B_Bak_LxLow)
{
ClrBit(value,7); //抖频使能强制关闭
B_PPGDP_Can = 0;
SetBit(value,8); //抖频使能强制禁止
B_PPGDP_Dis = 1; //抖频禁止
}
B_Bak_LxLow = 1; //连续低功率使能
}
else
{
B_Bak_LxLow = 0;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0xB0) //【工作参数】
{
switch(id & 0x0F)
{
case 0: //加热输出功率(×10W)
Bak_PowerWork = value;
break;
case 1: //加热间隙总时间(×0.5秒)
Bak_TimeAll_JXHeat = value;
break;
case 2: //加热间隙开时间(×0.5秒)
Bak_TimeOn_JXHeat = value;
break;
case 3: //加热连续低功率总个数
Bak_Num_LxLowAll = value;
break;
case 4: //加热连续低功率开个数
Bak_Num_LxLowOn = value;
break;
default:
break;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0xC0) //【配置参数】
{
switch(id & 0x0F)
{
case 0: //PPG导通延时
ValueTime_PPGDly = value;
break;
case 1: //电压浪涌
ValueVol_VolSurge = value;
break;
case 2: //电流浪涌
ValueVol_CurrSurge = value;
break;
case 3: //导通台阶
ValueVol_OnStep = value;
break;
case 4: //1级过压
ValueVol_BackPress1 = value;
break;
case 5: //1级过压PPG下降步进
ValuePPG_BackPress1 = value;
break;
case 6: //2级过压
ValueVol_BackPress2 = value;
break;
default:
break;
}
}
//*********************************************************************
else if(id == 0x80) //【测试命令】
{
if(TestOne(value,0))
{
if(!B_Test_PanCheck)
{
ClrBit(value,1); //PPG测试强制关闭
B_Test_PPGOut = 0;
}
B_Test_PanCheck = 1; //检锅测试开启
}
else
{
B_Test_PanCheck = 0;
}
if(TestOne(value,1))
{
if(!B_Test_PPGOut)
{
ClrBit(value,0); //检锅测试强制关闭
B_Test_PanCheck = 0;
}
B_Test_PPGOut = 1; //PPG测试开启
}
else
{
B_Test_PPGOut = 0;
}
if(TestOne(value,2))
{
B_Test_CM_RA0 = 1; //比较器测试开启(RA0)
}
else
{
B_Test_CM_RA0 = 0;
}
if(TestOne(value,3))
{
B_Test_CM_RB7 = 1; //比较器测试开启(RB7)
}
else
{
B_Test_CM_RB7 = 0;
}
if(TestOne(value,4))
{
B_Test_PGA = 1; //PGA测试开启(RC0)
}
else
{
B_Test_PGA = 0;
}
if(TestOne(value,5))
{
B_Test_SlopeCurr = 1; //电流斜率测试开启
}
else
{
B_Test_SlopeCurr = 0;
}
if(TestOne(value,6))
{
B_ErrorCheck_Dis = 1; //禁止硬件故障检测
}
else
{
B_ErrorCheck_Dis = 0;
}
if(TestOne(value,7))
{
B_LosePanCheck_Dis = 1; //禁止电流丢锅检测
}
else
{
B_LosePanCheck_Dis = 0;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0x90) //【测试参数】
{
switch(id & 0x0F)
{
case 0: //检锅测试-PPGTMR值
ValuePPG_Single = value;
break;
case 1: //PPG测试-PPGTMR值
PPGTMR_TestPPG = value;
break;
case 2: //比较器测试-通道
Bak_Num_TestCM = 0xFF00 | value;
break;
case 3: //电流斜率测试-斜率
SlopeCurr_Test = value;
break;
default:
break;
}
}
//*********************************************************************
Del_IhDebugComm = 0; //清通信故障计时
B_CommErr_IhDebug = 0; //清通信故障标志
B_TestComm_IhDebug = 1; //开始检测通信故障
if((id >= 0xE0) || (id < 0x80))
{
return 0;
}
else
{
data = id;
data <<= 16;
data += value;
return data;
}
}
/**************************************************************************
* 函数名称:REL_ReceSendCom
* 函数功能:接收发送公共处理
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void REL_ReceSendCom(void)
{
volatile unsigned int i;
static unsigned char Del_JXHeat,Cnt_JXHeat;
static unsigned char Del_DispBackPress;
static bit B_DispBackPress;
/**********************************************************************
接收
**********************************************************************/
B_HeatStop_CheckPan = 0;
B_HeatStop_NoCheck = 0;
if((B_Bak_JXCheckPan || B_Bak_JXNoCheck) && Bak_TimeOn_JXHeat && (Bak_TimeAll_JXHeat > Bak_TimeOn_JXHeat))
{
if(++Del_JXHeat >= 500/C_TimeMS_Main) //0.5s
{
Del_JXHeat = 0;
if(++Cnt_JXHeat >= Bak_TimeAll_JXHeat)
{
Cnt_JXHeat = 0;
}
}
if(Cnt_JXHeat >= Bak_TimeOn_JXHeat)
{
if(B_Bak_JXCheckPan)
{
B_HeatStop_CheckPan = 1; //不加热但检锅
}
else
{
B_HeatStop_NoCheck = 1; //不加热不检锅
}
}
}
else
{
Del_JXHeat = 0;
Cnt_JXHeat = 0;
}
//---------------------------------------------------------------------
PowerWork = Bak_PowerWork;
//*********************************************************************
if(B_Bak_LxLow && Bak_Num_LxLowOn && (Bak_Num_LxLowAll > Bak_Num_LxLowOn))
{
Num_LxLowOn = Bak_Num_LxLowOn;
Num_LxLowOff = (unsigned)Bak_Num_LxLowAll - Bak_Num_LxLowOn;
}
else
{
Num_LxLowOn = 0;
Num_LxLowOff = 0;
}
//*********************************************************************
if((B_Test_CM_RA0 || B_Test_CM_RB7) && Bak_Num_TestCM)
{
ValueCM_Test = 0x08 | ((unsigned)Bak_Num_TestCM & 0x07);
}
else
{
ValueCM_Test = 0;
}
//---------------------------------------------------------------------
if(B_Test_PGA)
{
ValuePGA_Set |= 0x02;
}
else
{
ValuePGA_Set &= ~0x02;
}
/**********************************************************************
发送
**********************************************************************/
if(B_Protect_BackPress)
{
B_DispBackPress = 1; //过压保护显示
}
if(B_DispBackPress)
{
if(Del_DispBackPress >= 500/C_TimeMS_Main) //500ms
{
B_DispBackPress = 0; //退出过压保护显示
}
else
{
Del_DispBackPress++;
}
}
else
{
Del_DispBackPress = 0;
}
//---------------------------------------------------------------------
i = 0;
if(B_Pan_Error) SetBit(i,0); //检锅故障(未接线盘)
if(B_Pan_No) SetBit(i,1); //无锅
if(B_Pan_Have) SetBit(i,2); //有锅
if(B_Pan_Steel) SetBit(i,3); //钢锅
if(B_Pan_Iron) SetBit(i,4); //铁锅
if(B_Zero_No) SetBit(i,5); //无过零
else
{if(!B_Zero_60Hz) SetBit(i,6); //过零频率 = 50Hz
else SetBit(i,7);} //过零频率 = 60Hz
if(B_PPG_Out) SetBit(i,8); //正常加热
if(B_PPGStop_NoCheck) SetBit(i,9); //加热暂停,不检锅
if(B_PPGStop_CheckPan) SetBit(i,10); //加热暂停,并检锅
if(Flag1_Error | Flag2_Error) SetBit(i,11); //故障停止加热
if(B_Protect_Stop) SetBit(i,12); //保护停止加热
if(Status_PPGDP & 0x02) SetBit(i,13); //抖频开启
if(Status_LxLow & 0x02) SetBit(i,14); //连续低功率开启
StatusWork = i; //工作状态
//---------------------------------------------------------------------
i = 0;
if(B_EVolLow) SetBit(i,0); //市电电压过低
if(B_EVolHigh) SetBit(i,1); //市电电压过高
if(B_EIgbtOpen) SetBit(i,2); //IGBT-NTC开路
if(B_EIgbtClose) SetBit(i,3); //IGBT-NTC短路
if(B_EIgbtOver) SetBit(i,4); //IGBT-NTC超温
if(B_EPanOpen) SetBit(i,5); //锅底-NTC开路
if(B_EPanClose) SetBit(i,6); //锅底-NTC短路
if(B_EPanOver) SetBit(i,7); //锅底-NTC超温
if(B_EPanFail) SetBit(i,8); //锅底-NTC失效
if(B_ETopOpen) SetBit(i,9); //顶部-NTC开路
if(B_ETopClose) SetBit(i,10); //顶部-NTC短路
if(B_ETopFail) SetBit(i,11); //顶部-NTC失效
if(B_CommErr_IhDebug) SetBit(i,12); //通信故障
StatusError = i; //故障状态
//---------------------------------------------------------------------
i = 0;
if(TestOne(Status_PPGStop,0)) SetBit(i,0); //1级过压比较器计数溢出
if(TestOne(Status_PPGStop,1)) SetBit(i,1); //电压浪涌
if(TestOne(Status_PPGStop,2)) SetBit(i,2); //电流浪涌
if(TestOne(Status_PPGStop,3)) SetBit(i,3); //2级过压
if(TestOne(Status_PPGStop,4)) SetBit(i,4); //导通台阶过高
if(TestOne(Status_PPGStop,5)) SetBit(i,5); //PPG看门狗溢出
if(B_DispBackPress) SetBit(i,6); //过压保护
StatusProtect = i; //保护状态
//---------------------------------------------------------------------
if(++Del_SendStatus >= 100/C_TimeMS_Main) //150ms
{
Del_SendStatus = 0;
B_SendStatus_IhDebug = 1; //发送状态
}
/**********************************************************************
通信故障
**********************************************************************/
if(!B_TestComm_IhDebug)
{
Del_IhDebugComm = 0; //未开始检测通信故障
B_CommErr_IhDebug = 0; //清通信故障标志
}
else if(++Del_IhDebugComm >= 1000/C_TimeMS_Main) //1s
{
Del_IhDebugComm = 0;
B_CommErr_IhDebug = 1; //通信故障
if(++Count_IhDebugComm & 0x01)
{
B_Fan_En = 1;
}
else
{
B_Fan_En = 0;
}
B_Heat_En = 0;
B_Buzz_En = 0;
B_Test_PanCheck = 0;
B_Test_PPGOut = 0;
}
}
/**************************************************************************
**************************************************************************/
#endif