厂家提供的芯片资料

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,498 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_
/**************************************************************************
* 函数名称:Communicate
* 函数功能:芯片通信
* 入口参数:无
* 出口参数:无
* 备 注:中断调用
**************************************************************************/
void Communicate()
{
//收码相关寄存器定义
static unsigned char TimeRece_High,TimeRece_Low,CountRece;
static CommType DataRece;
static bit B_Rece_Old;
//发码相关寄存器定义
static unsigned char TimeSend,CountSend;
static CommType DataSend;
static bit B_Send_Start,B_Send_Bak;
volatile unsigned char i;
/**********************************************************************
收码
**********************************************************************/
if(!B_Comm_No) //无通信,不收码
{
if(!Pin_CommIn && !Pin_CommIn && !Pin_CommIn && !Pin_CommIn && !Pin_CommIn)
{
TimeRece_Low++; //低电平计时
if(!B_Rece_Old)
{
TimeRece_High = 0;
}
else
{ //下降沿接收数据
B_Rece_Old = 0; //收码电平旧值(低)
if(1 == TimeRece_Low)
{ //第一次下降沿
CountRece = 32;
}
else
{ //非第一次下降沿
DataRece.all <<= 1;
if(TimeRece_Low >= TimeRece_High)
{ //低电平>高电平为1,否则为0
DataRece.one[0] |= 0x01;
}
TimeRece_High = 0;
TimeRece_Low = 1;
if(0 == --CountRece)
{
B_Deal_DataRece = 1; //收码数据处理
Buf_DataRece[3] = DataRece.one[3];
Buf_DataRece[2] = DataRece.one[2];
Buf_DataRece[1] = DataRece.one[1];
Buf_DataRece[0] = DataRece.one[0];
}
}
}
}
else if(Pin_CommIn && Pin_CommIn && Pin_CommIn && Pin_CommIn && Pin_CommIn)
{
B_Rece_Old = 1; //收码电平旧值(高)
if(TimeRece_High >= 5000/C_TimeUS_Int) //5ms
{ //长时间高电平,重新收码
TimeRece_Low = 0;
CountRece = 32;
}
else
{
TimeRece_High++; //高电平计时
}
}
}
/**********************************************************************
发码
**********************************************************************/
if(B_Comm_Have) //有通信,才发码
{
if(B_Send_Start)
{
if(0 == --TimeSend)
{ //已发完一位码
Pin_CommOut = 0; //输出低电平
if(0 == CountSend)
{
B_Send_Start = 0; //发码完成
TimeSend = 0;
}
else
{ //发送下一位数据
CountSend--;
TimeSend = 2000/C_TimeUS_Int; //2ms
if(DataSend.one[3] & 0x80)
{
B_Send_Bak = 1; //发1
}
else
{
B_Send_Bak = 0; //发0
}
DataSend.all <<= 1;
}
}
else
{ //还没有发完一位码
if(B_Send_Bak)
{
i = 500/C_TimeUS_Int; //0.5ms
}
else
{
i = 1500/C_TimeUS_Int; //1.5ms
}
if(TimeSend > i)
{
Pin_CommOut = 0; //输出低电平
}
else
{
Pin_CommOut = 1; //输出高电平
}
}
}
else
{
if(TimeSend >= 10000/C_TimeUS_Int) //10ms
{
B_Send_Start = 1; //发码开始
TimeSend = 1;
CountSend = 32; //发码数据位数:32bit
DataSend.one[3] = Buf_DataSend[3];
DataSend.one[2] = Buf_DataSend[2];
DataSend.one[1] = Buf_DataSend[1];
DataSend.one[0] = Buf_DataSend[0];
B_Refrsh_DataSend = 1; //发码数据刷新
}
else
{
TimeSend++;
}
if(TimeSend >= 500/C_TimeUS_Int) //0.5ms
{
Pin_CommOut = 1; //输出高电平
}
else
{
Pin_CommOut = 0; //输出低电平
}
}
}
}
/**************************************************************************
* 函数名称:Deal_CommData
* 函数功能:通信数据处理
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void Deal_CommData()
{
static unsigned int Time_NoComm;
static unsigned char Num_CommSend;
volatile unsigned char i,j;
/**********************************************************************
发码数据处理
**********************************************************************/
if(B_Comm_Have && B_Refrsh_DataSend)
{ //发码数据刷新
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); //无过零
if(B_Zero_60Hz) SetBit(i,6); //过零频率 = 60Hz
if(B_Protect_BackPress) SetBit(i,7); //过压保护
Status1_Work = i; //刷新工作状态1
//-----------------------------------------------------------------
i = 0;
if(B_Protect_Stop) SetBit(i,0); //保护停止加热
if(B_PPGStop_CheckPan) SetBit(i,1); //加热暂停但检锅
if(B_PPGStop_NoCheck) SetBit(i,2); //加热暂停不检锅
if(Status_PPGDP & 0x02) SetBit(i,3); //抖频开启
if(Status_LxLow & 0x02) SetBit(i,4); //连续低功率开启
Status2_Work = i; //刷新工作状态2
//-----------------------------------------------------------------
switch(Num_CommSend)
{
case 0:
{
Buf_DataSend[3] = 0xA0; //命令字
Buf_DataSend[2] = Status1_Work; //工作状态1
Buf_DataSend[1] = Status2_Work; //工作状态2
}
break;
case 1:
{
Buf_DataSend[3] = 0xA1; //命令字
Buf_DataSend[2] = Flag1_Error; //硬件故障标志1
Buf_DataSend[1] = Flag2_Error; //硬件故障标志2
}
break;
case 2:
{
Buf_DataSend[3] = 0xA2; //命令字
Buf_DataSend[2] = Status_PPGStop; //保护状态
i = (AD_Volatage >> 4) & 0xF0; //市电电压AD(高4位)
i |= (AD_Current >> 8) & 0x0F; //工作电流AD(高4位)
Buf_DataSend[1] = i;
}
break;
case 3:
{
Buf_DataSend[3] = 0xA3; //命令字
Buf_DataSend[2] = AD_Volatage; //市电电压AD(低8位)
Buf_DataSend[1] = AD_Current; //工作电流AD(低8位)
}
break;
case 4:
{
Buf_DataSend[3] = 0xA4; //命令字
Buf_DataSend[2] = AD_TmprPan; //锅底温度AD
Buf_DataSend[1] = AD_TmprIgbt; //IGBT温度AD
}
break;
case 5:
{
Buf_DataSend[3] = 0xA5; //命令字
Buf_DataSend[2] = AD_TmprTop; //顶部温度AD
Buf_DataSend[1] = AD_VRef; //内部基准电压(1.2V)AD
}
break;
case 6:
{
Buf_DataSend[3] = 0xA6; //命令字
Buf_DataSend[2] = Vol.flo.integer; //市电电压 - 80V
Buf_DataSend[1] = Count_Syn; //检锅振荡个数
}
break;
case 7:
{
Buf_DataSend[3] = 0xA7; //命令字
Buf_DataSend[2] = Time_Syn >> 8; //检锅振荡脉宽(高8位)
Buf_DataSend[1] = Time_Syn; //检锅振荡脉宽(低8位)
}
break;
case 8:
{
Buf_DataSend[3] = 0xA8; //命令字
Buf_DataSend[2] = PowerReal >> 8; //实际输出功率(高8位)
Buf_DataSend[1] = PowerReal; //实际输出功率(低8位)
}
break;
case 9:
{
Buf_DataSend[3] = 0xA9; //命令字
Buf_DataSend[2] = Buf_PPGTMR >> 8; //当前PPG导通值(高8位)
Buf_DataSend[1] = Buf_PPGTMR; //当前PPG导通值(低8位)
}
break;
case 10:
{
Buf_DataSend[3] = 0xAA; //命令字
Buf_DataSend[2] = Count_BackPress >> 8; //1级过压保护计数(高8位)
Buf_DataSend[1] = Count_BackPress; //1级过压保护计数(低8位)
}
break;
case 11:
{
Buf_DataSend[3] = 0xAB; //命令字
Buf_DataSend[2] = Count_IgbtProtect >> 8; //IGBT硬件保护计数(高8位)
Buf_DataSend[1] = Count_IgbtProtect; //IGBT硬件保护计数(低8位)
}
break;
case 12:
{
Buf_DataSend[3] = 0xAC; //命令字
Buf_DataSend[2] = Elec.flo.integer; //电量高位
Buf_DataSend[1] = Elec.flo.radix; //电量低位
}
break;
default:break;
}
i = (unsigned)Buf_DataSend[1] + Buf_DataSend[2] + Buf_DataSend[3];
Buf_DataSend[0] = (unsigned)~i; //校验和
//-----------------------------------------------------------------
B_Refrsh_DataSend = 0; //发码数据刷新完成
if(++Num_CommSend >= 13) //发码切换
{
Num_CommSend = 0;
}
}
/**********************************************************************
收码数据处理
**********************************************************************/
if(!B_Comm_No && B_Deal_DataRece)
{
B_Deal_DataRece = 0; //收码数据处理完成
i = (unsigned)Buf_DataRece[1] + Buf_DataRece[2] + Buf_DataRece[3];
i = (unsigned)~i;
j = (unsigned)Buf_DataRece[3] & 0xF0;
if((i == Buf_DataRece[0]) && ((0xB0 == j) || (0xD0 == j))) //数据校验
{
B_Comm_Have = 1; //有通信
B_Comm_Error = 0; //清通信故障标志
Time_NoComm = 0; //清无通信计时
if(0xB0 == Buf_DataRece[3])
{
Flag1_Work = Buf_DataRece[2]; //工作标志1
Flag2_Work = Buf_DataRece[1]; //工作标志2
}
else if(0xB1 == Buf_DataRece[3])
{
PowerWork = Buf_DataRece[2]; //加热功率值
}
else if(0xB2 == Buf_DataRece[3])
{
Num_LxLowOn = Buf_DataRece[2]; //连续低功率开个数
Num_LxLowOff = Buf_DataRece[1]; //连续低功率关个数
}
else if(0xD0 == Buf_DataRece[3])
{
i = (unsigned)~Buf_DataRece[1];
if(Buf_DataRece[2] == i)
{
SlopeCurr_Adjust = Buf_DataRece[2]; //电流斜率调整值
}
}
}
//-----------------------------------------------------------------
if(TestOne(Flag1_Work,0))
{
B_Heat_En = 1; //加热使能
B_Fan_En = 1; //风扇使能
}
else
{
B_Heat_En = 0; //加热关闭
B_Fan_En = 0; //风扇关闭
}
if(TestOne(Flag1_Work,1))
{
B_Fan_En = 1; //风扇使能
}
else
{
B_Fan_En = 0; //风扇关闭
}
if(TestOne(Flag1_Work,2))
{
B_Buzz_En = 1; //蜂鸣器使能
}
else
{
B_Buzz_En = 0; //蜂鸣器关闭
}
if(TestOne(Flag1_Work,3))
{
if(!B_Buzz_Out)
{
Buzz_Short_One(); //蜂鸣器短鸣1声(200ms)
}
}
if(TestOne(Flag1_Work,4))
{
if(!B_Buzz_Out)
{
Buzz_Long_One(); //蜂鸣器长鸣1声(400ms)
}
}
if(TestOne(Flag1_Work,5))
{
B_HeatStop_CheckPan = 1; //不加热但检锅
}
else
{
B_HeatStop_CheckPan = 0;
}
if(TestOne(Flag1_Work,6))
{
B_HeatStop_NoCheck = 1; //不加热不检锅
}
else
{
B_HeatStop_NoCheck = 0;
}
if(TestOne(Flag1_Work,7))
{
B_PPGDP_Dis = 1; //PPG抖频禁止
}
else
{
B_PPGDP_Dis = 0;
}
//-----------------------------------------------------------------
if(TestOne(Flag2_Work,0))
{
B_PanOver_Dis = 1; //锅底NTC超温判断禁止
}
else
{
B_PanOver_Dis = 0;
}
if(TestOne(Flag2_Work,1))
{
B_PanFail_Dis = 1; //锅底NTC失效判断禁止
}
else
{
B_PanFail_Dis = 0;
}
if(TestOne(Flag2_Work,7))
{
B_PPGDP_Can = 1; //PPG抖频强制使能
}
else
{
B_PPGDP_Can = 0;
}
}
/**********************************************************************
通信状态确认
**********************************************************************/
if(B_Comm_Have)
{ //已确认有通信
if(++Time_NoComm > 2000/C_TimeMS_Main) //2s
{
Time_NoComm = 0;
B_Comm_Error = 1; //通信故障
Buzz_Short_One(); //蜂鸣器短鸣1声
}
}
else if(!B_Comm_No)
{ //未确认有无通信
if(++Time_NoComm > 250/C_TimeMS_Main) //250ms
{
Time_NoComm = 0;
B_Comm_No = 1; //无通信
}
}
else
{ //已确认无通信
Time_NoComm = 0;
}
}
/**************************************************************************
**************************************************************************/
#endif