厂家提供的芯片资料

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

Binary file not shown.

File diff suppressed because it is too large Load Diff

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

View File

@@ -0,0 +1,30 @@
/**************************************************************************
**************************************************************************/
#ifndef _COMMUNICATE_H_
#define _COMMUNICATE_H_
#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_
/**************************************************************************
--------------------------------- º¯ÊýÉùÃ÷ --------------------------------
**************************************************************************/
void Communicate();
void Deal_CommData();
/**************************************************************************
--------------------------------- ±äÁ¿¶¨Òå --------------------------------
**************************************************************************/
volatile unsigned char Buf_DataSend[4];
volatile unsigned char Buf_DataRece[4];
volatile unsigned char Flag1_Work,Flag2_Work;
volatile unsigned char Status1_Work,Status2_Work;
volatile bit B_Deal_DataRece,B_Refrsh_DataSend;
#endif
//-------------------------------------------------------------------------
volatile bit B_Comm_No,B_Comm_Have;
/**************************************************************************
**************************************************************************/
#endif

View File

@@ -0,0 +1,461 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_
/**************************************************************************
* 函数名称:Communicate
* 函数功能:芯片通讯
* 入口参数:无
* 出口参数:无
* 备 注:中断调用
**************************************************************************/
void Communicate()
{
//收码相关寄存器定义
static unsigned int CntReceNo;
static unsigned char CountRece;
static unsigned char DataRece[4];
//发码相关寄存器定义
static unsigned char TimeSend,CountSend;
static unsigned char DataSend[4];
/**********************************************************************
收码
**********************************************************************/
if(!B_Comm_No) //无通讯,不收码
{
if(RCIF)
{
if(FERR)
{
RCREG; //帧错误
}
else
{
CntReceNo = 0;
DataRece[CountRece] = RCREG; //将接收缓冲区内容读出
if(++CountRece >= sizeof(DataRece)) //接收完一帧数据,处理数据
{
CountRece = 0;
B_Deal_DataRece = 1; //收码数据处理
Buf_DataRece[0] = DataRece[3];
Buf_DataRece[1] = DataRece[2];
Buf_DataRece[2] = DataRece[1];
Buf_DataRece[3] = DataRece[0];
}
if(OERR) //如果有溢出错误
{
CREN = 0; //清零CREN位可将OERR位清零
CREN = 1; //再次将CREN置一,以允许继续接收
}
}
}
if(++CntReceNo >= 5000/C_TimeUS_Int) //5ms
{
CountRece = 0;
}
else if(CntReceNo >= 15000/C_TimeUS_Int) //15ms
{
CntReceNo = 0;
CREN = 0;
SPBRG = 103; //设置波特率为9600bps,误差0%
STOPBIT = 0; //停止位为1bit
SYNC = 0; //0为异步模式,1为同步模式
SCKP = 0;
//SPEN = 1; //允许串口操作
RX9EN = 0; //0为8位接收,1为9位接收
CREN = 1; //0为禁止接收,1为使能接收
/*if(!SPEN)
{
SPEN = 1;
}*/
}
}
/**********************************************************************
发码
**********************************************************************/
if(B_Comm_Have) //有通讯,才发码
{
if(TXIF)
{
if(CountSend)
{
TXREG = DataSend[(unsigned)CountSend - 1];
CountSend--;
}
}
if(CountSend)
{
TimeSend = 0;
}
else if(++TimeSend >= 10000/C_TimeUS_Int) //10ms
{
TimeSend = 0;
CountSend = sizeof(DataSend); //发码数据字节数
DataSend[0] = Buf_DataSend[0];
DataSend[1] = Buf_DataSend[1];
DataSend[2] = Buf_DataSend[2];
DataSend[3] = Buf_DataSend[3];
B_Refrsh_DataSend = 1; //发码数据刷新
}
}
}
/**************************************************************************
* 函数名称:Deal_CommData
* 函数功能:通讯数据处理
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void Deal_CommData()
{
static unsigned int Time_NoComm;
static unsigned char Num_CommSend;
static bit B_Init_Uart;
volatile unsigned char i,j;
/**********************************************************************
UART初始化
**********************************************************************/
if(!B_Init_Uart)
{
B_Init_Uart = 1; //UART初始化完成
SPBRG = 103; //设置波特率为9600bps,误差0%
STOPBIT =0; //停止位为1bit
SYNC = 0; //0为异步模式,1为同步模式
SCKP = 0;
SPEN = 1; //允许串口操作
RX9EN = 0; //0为8位接收,1为9位接收
TX9EN = 0; //0为8位发送,1为9位发送
CREN = 1; //0为禁止接收,1为使能接收
TXEN = 1; //0为禁止发送,1为使能发送
}
/**********************************************************************
发码数据处理
**********************************************************************/
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; //无通讯
TXSTA = 0; //关闭UART模块
RCSTA = 0;
}
}
else
{ //已确认无通讯
Time_NoComm = 0;
}
}
/**************************************************************************
**************************************************************************/
#endif

View File

@@ -0,0 +1,215 @@
/**************************************************************************
**************************************************************************/
#ifndef _DEFINE_GLOBAL_H_
#define _DEFINE_GLOBAL_H_
#pragma warning disable 752
/**************************************************************************
---------------------------------- 头文件 ---------------------------------
**************************************************************************/
#include <cms.h>
#include "Define_Type.h"
#include "Setup_Global.h"
#include "Setup_IO.h"
#include "__REL_IhDebug.h"
#include "__CMS_IhPlus.h"
#include "Communicate.h"
#include "HMI.h"
/**************************************************************************
--------------------------------- 函数声明 --------------------------------
**************************************************************************/
unsigned char Memory_Write(unsigned char addr,unsigned char value);
unsigned char Memory_Read(unsigned char addr);
void Delay_Xus(unsigned char x);
void Delay_Xms(unsigned int x);
//-------------------------------------------------------------------------
void Buzz_Short_One();
void Buzz_Long_One();
//-------------------------------------------------------------------------
void Check_AD();
void Deal_Adc();
void Set_OutPut();
void Set_PPGWork();
/**************************************************************************
--------------------------------- 变量定义 --------------------------------
**************************************************************************/
volatile unsigned char Time_HMI; //人机界面处理计时
volatile unsigned char Time_BackPress; //过压保护处理计时
volatile unsigned char Status_PPGStop; //PPG停止状态
/*************************************************************************/
volatile unsigned char AdcCount[3]; //ADC计数
volatile unsigned char AdcData[3]; //ADC数据
volatile unsigned char Delay_Adc; //ADC延时计时
volatile unsigned char Delay_AdcNoOk; //ADC未完成延时计时
volatile unsigned int AD_VRef; //内部基准电压AD值
volatile unsigned char AD_Vdd; //VDD-AD值
volatile unsigned char AD_Gnd; //GND-AD值
volatile unsigned char AD_Current_Fst; //工作电流AD初值
volatile unsigned int AD_Current; //工作电流AD值
volatile unsigned int AD_Volatage; //市电电压AD值
volatile unsigned char AD_TmprIgbt; //IGBT温度AD值
volatile unsigned char AD_TmprPan; //锅底温度AD值
volatile unsigned char AD_TmprTop; //顶部温度AD值
volatile unsigned char Count_IgbtDown; //IGBT高温降功率次数
volatile VolElecType Vol; //电压计算结果
volatile unsigned char Min_CheckError; //故障检测计分
//-------------------------------------------------------------------------
volatile bit B_PanOver_Dis; //锅底NTC超温判断禁止
volatile bit B_PanFail_Dis; //锅底NTC失效判断禁止
volatile bit B_Dly_CheckErr; //硬件故障检测延时
volatile bit B_IgbtDown; //IGBT高温降功率
volatile bits AdcF1;
#define Flag1_Adc AdcF1.all
#define B_Adc_On AdcF1.one.b0 //ADC开启
#define B_Adc_Ok AdcF1.one.b1 //ADC完成
#define B_Adc_Error AdcF1.one.b2 //ADC错误
#define B_Adc_SetOk AdcF1.one.b3 //ADC设置完成
volatile bits AdcF2;
#define Flag2_Adc AdcF2.all
#define B_GetAD_MaxMin AdcF2.one.b0 //求AD最大最小值
#define B_GetAD_AllSum AdcF2.one.b1 //求AD总和值
#define B_CurrAdc_Fst AdcF2.one.b2 //工作电流AD初值检测完成
#define B_CurrAdc_Once AdcF2.one.b3 //工作电流ADC完成一次
#define B_VolAdc_Once AdcF2.one.b4 //市电电压ADC完成一次
volatile bits AdcCH;
#define Channel_Adc AdcCH.all //AD检测通道
#define B_Channel_Vol AdcCH.one.b0 //市电电压
#define B_Channel_Curr AdcCH.one.b1 //工作电流
#define B_Channel_Igbt AdcCH.one.b2 //IGBT温度
#define B_Channel_Pan AdcCH.one.b3 //锅底温度
#define B_Channel_Top AdcCH.one.b4 //顶部温度
#define B_Channel_VRef AdcCH.one.b5 //内部基准电压
#define B_Channel_Gnd AdcCH.one.b6 //GND
#define B_Channel_Vdd AdcCH.one.b7 //VDD
#define B_Channel_End B_Channel_Vdd //【最后一个ADC通道】
volatile bits ErrorF1;
#define Flag1_Error ErrorF1.all //硬件故障标志1
#define B_EVolLow ErrorF1.one.b0 //市电电压过低
#define B_EVolHigh ErrorF1.one.b1 //市电电压过高
#define B_EIgbtOpen ErrorF1.one.b2 //IGBT-NTC开路
#define B_EIgbtClose ErrorF1.one.b3 //IGBT-NTC短路
#define B_EIgbtOver ErrorF1.one.b4 //IGBT-NTC超温
#define B_EPanOpen ErrorF1.one.b5 //锅底NTC开路
#define B_EPanClose ErrorF1.one.b6 //锅底NTC短路
#define B_EPanOver ErrorF1.one.b7 //锅底NTC超温
volatile bits ErrorF2;
#define Flag2_Error ErrorF2.all //硬件故障标志2
#define B_EPanFail ErrorF2.one.b0 //锅底NTC失效
#define B_ETopOpen ErrorF2.one.b1 //顶部NTC开路
#define B_ETopClose ErrorF2.one.b2 //顶部NTC短路
#define B_ETopFail ErrorF2.one.b3 //顶部NTC失效
#define B_Comm_Error ErrorF2.one.b7 //通信故障
/*************************************************************************/
volatile unsigned int PwmPeriod_Fan; //风扇PWM周期
volatile unsigned int PwmDuty_Fan; //风扇PWM占空比
volatile unsigned int PwmPeriod_Buzz; //蜂鸣器PWM周期
volatile unsigned int PwmDuty_Buzz; //蜂鸣器PWM占空比
volatile unsigned char TimeBuzz; //蜂鸣器鸣叫时间
//-------------------------------------------------------------------------
volatile bits OutPutF;
#define Flag_OutPut OutPutF.all //输出控制标志
#define B_Fan_En OutPutF.one.b0 //风扇使能
#define B_Buzz_En OutPutF.one.b1 //蜂鸣器使能
#define B_Buzz_Out OutPutF.one.b2 //蜂鸣器输出
#define B_HeatStop_CheckPan OutPutF.one.b4 //不加热但检锅
#define B_HeatStop_NoCheck OutPutF.one.b5 //不加热不检锅
/*************************************************************************/
volatile VolElecType Elec; //电量计算结果
volatile unsigned int Delay_ProtectStop; //IGBT硬件保护停止延时
volatile unsigned int Count_IgbtProtect; //IGBT硬件保护计数
volatile unsigned int SlopeCurr; //电流斜率
volatile unsigned char SlopeCurr_Adjust; //电流斜率调节值
volatile unsigned int CurrentReal; //实际工作电流
volatile unsigned int PowerReal; //实际输出功率
volatile unsigned int PowerSet; //目标输出功率
//-------------------------------------------------------------------------
volatile bit B_PPGTMR_Adjust; //PPGTMR调整
volatile bit B_Adjust_SlopeCurr; //电流斜率调节
volatile bits PPGF;
#define Flag_PPG PPGF.all //PPG控制标志
#define B_PPG_En PPGF.one.b0 //PPG使能
#define B_PPGStop_CheckPan PPGF.one.b1 //PPG暂停但检锅
#define B_PPGStop_NoCheck PPGF.one.b2 //PPG暂停不检锅
/**************************************************************************
--------------------------------- 配置缓存 --------------------------------
**************************************************************************/
volatile unsigned int Buf_PPGMin;
volatile unsigned int Buf_PPGMax;
volatile unsigned int Buf_PPGMax_Steel;
volatile unsigned int Buf_PPGMax_Iron;
volatile unsigned int Buf_Power_CurrerConst;
volatile unsigned int Buf_PowerLose_VHigh;
volatile unsigned int Buf_PowerLose_VLow;
volatile unsigned char Buf_Vol_LowErr_In;
volatile unsigned char Buf_Vol_LowErr_Out;
volatile unsigned char Buf_Vol_HighErr_In;
volatile unsigned char Buf_Vol_HighErr_Out;
volatile unsigned char Buf_AD_Pan_FanOn;
volatile unsigned char Buf_AD_Pan_FanOff;
volatile unsigned char Buf_AD_Pan_OverIn;
volatile unsigned char Buf_AD_Pan_OverOut;
volatile unsigned char Buf_AD_Igbt_FanOn;
volatile unsigned char Buf_AD_Igbt_FanOff;
volatile unsigned char Buf_AD_Igbt_OverIn;
volatile unsigned char Buf_AD_Igbt_OverOut;
volatile unsigned char Buf_AD_Igbt_HighIn;
volatile unsigned char Buf_AD_Igbt_HighOut;
/**************************************************************************
--------------------------- 特殊功能寄存器自定义 --------------------------
**************************************************************************/
volatile unsigned char INTCON2 @ 0x08;
volatile unsigned char PIR1 @ 0x0C;
volatile bit ADIF @ ((unsigned)&PIR1*8)+6;
volatile bit RCIF @ ((unsigned)&PIR1*8)+5;
volatile bit TXIF @ ((unsigned)&PIR1*8)+4;
volatile bit TMR2IF @ ((unsigned)&PIR1*8)+1;
volatile bit TMR1IF @ ((unsigned)&PIR1*8)+0;
volatile unsigned char PIR2 @ 0x0D;
volatile bit PPGWDTIF @ ((unsigned)&PIR2*8)+1;
volatile unsigned char PIE1 @ 0x13;
volatile bit TMR2IE @ ((unsigned)&PIE1*8)+1;
volatile unsigned char ADCON0 @ 0x9E;
volatile bit GODONE @ ((unsigned)&ADCON0*8)+1;
volatile bit ADON @ ((unsigned)&ADCON0*8)+0;
volatile unsigned char CM1CON1 @ 0x117;
volatile bit CM1COF @ ((unsigned)&CM1CON1*8)+3;
volatile unsigned char PPGTMRL @ 0x190;
volatile unsigned char PPGTMRH @ 0x191;
/**************************************************************************
**************************************************************************/
#endif

View File

@@ -0,0 +1,64 @@
/**************************************************************************
**************************************************************************/
#ifndef _DEFINE_TYPE_H_
#define _DEFINE_TYPE_H_
/**************************************************************************
**************************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//-------------------------------------------------------------------------
#define ExteralPin(Ram,Bit,Name) volatile bit Name @((unsigned)&Ram*8)+Bit
//-------------------------------------------------------------------------
#define BOOL unsigned char //布尔型
#define TRUE 1 //真
#define FALSE 0 //假
//-------------------------------------------------------------------------
#define SetBit(x,y) x |= (1<<y) //将寄存器x的第y位置1
#define ClrBit(x,y) x &= ~(1<<y) //将寄存器x的第y位清0
#define TestOne(Ram,Bit) (Ram & (1<<Bit)) //测试寄存器Ram的Bit位是否为1
#define TestZero(Ram,Bit) !(Ram & (1<<Bit)) //测试寄存器Ram的Bit位是否为0
/**************************************************************************
**************************************************************************/
typedef union
{
unsigned char all;
struct
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
}one;
}bits;
//-------------------------------------------------------------------------
typedef struct
{
unsigned char radix; //低八位为小数
unsigned char integer; //高八位为整数
}TypeFloat;
//-------------------------------------------------------------------------
typedef union
{
unsigned int all;
TypeFloat flo;
}VolElecType;
//-------------------------------------------------------------------------
typedef union
{
unsigned long all;
unsigned char one[4];
}CommType;
/**************************************************************************
**************************************************************************/
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,341 @@
/**************************************************************************
**************************************************************************/
#if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_)
#ifndef _HMI_H_
#define _HMI_H_
/**************************************************************************
--------------------------------- 꿎桿<EABF8E>零 --------------------------------
**************************************************************************/
//<2F>零綱츠:唐땍屢 = 꿎桿鞫刻,轟땍屢 = 攣끽鞫刻
//#define _TEST_DISP_
//-------------------------------------------------------------------------
//꽝鑒츰냔:꿎桿鞫刻鑒앴1
//꽝鑒綱츠:鑒앴槨16bit
//#define C_Data1_TestDisp SlopeCurr
#define C_Data1_TestDisp (AD_TmprIgbt << 8) + AD_TmprPan
//#define C_Data1_TestDisp AD_Current_Fst
//#define C_Data1_TestDisp AD_Current
//#define C_Data1_TestDisp AD_Volatage
//#define C_Data1_TestDisp (AD_Volatage << 8) + Vol.flo.integer
//#define C_Data1_TestDisp (Time_Syn << 8) + Count_Syn
//#define C_Data1_TestDisp Buf_PPGTMR
//#define C_Data1_TestDisp Status_PPGStop//PowerWork
//#define C_Data1_TestDisp RealPower//(AD_Current << 8) + PPGTMRL
//#define C_Data1_TestDisp (PPGTMRH << 8) + PPGTMRL
//#define C_Data1_TestDisp (Flag2_Error << 8) + Flag1_Error
//#define C_Data1_TestDisp (AD_VRef<< 8) + AD_Vdd
//#define C_Data1_TestDisp (Num_LxLowOn << 8) + Num_LxLowOff
//#define C_Data1_TestDisp (AD_Current << 8) + AD_Volatage
//#define C_Data1_TestDisp (AD_VRef << 8) + AD_Volatage
//#define C_Data1_TestDisp (Status_PPGStop << 8) + AD_TmprIgbt
//꽝鑒츰냔:꿎桿鞫刻鑒앴2
//꽝鑒綱츠:鑒앴槨16bit
#define C_Data2_TestDisp C_Data1_TestDisp//(AD_Current << 8) + AD_Volatage//
/**************************************************************************
--------------------------------- 객숩<EAB09D>零 --------------------------------
**************************************************************************/
#define C_Key_OnOff TestOne(data[4],0) //역밑숩
#define C_Key_Add TestOne(data[4],3) //속숩
#define C_Key_Sub TestOne(data[3],3) //숑숩
#define C_Key_Time TestOne(data[3],0) //珂쇌숩
//-------------------------------------------------------------------------
#define C_KeyValue_OnOff 1 //역밑숩
#define C_KeyValue_Add 2 //속숩
#define C_KeyValue_Sub 3 //숑숩
#define C_KeyValue_Time 4 //珂쇌숩
/**************************************************************************
--------------------------------- 鞫刻<E99EAB>零 --------------------------------
**************************************************************************/
#define Smg_Data1 ShowData[0] //鑒쯤밗1
#define Smg_Data2 ShowData[2] //鑒쯤밗2
#define Smg_Data3 ShowData[4] //鑒쯤밗3
#define Smg_Data4 ShowData[6] //鑒쯤밗4
#define Led_Data1 ShowData[8] //LED1
#define Led_Data2 ShowData[10] //LED2
#define Led_Data3 ShowData[12] //LED3
//-------------------------------------------------------------------------
#define On_Smg_XSD SetBit(Smg_Data1,4) //鑒쯤밗鬼鑒듐
#define On_Smg_MH SetBit(Smg_Data2,4) //鑒쯤밗챨뵀
#define On_Led_M1 SetBit(Led_Data1,2) //M1寧刻됐
#define On_Led_M2 SetBit(Led_Data1,3) //M2寧刻됐
#define On_Led_M3 SetBit(Led_Data1,4) //M3寧刻됐
#define On_Led_M4 SetBit(Led_Data1,5) //M4寧刻됐
#define On_Led_M5 SetBit(Led_Data1,6) //M5寧刻됐
#define On_Led_M6 SetBit(Led_Data1,1) //M6寧刻됐
#define On_Led_M7 SetBit(Led_Data1,0) //M7寧刻됐
/**************************************************************************
* 鑒쯤밗鞫刻긍쯤:bgc_deaf
**************************************************************************/
#define Aa 0x02
#define Bb 0x80
#define Cc 0x20
#define Dd 0x08
#define Ee 0x04
#define Ff 0x01
#define Gg 0x40
//-------------------------------------------------------------------------
#define SMG_0 Aa|Bb|Cc|Dd|Ee|Ff
#define SMG_1 Bb|Cc
#define SMG_2 Aa|Bb|Dd|Ee|Gg
#define SMG_3 Aa|Bb|Cc|Dd|Gg
#define SMG_4 Bb|Cc|Ff|Gg
#define SMG_5 Aa|Cc|Dd|Ff|Gg
#define SMG_6 Aa|Cc|Dd|Ee|Ff|Gg
#define SMG_7 Aa|Bb|Cc
#define SMG_8 Aa|Bb|Cc|Dd|Ee|Ff|Gg
#define SMG_9 Aa|Bb|Cc|Dd|Ff|Gg
#define SMG_A Aa|Bb|Cc|Ee|Ff|Gg
#define SMG_B Cc|Dd|Ee|Ff|Gg
#define SMG_C Aa|Dd|Ee|Ff
#define SMG_D Bb|Cc|Dd|Ee|Gg
#define SMG_E Aa|Dd|Ee|Ff|Gg
#define SMG_F Aa|Ee|Ff|Gg
#define SMG_GG Gg
#define SMG_L Dd|Ee|Ff
#define SMG_O_MIN Cc|Dd|Ee|Gg
#define SMG_C_MIN Dd|Ee|Gg
#define SMG_K_MIN Dd|Ee|Ff|Gg
/**************************************************************************
* 번뒀侊똑뚤壇AD令
**************************************************************************/
#define C_TmprPan_300C 245
#define C_TmprPan_270C 225
#define C_TmprPan_260C 220
#define C_TmprPan_240C 219
#define C_TmprPan_230C 217
#define C_TmprPan_220C 216
#define C_TmprPan_210C 210
#define C_TmprPan_200C 208
#define C_TmprPan_190C 204
#define C_TmprPan_180C 195
#define C_TmprPan_170C 192
#define C_TmprPan_160C 188
#define C_TmprPan_150C 179
#define C_TmprPan_140C 170
#define C_TmprPan_135C 163
#define C_TmprPan_130C 155
#define C_TmprPan_120C 142
#define C_TmprPan_110C 125
#define C_TmprPan_100C 111
#define C_TmprPan_90C 94
#define C_TmprPan_80C 74
#define C_TmprPan_70C 62
#define C_TmprPan_60C 55
#define C_TmprPan_56C 53
#define C_TmprPan_50C 37
#define C_TmprPan_40C 16
/**************************************************************************
* 젯崎됴묘쪽珂쇌
**************************************************************************/
#define C_Num_LxLowOn_1D 1
#define C_Num_LxLowOff_1D 9
#define C_Num_LxLowOn_2D 2
#define C_Num_LxLowOff_2D 8
#define C_Num_LxLowOn_3D 3
#define C_Num_LxLowOff_3D 7
#define C_Num_LxLowOn_4D 4
#define C_Num_LxLowOff_4D 6
#define C_Num_LxLowOn_5D 5
#define C_Num_LxLowOff_5D 5
#define C_Num_LxLowOn_6D 6
#define C_Num_LxLowOff_6D 4
#define C_Num_LxLowOn_7D 7
#define C_Num_LxLowOff_7D 3
#define C_Num_LxLowOn_8D 8
#define C_Num_LxLowOff_8D 2
#define C_Num_LxLowOn_9D 9
#define C_Num_LxLowOff_9D 1
#define C_Num_LxLowOn_10D 0
#define C_Num_LxLowOff_10D 0
//-------------------------------------------------------------------------
#define C_Num_LxLow_1D (C_Num_LxLowOff_1D<<8) + C_Num_LxLowOn_1D
#define C_Num_LxLow_2D (C_Num_LxLowOff_2D<<8) + C_Num_LxLowOn_2D
#define C_Num_LxLow_3D (C_Num_LxLowOff_3D<<8) + C_Num_LxLowOn_3D
#define C_Num_LxLow_4D (C_Num_LxLowOff_4D<<8) + C_Num_LxLowOn_4D
#define C_Num_LxLow_5D (C_Num_LxLowOff_5D<<8) + C_Num_LxLowOn_5D
#define C_Num_LxLow_6D (C_Num_LxLowOff_6D<<8) + C_Num_LxLowOn_6D
#define C_Num_LxLow_7D (C_Num_LxLowOff_7D<<8) + C_Num_LxLowOn_7D
#define C_Num_LxLow_8D (C_Num_LxLowOff_8D<<8) + C_Num_LxLowOn_8D
#define C_Num_LxLow_9D (C_Num_LxLowOff_9D<<8) + C_Num_LxLowOn_9D
#define C_Num_LxLow_10D (C_Num_LxLowOff_10D<<8)+ C_Num_LxLowOn_10D
/**************************************************************************
* 鑒쯤밗긍쯤깊목
**************************************************************************/
const unsigned char Tab_Smg[] =
{
SMG_0, // 0
SMG_1, // 1
SMG_2, // 2
SMG_3, // 3
SMG_4, // 4
SMG_5, // 5
SMG_6, // 6
SMG_7, // 7
SMG_8, // 8
SMG_9, // 9
SMG_A, // A
SMG_B, // B
SMG_C, // C
SMG_D, // D
SMG_E, // E
SMG_F, // F
};
/**************************************************************************
* 묘쪽鞫刻깊목
**************************************************************************/
const unsigned char Tab_DispPower[] =
{
0,
0x01, // 1도--100W
0x02, // 2도--200W
0x03, // 3도--300W
0x04, // 4도--400W
0x05, // 5도--500W
0x06, // 6도--600W
0x07, // 7도--700W
0x08, // 8도--800W
0x09, // 9도--900W
0x10, //10도--1000W
0x11, //11도--1100W
0x12, //12도--1200W
0x13, //13도--1300W
0x14, //14도--1400W
0x15, //15도--1500W
0x16, //16도--1600W
0x17, //17도--1700W
0x18, //18도--1800W
0x19, //19도--1900W
0x20, //20도--2000W
};
/**************************************************************************
* 젯崎됴묘쪽몸鑒깊목
**************************************************************************/
const unsigned int Tab_LxLowNum[] =
{
0,
C_Num_LxLow_1D, // 1도
C_Num_LxLow_2D, // 2도
C_Num_LxLow_3D, // 3도
C_Num_LxLow_4D, // 4도
C_Num_LxLow_5D, // 5도
C_Num_LxLow_6D, // 6도
C_Num_LxLow_7D, // 7도
C_Num_LxLow_8D, // 8도
C_Num_LxLow_9D, // 9도
C_Num_LxLow_10D, //10도
};
/**************************************************************************
* 侊똑왠齡깊목
**************************************************************************/
/*const unsigned int Tab_ModeTmpr[] =
{
0,
(unsigned int)(65 <<8) + 60, // 1도
(unsigned int)(75 <<8) + 70, // 2도
(unsigned int)(85 <<8) + 80, // 3도
(unsigned int)(95 <<8) + 90, // 4도
(unsigned int)(105 <<8) + 100, // 5도
(unsigned int)(115 <<8) + 110, // 6도
(unsigned int)(125 <<8) + 120, // 7도
(unsigned int)(135 <<8) + 130, // 8도
(unsigned int)(145 <<8) + 140, // 9도
(unsigned int)(155 <<8) + 150, //10도
(unsigned int)(165 <<8) + 160, //11도
(unsigned int)(175 <<8) + 170, //12도
(unsigned int)(185 <<8) + 180, //13도
(unsigned int)(195 <<8) + 190, //14도
(unsigned int)(205 <<8) + 200, //15도
(unsigned int)(210 <<8) + 205, //16도
(unsigned int)(215 <<8) + 210, //17도
(unsigned int)(220 <<8) + 215, //18도
(unsigned int)(225 <<8) + 220, //19도
(unsigned int)(230 <<8) + 225, //20도
};*/
/**************************************************************************
* 묘쪽渴놔깊목
**************************************************************************/
const unsigned char Tab_DangOut[] =
{
0,
1000/C_Mult_Power, // 1도--100W
1000/C_Mult_Power, // 2도--200W
1000/C_Mult_Power, // 3도--300W
1000/C_Mult_Power, // 4도--400W
1000/C_Mult_Power, // 5도--500W
1000/C_Mult_Power, // 6도--600W
1000/C_Mult_Power, // 7도--700W
1000/C_Mult_Power, // 8도--800W
1000/C_Mult_Power, // 9도--900W
1000/C_Mult_Power, //10도--1000W
1100/C_Mult_Power, //11도--1100W
1200/C_Mult_Power, //12도--1200W
1300/C_Mult_Power, //13도--1300W
1400/C_Mult_Power, //14도--1400W
1500/C_Mult_Power, //15도--1500W
1600/C_Mult_Power, //16도--1600W
1700/C_Mult_Power, //17도--1700W
1800/C_Mult_Power, //18도--1800W
1900/C_Mult_Power, //19도--1900W
2000/C_Mult_Power, //20도--2000W
};
/**************************************************************************
--------------------------------- 변鑒<EBB380>츠 --------------------------------
**************************************************************************/
void Init_HMI();
void Deal_HMI();
/**************************************************************************
--------------------------------- 긴좆땍屢 --------------------------------
**************************************************************************/
volatile unsigned char ShowData[14];
volatile unsigned char KeyValue;
volatile unsigned char DangWei,DangOut;
volatile unsigned char Delay_Flash,Wait_Flash;
volatile unsigned char Delay_Sec,Delay_5S;
volatile unsigned char Delay_NoPan,Delay_Error;
volatile unsigned char Delay_DS;
volatile unsigned char Min_Set,Hour_Set;
volatile unsigned int Sec_Mode;
volatile unsigned char Min_Mode;
volatile unsigned char Cnt1_Mode,Cnt2_Mode;
volatile bit B_OnOff;
volatile bit B_KeyLong;
volatile bit B_DingShi,B_TimeSet;
volatile bit B_Dly_PowerOn,B_DispFlash,B_DispTurn;
volatile bit B_TmprStop;
/**************************************************************************
**************************************************************************/
#endif
#endif

View File

@@ -0,0 +1,31 @@
[PROJECT]
Version=2.03.25.5
Compile=1
Device=CMS79F5335
OptValue=-local,-asmfile,+asm,-speed,+space,-debug
RuntimeValue=
WarningValue=-9
config=F7FD,F9EF,
[FILE]
SourceFile=Subfunction.c
SourceFile=Setup_IO.c
SourceFile=Main.c
SourceFile=IRQ.c
SourceFile=ADC.c
SourceFile=PPG.c
SourceFile=OutPut.c
SourceFile=HMI.c
SourceFile=Communicate_Uart.c
SourceFile=__REL_IhDebug.c
HeadFile=Setup_IO.h
HeadFile=Setup_Global.h
HeadFile=Define_Type.h
HeadFile=Define_Global.h
HeadFile=HMI.h
HeadFile=Communicate.h
HeadFile=__CMS_IhPlus.h
HeadFile=__REL_IhDebug.h
LibraryFile=__REL_IhDebug_Comm_V1.0.0.lpp
LibraryFile=__CMS_IhPlus_CMS79F53x5_V1.0.0.lpp
OtherFile=工程版本说明.txt
OtherFile=库版本说明.txt

View File

@@ -0,0 +1,100 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* 函数名称:Deal_BackPress
* 函数功能:过压处理
* 入口参数:无
* 出口参数:无
* 备 注:中断调用
**************************************************************************/
void Deal_BackPress()
{
if(CM1IF)
{ //1级过压
CM1IF = 0;
B_Protect_BackPress = 1; //进入过压保护
Time_BackPress = 0;
}
//---------------------------------------------------------------------
if(Time_BackPress >= 10) //83.33ms\100ms,过压保护延时计时
{
B_Protect_BackPress = 0; //退出过压保护
}
}
/**************************************************************************
* 函数名称:Deal_IgbtOVUV
* 函数功能:IGBT驱动过欠压处理
* 入口参数:无
* 出口参数:无
* 备 注:中断调用
**************************************************************************/
void Deal_IgbtOVUV()
{
if(!Pin_Igbt_OVUV) //检测口为低电平
{ //IGBT驱动过欠压保护
B_Protect_Stop = 1; //硬件保护停止
Delay_ProtectStop = 0;
Flag_PPG = 0; //PPG输出关闭
B_PPG_On = B_PPG_Out = 0;
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
}
}
/**************************************************************************
* 函数名称:Deal_IntTime
* 函数功能:中断时间处理
* 入口参数:无
* 出口参数:无
* 备 注:中断调用
**************************************************************************/
void Deal_IntTime()
{
static unsigned char Delay_IntTime;
//---------------------------------------------------------------------
if(B_Zero_No)
{ //无过零信号
if(++Delay_IntTime >= 10000/C_TimeUS_Int) //10ms
{
B_Zero_Time = 1; //过零翻转(时间处理)
}
}
//---------------------------------------------------------------------
if(B_Zero_Time) //60Hz=8.333ms,50Hz\无过零=10ms
{
B_Zero_Time = 0;
Delay_IntTime = 0;
Time_BackPress++; //过压保护处理计时
Time_HMI++; //人机界面处理计时
}
}
/**************************************************************************
--------------------------------- 中断处理 --------------------------------
**************************************************************************/
void interrupt Isr_Timer()
{ //定时器中断
if(TMR2IF)
{
TMR2IF = 0; //清中断标志
Deal_BackPress(); //过压处理
Deal_IgbtOVUV(); //IGBT驱动过欠压处理
Deal_IntTime(); //中断时间处理
__CMS_Plus_Interrupt(); //中断增强处理
Check_AD(); //AD检测
#if _MODE_IHDEBUG_
REL_IhDebug_Int(); //IH调试处理(中断)
#elif !_MODE_COMM_NO_
Communicate(); //芯片通信
#endif
}
}

View File

@@ -0,0 +1,306 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* 函数名称:Init_UserRam
* 函数功能:初始化用户寄存器
* 入口参数:无
* 出口参数:无
* 备 注:初始化调用
**************************************************************************/
void Init_UserRam()
{
#if _MODE_COMM_NO_
B_Comm_No = 1; //无通信模式
#elif _MODE_COMM_HAVE_
B_Comm_Have = 1; //有通信模式
#endif
Buzz_Long_One(); //蜂鸣器长鸣1声
B_Adc_Curr = 1; //检测工作电流AD
//---------------------------------------------------------------------
//配置缓存初始化:
Buf_PPGMin = C_PPGMin;
Buf_PPGMax = C_PPGMax;
Buf_PPGMax_Steel = C_PPGMax_Steel;
Buf_PPGMax_Iron = C_PPGMax_Iron;
Buf_Power_CurrerConst = (unsigned int)(C_Vol_Low * C_Currer_Const);
Buf_PowerLose_VHigh = C_PowerLose_VHigh;
Buf_PowerLose_VLow = C_PowerLose_VLow;
Buf_Vol_LowErr_In = C_Vol_LowErr_In - C_Vol_Comp;
Buf_Vol_LowErr_Out = C_Vol_LowErr_Out - C_Vol_Comp;
Buf_Vol_HighErr_In = C_Vol_HighErr_In - C_Vol_Comp;
Buf_Vol_HighErr_Out = C_Vol_HighErr_Out - C_Vol_Comp;
Buf_AD_Pan_FanOn = C_AD_Pan_FanOn;
Buf_AD_Pan_FanOff = C_AD_Pan_FanOff;
Buf_AD_Pan_OverIn = C_AD_Pan_OverIn;
Buf_AD_Pan_OverOut = C_AD_Pan_OverOut;
Buf_AD_Igbt_FanOn = C_AD_Igbt_FanOn;
Buf_AD_Igbt_FanOff = C_AD_Igbt_FanOff;
Buf_AD_Igbt_OverIn = C_AD_Igbt_OverIn;
Buf_AD_Igbt_OverOut = C_AD_Igbt_OverOut;
Buf_AD_Igbt_HighIn = C_AD_Igbt_HighIn;
Buf_AD_Igbt_HighOut = C_AD_Igbt_HighOut;
//---------------------------------------------------------------------
ValueOPA_Set = 0B00000000;
#ifdef _TEST_PGAOUT_
ValuePGA_Set = 0B10000010 | ((C_Times_PGA & 0x03) << 5);
#else
ValuePGA_Set = 0B10000000 | ((C_Times_PGA & 0x03) << 5);
#endif
#ifdef _TEST_CMPOUT_
ValueCM_Test = 0x08 | (C_CMOUTEN_Num & 0x07);
#else
ValueCM_Test = 0;
#endif
ValuePPG_Single = C_PPGSingle;
ValueCnt_HaveNoPan = C_Vaule_HaveNoPan;
ValueTime_PPGDly = C_PPGDly;
ValueVol_VolSurge = C_Vol_VolSurge;
ValueVol_CurrSurge = C_Vol_CurrSurge;
ValueVol_OnStep = C_Vol_OnStep;
ValueVol_BackPress1 = C_Vol_BackPress1;
ValuePPG_BackPress1 = C_PPG_BackPress1;
ValueVol_BackPress2 = C_Vol_BackPress2;
}
/**************************************************************************
* 函数名称:Clean_Ram
* 函数功能:清通用寄存器
* 入口参数:无
* 出口参数:无
* 备 注:初始化调用
**************************************************************************/
void Clean_Ram()
{
CLRWDT(); //清看门狗
for(FSR = 0x20; FSR < 0x7F; FSR++)
{
INDF = 0;
}
for(FSR = 0xA0; FSR < 0xEF; FSR++)
{
INDF = 0;
}
IRP = 1;
for(FSR = 0x20; FSR < 0x7F; FSR++)
{
INDF = 0;
}
for(FSR = 0xA0; FSR < 0xEF; FSR++)
{
INDF = 0;
}
IRP = 0;
}
/**************************************************************************
* 函数名称:Init_System
* 函数功能:初始化系统
* 入口参数:无
* 出口参数:无
* 备 注:初始化调用
**************************************************************************/
void Init_System()
{
NOP();
INTCON = 0; //中断禁止
NOP();
NOP();
NOP();
NOP();
CLRWDT(); //清看门狗
OSCCON = 0x70; //内部振荡频率为32MHz(默认为16MHz)
OPTION_REG = 0B00001100; //WDT分频:1/16
PORTA = C_Init_PORTA;
PORTB = C_Init_PORTB; //初始化IO电平
PORTC = C_Init_PORTC;
#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_
WPUA = SetWPUX_CommNo(0xA);
WPUB = SetWPUX_CommNo(0xB); //初始化IO上拉
WPUC = SetWPUX_CommNo(0xC);
TRISA = SetTRISX_CommNo(0xA);
TRISB = SetTRISX_CommNo(0xB); //初始化IO方向
TRISC = SetTRISX_CommNo(0xC);
#else
WPUA = SetWPUX_CommHave(0xA);
WPUB = SetWPUX_CommHave(0xB); //初始化IO上拉
WPUC = SetWPUX_CommHave(0xC);
TRISA = SetTRISX_CommHave(0xA);
TRISB = SetTRISX_CommHave(0xB); //初始化IO方向
TRISC = SetTRISX_CommHave(0xC);
#endif
PORTA = C_Init_PORTA;
PORTB = C_Init_PORTB; //初始化IO电平
PORTC = C_Init_PORTC;
INTCON = 0; //中断禁止
INTCON2 = 0;
PIR1 = 0; //清中断请求标志
PIR2 = 0;
PIR3 = 0;
PIE1 = 0; //清中断允许标志
PIE2 = 0;
PIE3 = 0;
OPTION_REG = 0B00000111; //Timer0分频:1/256
TMR0 = 0;
TMR1H = 0;
TMR1L = 0;
T1CON = 0B00110001; //使能Timer1,预分频=8
PR2 = C_TimeUS_Int * 4; //设置Timer2时间
T2CON = 0B00001100; //使能Timer2,预分频=1,后分频=2
TMR2IE = 1; //Timer2中断使能
INTCON = 0xC0; //中断使能
}
/**************************************************************************
* 函数名称:Refurbish_IO
* 函数功能:刷新IO
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用,可增强抗干扰能力
*【注 意】:RB1必须设为推挽输出,RB2必须设为上拉输入(程序默认设置,可不改动)
**************************************************************************/
void Refresh_IO()
{
#if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_
if(B_Comm_No)
#endif
#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_
{
WPUA = SetWPUX_CommNo(0xA);
WPUB = SetWPUX_CommNo(0xB);
WPUC = SetWPUX_CommNo(0xC);
TRISA = SetTRISX_CommNo(0xA);
TRISB = SetTRISX_CommNo(0xB);
TRISC = SetTRISX_CommNo(0xC);
}
#endif
#if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_
else
#endif
#if !_MODE_COMM_NO_
{
WPUA = SetWPUX_CommHave(0xA);
WPUB = SetWPUX_CommHave(0xB);
WPUC = SetWPUX_CommHave(0xC);
TRISA = SetTRISX_CommHave(0xA);
TRISB = SetTRISX_CommHave(0xB);
TRISC = SetTRISX_CommHave(0xC);
}
#endif
}
/**************************************************************************
* 函数名称:Refurbish_Sfr
* 函数功能:刷新特殊功能寄存器
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用,可增强抗干扰能力
**************************************************************************/
void Refresh_Sfr()
{
PIE1 = 0x02;
PIE2 = 0;
PIE3 = 0;
INTCON = 0xC0; //中断使能
INTCON2 = 0;
OPTION_REG = 0B00000111; //Timer0分频:1/256
if(0B00110001 != T1CON) //T1CON值不变就不写
{ //写操作会影响计时,在T1CON没有乱的时候不写
T1CON = 0B00110000;
T1CON |= 0x01;
}
PR2 = C_TimeUS_Int * 4; //设置Timer2时间
if(0B00001100 != T2CON) //T2CON值不变就不写
{ //写操作会影响计时,在T2CON没有乱的时候不写
T2CON = 0B00001000;
T2CON |= 0x04;
}
}
/**************************************************************************
-------------------------------- 主循环处理 -------------------------------
**************************************************************************/
void main() @0x0800
{
CRCDL--;CRCDH--;
Clean_Ram(); //清通用寄存器
Init_System(); //初始化系统
#if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_)
Init_HMI(); //初始化人机界面
#endif
Delay_Xms(200); //上电延时
Init_UserRam(); //初始化用户寄存器
while(1)
{
if(TMR1IF)
{
TMR1IF = 0;
TMR1L = 0xFFFF - C_TimeMS_Main * 4000;
TMR1H = (0xFFFF - C_TimeMS_Main * 4000) >> 8;
CLRWDT(); //清看门狗
Refresh_IO(); //刷新IO
Refresh_Sfr(); //刷新特殊功能寄存器
Deal_Adc(); //ADC处理
Set_OutPut(); //输出设置
Set_PPGWork(); //PPG工作设置
#if _MODE_IHDEBUG_
REL_IhDebug_Main(); //IH调试处理(主循环)
#else
#if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_
if(B_Comm_No)
#endif
#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_
{
Deal_HMI(); //人机界面处理
}
#endif
#if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_
else
#endif
#if !_MODE_COMM_NO_
{
Deal_CommData(); //通信数据处理
}
#endif
#endif
}
}
}

View File

@@ -0,0 +1,505 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* 函数名称:OutPut_PWM
* 函数功能:PWM输出
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void OutPut_PWM()
{
volatile unsigned char i;
volatile unsigned char bak_PWMCON0 = 0B01100000; //PWM时钟分频=32
volatile unsigned char bak_PWMCON1 = 0;
//---------------------------------------------------------------------
//风扇:
#if _FAN_OUT_PWM_ && ((C_PwmChannel_Buzz&0xE0)!=(C_PwmChannel_Fan&0xE0)) && (C_PwmChannel_Fan!=0xFF)
if(PwmDuty_Fan)
{
PwmDuty_Fan--;
PwmDuty_Fan &= 0x3FF;
}
if(PwmPeriod_Fan)
{
PwmPeriod_Fan--;
PwmPeriod_Fan &= 0x3FF;
}
#if (C_PwmChannel_Fan>>4)==0
PWMDH &= ~(3 << 0); //Bit0~Bit1:PWM0占空比高2位
if(PwmDuty_Fan & 0x0200)
{
PWMDH |= (1 << 1);
}
if(PwmDuty_Fan & 0x0100)
{
PWMDH |= (1 << 0);
}
PWMD0L = PwmDuty_Fan; //PWM0占空比低8位
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
if(PwmPeriod_Fan & 0x0200)
{
PWMTH |= (1 << 1);
}
if(PwmPeriod_Fan & 0x0100)
{
PWMTH |= (1 << 0);
}
PWMTL = PwmPeriod_Fan; //PWM0~PWM1周期低8位
if(PwmDuty_Fan)
{
bak_PWMCON0 |= (1 << 0); //使能PWM0
}
#if (C_PwmChannel_Fan&0xF)==0xA
bak_PWMCON1 |= 0; //PWM的IO位置选择:PWM0A
#elif (C_PwmChannel_Fan&0xF)==0xB
bak_PWMCON1 |= 1; //PWM的IO位置选择:PWM0B
#elif (C_PwmChannel_Fan&0xF)==0xC
bak_PWMCON1 |= 2; //PWM的IO位置选择:PWM0C
#elif (C_PwmChannel_Fan&0xF)==0xD
bak_PWMCON1 |= 3; //PWM的IO位置选择:PWM0D
#endif
#elif (C_PwmChannel_Fan>>4)==1
PWMDH &= ~(3 << 2); //Bit2~Bit3:PWM1占空比高2位
if(PwmDuty_Fan & 0x0200)
{
PWMDH |= (1 << 3);
}
if(PwmDuty_Fan & 0x0100)
{
PWMDH |= (1 << 2);
}
PWMD1L = PwmDuty_Fan; //PWM1占空比低8位
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
if(PwmPeriod_Fan & 0x0200)
{
PWMTH |= (1 << 1);
}
if(PwmPeriod_Fan & 0x0100)
{
PWMTH |= (1 << 0);
}
PWMTL = PwmPeriod_Fan; //PWM0~PWM1周期低8位
if(PwmDuty_Fan)
{
bak_PWMCON0 |= (1 << 1); //使能PWM1
}
#if (C_PwmChannel_Fan&0xF)==0xA
bak_PWMCON1 |= (0 << 2); //PWM的IO位置选择:PWM1A
#elif (C_PwmChannel_Fan&0xF)==0xB
bak_PWMCON1 |= (1 << 2); //PWM的IO位置选择:PWM1B
#elif (C_PwmChannel_Fan&0xF)==0xC
bak_PWMCON1 |= (2 << 2); //PWM的IO位置选择:PWM1C
#elif (C_PwmChannel_Fan&0xF)==0xD
bak_PWMCON1 |= (3 << 2); //PWM的IO位置选择:PWM1D
#endif
#elif (C_PwmChannel_Fan>>4)==2
PWMDH &= ~(3 << 4); //Bit4~Bit5:PWM2占空比高2位
if(PwmDuty_Fan & 0x0200)
{
PWMDH |= (1 << 5);
}
if(PwmDuty_Fan & 0x0100)
{
PWMDH |= (1 << 4);
}
PWMD2L = PwmDuty_Fan; //PWM2占空比低8位
PWMTH &= ~(3 << 2); //Bit2~Bit3:PWM2周期高2位
if(PwmPeriod_Fan & 0x0200)
{
PWMTH |= (1 << 3);
}
if(PwmPeriod_Fan & 0x0100)
{
PWMTH |= (1 << 2);
}
PWM2TL = PwmPeriod_Fan; //PWM2周期低8位
if(PwmDuty_Fan)
{
bak_PWMCON0 |= (1 << 2); //使能PWM2
}
#if (C_PwmChannel_Fan&0xF)==0xA
bak_PWMCON1 |= (0 << 4); //PWM的IO位置选择:PWM2A
#elif (C_PwmChannel_Fan&0xF)==0xB
bak_PWMCON1 |= (1 << 4); //PWM的IO位置选择:PWM2B
#elif (C_PwmChannel_Fan&0xF)==0xC
bak_PWMCON1 |= (2 << 4); //PWM的IO位置选择:PWM2C
#elif (C_PwmChannel_Fan&0xF)==0xD
bak_PWMCON1 |= (3 << 4); //PWM的IO位置选择:PWM2D
#endif
#endif
#endif
//---------------------------------------------------------------------
//蜂鸣器:
#if (C_PwmChannel_Buzz!=0xFF)
if(PwmDuty_Buzz)
{
PwmDuty_Buzz--;
PwmDuty_Buzz &= 0x3FF;
}
if(PwmPeriod_Buzz)
{
PwmPeriod_Buzz--;
PwmPeriod_Buzz &= 0x3FF;
}
#if (C_PwmChannel_Buzz>>4)==0
PWMDH &= ~(3 << 0); //Bit0~Bit1:PWM0占空比高2位
if(PwmDuty_Buzz & 0x0200)
{
PWMDH |= (1 << 1);
}
if(PwmDuty_Buzz & 0x0100)
{
PWMDH |= (1 << 0);
}
PWMD0L = PwmDuty_Buzz; //PWM0占空比低8位
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
if(PwmPeriod_Buzz & 0x0200)
{
PWMTH |= (1 << 1);
}
if(PwmPeriod_Buzz & 0x0100)
{
PWMTH |= (1 << 0);
}
PWMTL = PwmPeriod_Buzz; //PWM0~PWM1周期低8位
if(PwmDuty_Buzz)
{
bak_PWMCON0 |= (1 << 0); //使能PWM0
}
#if (C_PwmChannel_Buzz&0xF)==0xA
bak_PWMCON1 |= 0; //PWM的IO位置选择:PWM0A
#elif (C_PwmChannel_Buzz&0xF)==0xB
bak_PWMCON1 |= 1; //PWM的IO位置选择:PWM0B
#elif (C_PwmChannel_Buzz&0xF)==0xC
bak_PWMCON1 |= 2; //PWM的IO位置选择:PWM0C
#elif (C_PwmChannel_Buzz&0xF)==0xD
bak_PWMCON1 |= 3; //PWM的IO位置选择:PWM0D
#endif
#elif (C_PwmChannel_Buzz>>4)==1
PWMDH &= ~(3 << 2); //Bit2~Bit3:PWM1占空比高2位
if(PwmDuty_Buzz & 0x0200)
{
PWMDH |= (1 << 3);
}
if(PwmDuty_Buzz & 0x0100)
{
PWMDH |= (1 << 2);
}
PWMD1L = PwmDuty_Buzz; //PWM1占空比低8位
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
if(PwmPeriod_Buzz & 0x0200)
{
PWMTH |= (1 << 1);
}
if(PwmPeriod_Buzz & 0x0100)
{
PWMTH |= (1 << 0);
}
PWMTL = PwmPeriod_Buzz; //PWM0~PWM1周期低8位
if(PwmDuty_Buzz)
{
bak_PWMCON0 |= (1 << 1); //使能PWM1
}
#if (C_PwmChannel_Buzz&0xF)==0xA
bak_PWMCON1 |= (0 << 2); //PWM的IO位置选择:PWM1A
#elif (C_PwmChannel_Buzz&0xF)==0xB
bak_PWMCON1 |= (1 << 2); //PWM的IO位置选择:PWM1B
#elif (C_PwmChannel_Buzz&0xF)==0xC
bak_PWMCON1 |= (2 << 2); //PWM的IO位置选择:PWM1C
#elif (C_PwmChannel_Buzz&0xF)==0xD
bak_PWMCON1 |= (3 << 2); //PWM的IO位置选择:PWM1D
#endif
#elif (C_PwmChannel_Buzz>>4)==2
PWMDH &= ~(3 << 4); //Bit4~Bit5:PWM2占空比高2位
if(PwmDuty_Buzz & 0x0200)
{
PWMDH |= (1 << 5);
}
if(PwmDuty_Buzz & 0x0100)
{
PWMDH |= (1 << 4);
}
PWMD2L = PwmDuty_Buzz; //PWM2占空比低8位
PWMTH &= ~(3 << 2); //Bit2~Bit3:PWM2周期高2位
if(PwmPeriod_Buzz & 0x0200)
{
PWMTH |= (1 << 3);
}
if(PwmPeriod_Buzz & 0x0100)
{
PWMTH |= (1 << 2);
}
PWM2TL = PwmPeriod_Buzz; //PWM2周期低8位
if(PwmDuty_Buzz)
{
bak_PWMCON0 |= (1 << 2); //使能PWM2
}
#if (C_PwmChannel_Buzz&0xF)==0xA
bak_PWMCON1 |= (0 << 4); //PWM的IO位置选择:PWM2A
#elif (C_PwmChannel_Buzz&0xF)==0xB
bak_PWMCON1 |= (1 << 4); //PWM的IO位置选择:PWM2B
#elif (C_PwmChannel_Buzz&0xF)==0xC
bak_PWMCON1 |= (2 << 4); //PWM的IO位置选择:PWM2C
#elif (C_PwmChannel_Buzz&0xF)==0xD
bak_PWMCON1 |= (3 << 4); //PWM的IO位置选择:PWM2D
#endif
#endif
#endif
//---------------------------------------------------------------------
PWMCON1 = bak_PWMCON1; //PWM的IO位置设置
if(bak_PWMCON0 != PWMCON0)
{
PWMCON0 = bak_PWMCON0; //PWM时钟分频设置,使能\禁止PWM
}
}
/**************************************************************************
* 函数名称:Buzz_Short_One
* 函数功能:蜂鸣器短鸣一声
* 入口参数:无
* 出口参数:无
* 备 注:
**************************************************************************/
void Buzz_Short_One()
{
TimeBuzz = 200/C_TimeMS_Main; //200ms
B_Buzz_Out = 1; //蜂鸣器输出
}
/**************************************************************************
* 函数名称:Buzz_Long_One
* 函数功能:蜂鸣器长鸣一声
* 入口参数:无
* 出口参数:无
* 备 注:
**************************************************************************/
void Buzz_Long_One()
{
TimeBuzz = 400/C_TimeMS_Main; //400ms
B_Buzz_Out = 1; //蜂鸣器输出
}
/**************************************************************************
* 函数名称:OutPut_Buzz
* 函数功能:蜂鸣器输出
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void OutPut_Buzz()
{
if(TimeBuzz) //蜂鸣器鸣叫计时
{
TimeBuzz--;
}
else
{
B_Buzz_Out = 0; //蜂鸣器输出停止
}
//---------------------------------------------------------------------
#if (C_PwmChannel_Buzz!=0xFF)
PwmPeriod_Buzz = 250; //蜂鸣器PWM周期:250us
if(B_Buzz_En || B_Buzz_Out)
{ //蜂鸣器输出
PwmDuty_Buzz = 125; //蜂鸣器PWM占空比:125us
}
else
{ //蜂鸣器关闭
PwmDuty_Buzz = 0; //蜂鸣器PWM占空比:0us
}
#endif
}
/**************************************************************************
* 函数名称:OutPut_Fan
* 函数功能:风扇输出
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void OutPut_Fan()
{
static unsigned int Delay_FanOut;
static unsigned char Flag_FanOut;
//---------------------------------------------------------------------
if((AD_TmprPan > Buf_AD_Pan_FanOn) || (AD_TmprIgbt > Buf_AD_Igbt_FanOn))
{ //锅底高温、IGBT高温
SetBit(Flag_FanOut,0);
}
else if((AD_TmprPan < Buf_AD_Pan_FanOff) && (AD_TmprIgbt < Buf_AD_Igbt_FanOff))
{
ClrBit(Flag_FanOut,0);
}
//---------------------------------------------------------------------
if(B_Heat_En)
{ //加热使能
SetBit(Flag_FanOut,1);
if(TestOne(Flag_FanOut,0))
{ //锅底高温、IGBT高温
Delay_FanOut = 1000u/C_TimeMS_Main*180; //3min
}
else
{ //锅底和IGBT温度正常
Delay_FanOut = 0;
}
}
else
{
ClrBit(Flag_FanOut,1);
}
//---------------------------------------------------------------------
if(B_Fan_En || B_Zero_Lose)
{ //风扇使能、过零丢失
SetBit(Flag_FanOut,2);
}
else
{
ClrBit(Flag_FanOut,2);
}
//---------------------------------------------------------------------
if(Delay_FanOut)
{ //风扇延时
Delay_FanOut--;
SetBit(Flag_FanOut,3);
}
else
{
ClrBit(Flag_FanOut,3);
}
//---------------------------------------------------------------------
#if !_FAN_OUT_PWM_ || ((C_PwmChannel_Buzz&0xE0)==(C_PwmChannel_Fan&0xE0)) || (C_PwmChannel_Fan==0xFF)
if(Flag_FanOut && B_CurrAdc_Fst)
{
Pin_Fan = 1; //风扇输出(IO口输出高)
}
else
{
Pin_Fan = 0; //风扇输出停止(IO口输出低)
}
//---------------------------------------------------------------------
#else
PwmPeriod_Fan = 60; //风扇PWM周期:60us
if(Flag_FanOut && B_CurrAdc_Fst)
{
PwmDuty_Fan = 60; //风扇PWM占空比:60us
}
else
{
PwmDuty_Fan = 0; //风扇PWM占空比:0us
}
#endif
}
/**************************************************************************
* 函数名称:OutPut_Heat
* 函数功能:加热输出
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void OutPut_Heat()
{
if(B_Protect_Stop)
{ //IGBT保护停止
Flag_PPG = 0; //PPG输出关闭
B_PPG_On = B_PPG_Out = 0;
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
}
#ifndef _TEST_PPGOUT_ //PPG输出测试
#ifndef _TEST_PANCHECK_ //检锅测试
#if _MODE_IHDEBUG_
else if((!B_Heat_En || Flag1_Error || Flag2_Error) &&\
!B_Test_PPGOut && !B_Test_PanCheck)
#else
else if(!B_Heat_En || Flag1_Error || Flag2_Error)
#endif
{ //加热关闭、故障
Flag_PPG = 0; //PPG输出关闭
B_PPG_On = B_PPG_Out = 0;
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
}
#endif
#endif
else
{ //正常加热输出
B_PPG_En = 1; //使能PPG输出
#ifndef _TEST_PPGOUT_ //PPG输出测试
#if _MODE_IHDEBUG_
if(!B_Test_PPGOut)
#endif
{
if(B_HeatStop_CheckPan)
{
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
}
else
{
B_PPGStop_CheckPan = 0;
}
if(B_HeatStop_NoCheck)
{
B_PPGStop_NoCheck = 1; //PPG暂停不检锅
}
else
{
B_PPGStop_NoCheck = 0;
}
}
#endif
#ifdef _TEST_PANCHECK_ //检锅测试
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
#elif _MODE_IHDEBUG_
if(B_Test_PanCheck) //检锅测试
{
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
}
#endif
}
}
/**************************************************************************
* 函数名称:Set_OutPut
* 函数功能:输出设置
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void Set_OutPut()
{
OutPut_PWM(); //PWM输出
OutPut_Heat(); //加热输出
OutPut_Fan(); //风扇输出
OutPut_Buzz(); //蜂鸣器输出
}

View File

@@ -0,0 +1,580 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* 函数名称:Calc_Electric
* 函数功能:计算工作电量
* 入口参数:无
* 出口参数:无
* 备 注:内部调用,计算结果放于Elec结构中
* P*t = 0.01度 = 1度/100 = 1KW.h/100 = 36000W.s
* P*7/1000 = 36*7 = 252
**************************************************************************/
void Calc_Electric()
{
static unsigned char ElecTime,ElecBasic;
//---------------------------------------------------------------------
if(B_PPG_Out && (0 == --ElecTime))
{
//256*256*256*7/1000/2 = 0xE560,放大256^3倍
//运算结果取最高位还原数据
ElecBasic += ((unsigned long)0xE560 * PowerReal) >> 24;
//1s为7个值,误差补偿4s即28个值,252-4*7=224
if(ElecBasic >= 224)
{
ElecBasic -= 224;
if(++Elec.flo.radix >= 100) //0.01度
{
Elec.flo.radix = 0;
Elec.flo.integer++; //1度
}
}
ElecTime = 500/C_TimeMS_Main; //0.5s
}
}
/**************************************************************************
* 函数名称:Igbt_Protect
* 函数功能:IGBT硬件保护
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void Igbt_Protect()
{
static bit B_Bak_IgbtProtect;
volatile unsigned char i;
//---------------------------------------------------------------------
if(CM1COF || CM2IF || CM3IF || CM4IF || CM5IF || PPGWDTIF)
{
i = 0;
if(CM1COF) SetBit(i,0); //1级过压比较器计数溢出
if(CM2IF) SetBit(i,1); //电压浪涌
if(CM3IF) SetBit(i,2); //电流浪涌
if(CM4IF) SetBit(i,3); //2级过压
if(CM5IF) SetBit(i,4); //导通台阶过高
if(PPGWDTIF) SetBit(i,5); //PPG看门狗溢出
Status_PPGStop = i; //PPG停止状态
B_ProtectCM_Restart = 1; //保护比较器重启
B_Protect_Stop = 1; //硬件保护停止
Delay_ProtectStop = 0;
if(!B_Bak_IgbtProtect)
{
if(Count_IgbtProtect < 0xFFFF)
{
Count_IgbtProtect++; //IGBT硬件保护计数+1
}
}
B_Bak_IgbtProtect = 1; //备份状态
}
else
{
B_Bak_IgbtProtect = 0; //备份状态
}
//---------------------------------------------------------------------
if(B_Protect_Stop)
{ //硬件保护停止
Flag_PPG = 0; //PPG输出关闭
B_PPG_On = B_PPG_Out = 0;
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
if(++Delay_ProtectStop > 2000/C_TimeMS_Main) //2s
{
Delay_ProtectStop = 0;
B_Protect_Stop = 0; //退出硬件保护停止状态
Status_PPGStop = 0;
}
}
//---------------------------------------------------------------------
CM1COF = 0; //清比较器标志
CM2IF = 0;
CM3IF = 0;
CM4IF = 0;
CM5IF = 0;
PPGWDTIF = 0;
if(!B_Heat_En)
{ //加热关闭
Count_IgbtProtect = 0; //清IGBT硬件保护计数
}
}
/**************************************************************************
* 函数名称:Set_SlopeCurr
* 函数功能:电流斜率设置
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void Set_SlopeCurr()
{
static unsigned char OldAdjust;
static bit B_Init_CurrSlope;
volatile unsigned char i,j;
//---------------------------------------------------------------------
if(!B_Init_CurrSlope) //电流斜率调整值初始化
{
i = Memory_Read(C_EEAddr_CheckAA);
j = Memory_Read(C_EEAddr_Check55);
if((0xAA == i) && (0x55 == j))
{
i = Memory_Read(C_EEAddr_DataP);
j = (unsigned)~Memory_Read(C_EEAddr_DataI);
if(i == j)
{
SlopeCurr_Adjust = i; //EE数据校验通过,选用EE读取值
}
else
{
SlopeCurr_Adjust = 0x80; //EE数据校验不通过,选用默认值
}
}
else
{
SlopeCurr_Adjust = 0x80; //EE数据校验不通过,选用默认值
}
OldAdjust = SlopeCurr_Adjust;
B_Init_CurrSlope = 1; //初始化完成
}
//---------------------------------------------------------------------
if(OldAdjust != SlopeCurr_Adjust) //电流斜率调整值写入EE
{
i = 0;
i |= Memory_Write(C_EEAddr_CheckAA,0xAA);
i |= Memory_Write(C_EEAddr_Check55,0x55);
i |= Memory_Write(C_EEAddr_DataP,SlopeCurr_Adjust);
i |= Memory_Write(C_EEAddr_DataI,(unsigned)~SlopeCurr_Adjust);
if(0 == i)
{ //写入EE成功
OldAdjust = SlopeCurr_Adjust; //更新电流斜率调整值旧值
}
}
//---------------------------------------------------------------------
if(SlopeCurr_Adjust & 0x80) //电流斜率调整
{
SlopeCurr = SlopeCurr_Set + (((unsigned int)SlopeCurr_Adjust & 0x7F) << 4);
}
else
{
SlopeCurr = SlopeCurr_Set - (((unsigned int)0x80 - SlopeCurr_Adjust) << 4);
}
#if _MODE_IHDEBUG_
if(B_Test_SlopeCurr) //电流斜率测试
{
SlopeCurr = SlopeCurr_Test; //测试电流斜率
}
#endif
}
/**************************************************************************
* 函数名称:Set_PPGPower
* 函数功能:PPG功率设置
* 入口参数:无
* 出口参数:无
* 备 注:内部调用
**************************************************************************/
void Set_PPGPower()
{
static unsigned char Cnt_AddPPG,Cnt_SubPPG;
static unsigned int Delay_LosePan;
static bit B_PPGStop1,B_PPGStop2;
volatile unsigned int realpower,setpower;
volatile unsigned int data;
volatile unsigned char i,j,x,y;
/*********************************************************************/
if(!B_CurrAdc_Fst || !B_PPG_En)
{ //电流AD初值检测未完成、未使能PPG输出
B_PPG_On = 0; //PPG停止
B_PPG_Out = 0; //PPG输出关闭
B_PPGStop1 = 1; //PPG停止
B_PPGStop2 = 0;
Delay_CheckPan = 0; //清检锅延时时间
}
else if(B_PPGStop_CheckPan || B_PPGStop_NoCheck)
{
B_PPG_On = 0; //PPG停止
B_PPG_Out = 0; //PPG输出关闭
B_PPGStop1 = 0;
B_PPGStop2 = 1; //PPG暂停
if(B_PPGStop_CheckPan || B_Pan_No)
{
if(Delay_CheckPan)
{ //检锅延时计时
Delay_CheckPan--;
}
else
{ //检锅延时完成
Delay_CheckPan = C_Time_StopCheck; //PPG暂停检锅间隔时间
B_Pan_Check = 1; //检锅
}
}
else
{
Delay_CheckPan = 0; //清检锅延时时间
}
}
else
{
if(!B_Pan_Have || B_PPGStop1 || B_PPGStop2)
{
B_PPG_Out = 0; //PPG输出关闭
if(!Delay_CheckPan || B_PPGStop2)
{ //检锅延时完成
Delay_CheckPan = C_Time_CheckPan; //正常工作检锅间隔时间
B_Pan_Check = 1; //检锅
}
else
{ //检锅延时计时
Delay_CheckPan--;
}
B_PPGStop1 = B_PPGStop2 = 0;
}
else if(B_Pan_Check)
{
B_PPG_Out = 0;
}
else
{
Delay_CheckPan = 0; //清检锅延时时间
if(!B_PPG_Out)
{
B_PPG_Out = 1; //PPG输出
B_PPGTMR_WriteLock = 1; //写上锁
if(B_Vol_Low)
{
if(B_Pan_Iron)
{
Buf_PPGTMR = C_PPGFirst_VL_Iron;
}
else
{
Buf_PPGTMR = C_PPGFirst_VL_Steel;
}
}
else
{
if(B_Pan_Iron)
{
Buf_PPGTMR = C_PPGFirst_Iron;
}
else
{
Buf_PPGTMR = C_PPGFirst_Steel;
}
}
B_PPGTMR_WriteLock = 0; //写解锁
}
}
B_PPG_On = 1; //PPG开启
}
//---------------------------------------------------------------------
if(!B_PPG_Out)
{ //PPG输出关闭
B_CurrAdc_Once = 0;
CurrentReal = PowerReal = 0;
B_Pan_LoseDly = 0;
return;
}
/*********************************************************************/
//实际功率计算
//斜率放大了256^2倍,运算结果取中间2字节相当于实际电流放大了256倍
CurrentReal = ((unsigned long)SlopeCurr * AD_Current) >> 8;
i = SlopeCurr >> 8;
if(B_Vol_Low)
{ //低压区间的实际功率计算
PowerReal = ((unsigned long)C_Vol_Low * CurrentReal) >> 8;
realpower = ((unsigned long)C_Vol_Low * (CurrentReal + i)) >> 8;
}
else
{
PowerReal = (((unsigned long)Vol.all + (C_Vol_Comp << 8)) * CurrentReal) >> 16;
realpower = (((unsigned long)Vol.all + (C_Vol_Comp << 8)) * (CurrentReal + i)) >> 16;
}
//---------------------------------------------------------------------
//设定功率计算
PowerSet = (unsigned int)PowerWork * C_Mult_Power; //其他区间的设定功率值计算
if(B_Vol_Low)
{ //低压区间的设定功率值计算
PowerSet = Buf_Power_CurrerConst;
}
else if(B_Vol_Mid)
{ //低中压区间的设定功率值计算
if(Vol.flo.integer < (C_Vol_Low - C_Vol_Comp))
{
PowerSet = Buf_Power_CurrerConst;
}
else if(Vol.flo.integer <= (C_Vol_Mid - C_Vol_Comp))
{ //线性下降功率,相同档位下,不同的电压采用不同的功率
if(PowerSet > Buf_Power_CurrerConst)
{
data = PowerSet - Buf_Power_CurrerConst;
data = (unsigned long)data * 256 / (C_Vol_Mid - C_Vol_Low);
data = ((unsigned long)data * (unsigned char)(C_Vol_Mid - C_Vol_Comp - Vol.flo.integer)) >> 8;
PowerSet -= data;
}
}
}
/*********************************************************************/
if(!B_Pan_LoseDly)
{ //电流丢锅检测延时未完成
B_CurrAdc_Once = 0;
}
#ifdef _TEST_PPGOUT_ //PPG输出测试
else if(1)
{
B_CurrAdc_Once = 0;
B_PPGTMR_WriteLock = 1; //写上锁
Buf_PPGTMR = _TEST_PPGOUT_;
B_PPGTMR_WriteLock = 0; //写解锁
}
#elif _MODE_IHDEBUG_
else if(B_Test_PPGOut && PPGTMR_TestPPG)
{
B_CurrAdc_Once = 0;
B_PPGTMR_WriteLock = 1; //写上锁
Buf_PPGTMR = PPGTMR_TestPPG;
B_PPGTMR_WriteLock = 0; //写解锁
}
#endif
//---------------------------------------------------------------------
//调整功率:根据实际功率和设定功率,输出PPG
else if(B_CurrAdc_Once)
{
B_CurrAdc_Once = 0; //工作电流ADC完成一次,调整一次功率
B_PPGTMR_ReadLock = 1; //读上锁
Value_PPGTMR = Buf_PPGTMR; //读取当前PPGTMR值
B_PPGTMR_ReadLock = 0; //读解锁
B_PPGTMR_Adjust = 1; //PPGTMR调整
if((PowerReal < PowerSet) && (realpower < PowerSet))
{ //实际功率比设定功率小,增加PPG
Cnt_SubPPG = 0;
data = PowerSet - PowerReal; //获得功率差值
x = data;
y = data >> 8;
if(0 == y)
{
{i = 2; j = 1;} //功率差值<8W
if(x & 0x08) {i = 2; j = 1;} //功率差值>=8W
if(x & 0x10) {i = 2; j = 2;} //功率差值>=16W
if(x & 0x20) {i = 1; j = 3;} //功率差值>=32W
if(x & 0x40) {i = 1; j = 4;} //功率差值>=64W
if(x & 0x80) {i = 1; j = 5;} //功率差值>=128W
}
else
{ //功率差值>=256W
i = 0; j = 10;
}
if(B_Protect_BackPress)
{ //过压保护
Cnt_AddPPG = 0;
}
else if(++Cnt_AddPPG >= i)
{
Cnt_AddPPG = 0;
Value_PPGTMR += j; //PPG增加
if(B_Pan_Iron) data = Buf_PPGMax_Iron;
else if(B_Pan_Steel) data = Buf_PPGMax_Steel;
else data = Buf_PPGMax;
if(Value_PPGTMR > data) //判断是否已达到设定最大值
{
Value_PPGTMR = data;
}
}
}
else if((PowerReal > PowerSet) && (realpower > PowerSet))
{ //实际功率比设定功率大,减小PPG
Cnt_AddPPG = 0;
data = realpower - PowerSet; //获得功率差值
x = data;
y = data >> 8;
if(0 == y)
{
{i = 4; j = 1;} //功率差值<8W
if(x & 0x08) {i = 4; j = 1;} //功率差值>=8W
if(x & 0x10) {i = 4; j = 2;} //功率差值>=16W
if(x & 0x20) {i = 2; j = 3;} //功率差值>=32W
if(x & 0x40) {i = 1; j = 16;} //功率差值>=64W
if(x & 0x80) {i = 0; j = 32;} //功率差值>=128W
}
else
{ //功率差值>=256W
i = 0; j = 64;
}
if(++Cnt_SubPPG >= i)
{
Cnt_SubPPG = 0;
Value_PPGTMR -= j; //PPG减小
data = Buf_PPGMin;
if(Value_PPGTMR < data) //判断是否已达到设定最小值
{
Value_PPGTMR = data;
}
}
}
else
{ //实际功率跟设定功率相等
Cnt_AddPPG = 0;
Cnt_SubPPG = 0;
}
if(B_PPGTMR_Adjust)
{
B_PPGTMR_Adjust = 0;
B_PPGTMR_WriteLock = 1; //写上锁
Buf_PPGTMR = Value_PPGTMR; //写回当前PPGTMR值
B_PPGTMR_WriteLock = 0; //写解锁
}
}
/*********************************************************************/
//电流丢锅判断:
if(!B_Pan_LoseDly) //开启PPG延时一定时间,才检测丢锅
{
if(B_Vol_Low)
{
if(B_Pan_Iron)
{
data = C_PPGStart_VL_Iron;
}
else
{
data = C_PPGStart_VL_Steel;
}
}
else
{
if(B_Pan_Iron)
{
data = C_PPGStart_Iron;
}
else
{
data = C_PPGStart_Steel;
}
}
B_PPGTMR_ReadLock = 1; //读上锁
Value_PPGTMR = Buf_PPGTMR; //读取当前PPGTMR值
B_PPGTMR_ReadLock = 0; //读解锁
if(Value_PPGTMR < data) //功率爬升
{
B_PPGTMR_WriteLock = 1; //写上锁
Buf_PPGTMR += 4;
B_PPGTMR_WriteLock = 0; //写解锁
}
else
{
B_Pan_LoseDly = 1; //延时完成
Delay_LosePan = 1500/C_TimeMS_Main; //1.5s
}
}
#if _MODE_IHDEBUG_
else if(B_LosePanCheck_Dis) //禁止电流丢锅检测
{
Delay_LosePan = 1000/C_TimeMS_Main; //1s
}
#endif
else
{ //开始判断
if(!B_Vol_Mid)
{ //其他区间,电流丢锅值计算
setpower = Buf_PowerLose_VHigh; //非低压电流丢锅判断功率
i = C_Vol_High;
}
else
{ //低压\低中压区间,电流丢锅值计算
setpower = Buf_PowerLose_VLow; //低压电流丢锅判断功率
i = C_Vol_Low;
}
realpower = ((unsigned long)i * CurrentReal) >> 8;
if(setpower > realpower)
{
if(Delay_LosePan)
{
Delay_LosePan--;
}
else
{
B_Pan_LoseDly = 0;
B_Pan_No = 1; //无锅状态
B_Pan_Have = 0;
}
}
else if(Delay_LosePan > 500/C_TimeMS_Main)
{
Delay_LosePan--;
}
else
{
Delay_LosePan = 500/C_TimeMS_Main; //500ms
}
}
}
/**************************************************************************
* 函数名称:Set_PPGWork
* 函数功能:PPG工作设置
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void Set_PPGWork()
{
__CMS_Plus_PPG(); //PPG增强处理
Igbt_Protect(); //IGBT硬件保护
Set_SlopeCurr(); //电流斜率设置
Set_PPGPower(); //PPG功率设置
Calc_Electric(); //计算工作电量
}

View File

@@ -0,0 +1,359 @@
/**************************************************************************
**************************************************************************/
#ifndef _SETUP_GLOBAL_H_
#define _SETUP_GLOBAL_H_
/**************************************************************************
--------------------------------- 硬件配置 --------------------------------
**************************************************************************/
//配置内容:测温NTC上下拉
//配置说明:1 = IGBT测温NTC为上拉,0 = 下拉
#define _UP_NTC_IGBT_ 0
//配置说明:1 = 锅底测温NTC为上拉,0 = 下拉
#define _UP_NTC_PAN_ 1
//配置说明:1 = 顶部测温NTC为上拉,0 = 下拉
#define _UP_NTC_TOP_ 0
/**************************************************************************
--------------------------------- 软件配置 --------------------------------
**************************************************************************/
//配置内容:工作模式
//配置说明:1 = 调试模式,0 = 非调试模式
#define _MODE_IHDEBUG_ 0
//-------------------------------------------------------------------------
//配置内容:通信模式
//配置说明:00 = 系统自动识别
// 01 = 强制为有通信模式
// 1x = 强制为无通信模式
#define _MODE_COMM_NO_ 0
#define _MODE_COMM_HAVE_ 1
//-------------------------------------------------------------------------
//配置内容:风扇输出模式
//配置说明:1 = PWM输出,0 = 普通IO输出
#define _FAN_OUT_PWM_ 0
/**************************************************************************
--------------------------------- 市电电压 --------------------------------
**************************************************************************/
//【市电电压对应AD值】:
//参数名称:市电电压对应AD值
//参数说明:通过上电实测获取
#define C_AD_V290 219
#define C_AD_V220 167
#define C_AD_V160 121
#define C_AD_V100 75
#define C_AD_V80 59
//-------------------------------------------------------------------------
//【市电电压故障】:
//参数名称:高压故障判断电压值(V)
#define C_Vol_HighErr_In 285
//参数名称:高压故障恢复电压值(V)
#define C_Vol_HighErr_Out 260
//参数名称:低压故障恢复电压值(V)
#define C_Vol_LowErr_Out 115
//参数名称:低压故障判断电压值(V)
#define C_Vol_LowErr_In 100
//-------------------------------------------------------------------------
//【市电电压区间】:
//参数名称:低压区间判断电压值(V)
#define C_Vol_Low 160
//参数名称:中压区间判断电压值(V)
#define C_Vol_Mid 210
//参数名称:高压区间判断电压值(V)
#define C_Vol_High 240
//-------------------------------------------------------------------------
//【市电电压计算】:
//参数名称:最大处理电压值(V)
#define C_Vol_Max 290
//参数名称:最小处理电压值(V)
#define C_Vol_Min 80
//参数名称:计算补偿电压值(V)
//参数说明:便于使用8bit寄存器保存电压值
#define C_Vol_Comp C_Vol_Min
//参数名称:最大处理电压AD值
#define C_AD_VolMax C_AD_V290
//参数名称:最小处理电压AD值
#define C_AD_VolMin C_AD_V80
//参数名称:电压斜率
//计算公式:256 *(最大处理电压值-最小处理电压值)/(最大处理电压AD值-最小处理电压AD值)
#define C_Slope_Volatage (unsigned int)256 * (C_Vol_Max - C_Vol_Min) / (C_AD_VolMax - C_AD_VolMin)
/**************************************************************************
--------------------------------- 工作电流 --------------------------------
**************************************************************************/
//计算公式:电流斜率 = 256 * 256 * 实际电流 / 检测的电流AD
//参数说明:电流斜率越大,功率越小
//参数名称:铁锅电流斜率
#define C_SlopeIron_Curr 5900
//参数名称:钢锅电流斜率
#define C_SlopeSteel_Curr 5900
/**************************************************************************
--------------------------------- 锅具检测 --------------------------------
**************************************************************************/
//参数名称:有无锅判断值
//参数说明:>此判断值,即判断为无锅
#define C_Vaule_HaveNoPan 5
//参数名称:钢铁锅判断值
//参数说明:<=此判断值,即判断为钢锅,否则为铁锅
//实际数据:铁=215~239、钢=187~192
#define C_Vaule_SteelIron (215+192)/2
//-------------------------------------------------------------------------
//参数名称:检锅间隔时间(实际:2秒)
#define C_Time_CheckPan 2000/C_TimeMS_Main
//参数名称:停止加热检锅间隔时间(实际:2秒)
#define C_Time_StopCheck 2000/C_TimeMS_Main
/**************************************************************************
---------------------------------- PPG输出 --------------------------------
**************************************************************************/
//参数名称:PPG导通延时值
//取值范围:0~15
//对应关系:0=不延时,1=4~5*125ns,2=8~9*125ns,……15=64~65*125ns
#define C_PPGDly 0
//-------------------------------------------------------------------------
//取值范围:0~4095
//计算公式:PPG导通时间 = PPG导通值 / 32MHz
//参数名称:单次检锅PPG导通值
#define C_PPGSingle 192
//参数名称:铁锅点火PPG导通值
#define C_PPGFirst_Iron 250
//参数名称:钢锅点火PPG导通值
#define C_PPGFirst_Steel 250
//参数名称:低压铁锅点火PPG导通值
#define C_PPGFirst_VL_Iron 400
//参数名称:低压钢锅点火PPG导通值
#define C_PPGFirst_VL_Steel 400
//参数名称:铁锅起始PPG导通值
#define C_PPGStart_Iron 350
//参数名称:钢锅起始PPG导通值
#define C_PPGStart_Steel 280
//参数名称:低压铁锅起始PPG导通值
#define C_PPGStart_VL_Iron 550
//参数名称:低压钢锅起始PPG导通值
#define C_PPGStart_VL_Steel 550
//-------------------------------------------------------------------------
//取值范围:0~4095
//计算公式:PPG导通时间 = PPG导通值 / 32MHz
//参数名称:默认最大PPG导通值
#define C_PPGMax 960
//参数名称:铁锅最大PPG导通值
#define C_PPGMax_Iron 960
//参数名称:钢锅最大PPG导通值
#define C_PPGMax_Steel 780
//参数名称:最小PPG导通值
#define C_PPGMin 150
/**************************************************************************
--------------------------------- 功率处理 --------------------------------
**************************************************************************/
//参数名称:功率处理因数
#define C_Mult_Power 10
//-------------------------------------------------------------------------
//参数名称:恒流阶段电流(A)
#define C_Currer_Const 6.0
//-------------------------------------------------------------------------
//参数名称:低压电流丢锅判断功率(W)
#define C_PowerLose_VLow 350
//参数名称:非低压电流丢锅判断功率(W)
#define C_PowerLose_VHigh 650
/**************************************************************************
---------------------------------- 比较器 ---------------------------------
**************************************************************************/
//参数名称:电压浪涌保护设置值
//取值范围:0~24
//对应关系:1.6V~4V(共25档,每档0.1V)
#define C_Vol_VolSurge 18
//-------------------------------------------------------------------------
//参数名称:电流浪涌保护设置值
//取值范围:0~255
//计算公式:保护电压(IO) = 设置值 * 4 / 255
#define C_Vol_CurrSurge 90
//-------------------------------------------------------------------------
//参数名称:导通台阶保护设置值
//取值范围:0~255
//计算公式:保护电压(IO) = 设置值 * 4 / 255
#define C_Vol_OnStep 80
//-------------------------------------------------------------------------
//参数名称:1级过压保护设置值(实际:1.22KV)
//取值范围:0~255
//计算公式:保护电压(IO) = 设置值 * 4 / 255
#define C_Vol_BackPress1 165
//参数名称:1级过压保护PPG下降步进
//取值范围:0~15
//对应关系:0=0个,1=2个,……15=30个
#define C_PPG_BackPress1 10
//-------------------------------------------------------------------------
//参数名称:2级过压保护设置值(实际:1.3KV)
//取值范围:0~24
//对应关系:1.6V~4V(共25档,每档0.1V)
#define C_Vol_BackPress2 11
//-------------------------------------------------------------------------
//参数名称:线盘电压判断值
//取值范围:0~19
//对应关系:0.1V~2V(共20档,每档0.1V)
#define C_Vol_CoilVol 0
//-------------------------------------------------------------------------
//参数名称:过零翻转判断值(常压)
//取值范围:0~31
//对应关系:0.1V~3.2V(共32档,每档0.1V)
#define C_Vol_ZeroTurn 8
//参数名称:过零翻转判断值(高压)
//取值范围:0~31
//对应关系:0.1V~3.2V(共32档,每档0.1V)
#define C_Vol_ZeroTurn_VH 12
//参数名称:过零翻转判断值(低压)
//取值范围:0~31
//对应关系:0.1V~3.2V(共32档,每档0.1V)
#define C_Vol_ZeroTurn_VL 8
/**************************************************************************
----------------------------------- PGA -----------------------------------
**************************************************************************/
//参数名称:PGA放大倍数设置值
//取值范围:0~3
//对应关系:0=8倍、1=16倍、2=32倍、3=64倍
#define C_Times_PGA 1
/**************************************************************************
--------------------------------- 顶部NTC ---------------------------------
**************************************************************************/
//硬件结构:100K热敏电阻 + 10K固定电阻
//软件结构:8bit-AD
//-------------------------------------------------------------------------
//参数名称:顶部NTC开路判断温度AD值
#define C_AD_Top_OpenIn 3
//参数名称:顶部NTC开路恢复温度AD值
#define C_AD_Top_OpenOut 7
//-------------------------------------------------------------------------
//参数名称:顶部NTC短路判断温度AD值
#define C_AD_Top_CloseIn 252
//参数名称:顶部NTC短路恢复温度AD值
#define C_AD_Top_CloseOut 248
/**************************************************************************
--------------------------------- 锅底NTC ---------------------------------
**************************************************************************/
//硬件结构:100K热敏电阻 + 10K固定电阻
//软件结构:8bit-AD
//-------------------------------------------------------------------------
//参数名称:锅底开风扇判断温度AD值
#define C_AD_Pan_FanOn 73
//参数名称:锅底关风扇判断温度AD值
#define C_AD_Pan_FanOff 64
//-------------------------------------------------------------------------
//参数名称:锅底超温判断温度AD值
#define C_AD_Pan_OverIn 224
//参数名称:锅底超温恢复温度AD值
#define C_AD_Pan_OverOut 220
//-------------------------------------------------------------------------
//参数名称:锅底NTC开路判断温度AD值
#define C_AD_Pan_OpenIn 3
//参数名称:锅底NTC开路恢复温度AD值
#define C_AD_Pan_OpenOut 7
//-------------------------------------------------------------------------
//参数名称:锅底NTC短路判断温度AD值
#define C_AD_Pan_CloseIn 252
//参数名称:锅底NTC短路恢复温度AD值
#define C_AD_Pan_CloseOut 248
/**************************************************************************
-------------------------------- IGBT-NTC ---------------------------------
**************************************************************************/
//硬件结构:100K热敏电阻 + 20K固定电阻
//软件结构:8bit-AD
//-------------------------------------------------------------------------
//参数名称:IGBT开风扇判断温度AD值
#define C_AD_Igbt_FanOn 91
//参数名称:IGBT关风扇判断温度AD值
#define C_AD_Igbt_FanOff 80
//-------------------------------------------------------------------------
//参数名称:IGBT超温判断温度AD值
#define C_AD_Igbt_OverIn 204
//参数名称:IGBT超温恢复温度AD值
#define C_AD_Igbt_OverOut 198
//-------------------------------------------------------------------------
//参数名称:IGBT高温判断温度AD值
#define C_AD_Igbt_HighIn 191
//参数名称:IGBT高温恢复温度AD值
#define C_AD_Igbt_HighOut 184
//-------------------------------------------------------------------------
//参数名称:IGBT-NTC开路判断温度AD值
#define C_AD_Igbt_OpenIn 3
//参数名称:IGBT-NTC开路恢复温度AD值
#define C_AD_Igbt_OpenOut 7
//-------------------------------------------------------------------------
//参数名称:IGBT-NTC短路判断温度AD值
#define C_AD_Igbt_CloseIn 252
//参数名称:IGBT-NTC短路恢复温度AD值
#define C_AD_Igbt_CloseOut 248
/**************************************************************************
-------------------------------- 系统时间 ---------------------------------
**************************************************************************/
//参数名称:中断时间(us)
#define C_TimeUS_Int 50
//参数名称:主循环时间(ms)
#define C_TimeMS_Main 5
/**************************************************************************
--------------------------------- EE地址 ----------------------------------
**************************************************************************/
//参数名称:电流斜率调节值EE寄存地址
//取值范围:0~127
#define C_EEAddr_CheckAA 100
#define C_EEAddr_DataP 101
#define C_EEAddr_DataI 102
#define C_EEAddr_Check55 103
/**************************************************************************
--------------------------------- 测试设置 --------------------------------
**************************************************************************/
//测试内容:检锅
//设置说明:有定义 = 检锅测试,无定义 = 正常检锅
//#define _TEST_PANCHECK_
//测试内容:PPG输出
//设置说明:有定义 = PPG测试输出,无定义 = PPG正常输出
//#define _TEST_PPGOUT_ 500
//-------------------------------------------------------------------------
//测试内容:比较器结果
//设置说明:有定义 = IO输出比较器结果,无定义 = IO正常输出
// 测试输出口只能选择RA0或RB7,由config中的“CMPOUT_SEL”决定
//#define _TEST_CMPOUT_ 0xA0 //比较器测试输出口(RA0)
//#define _TEST_CMPOUT_ 0xB7 //比较器测试输出口(RB7)
//参数名称:被测试比较器通道
//取值范围:0~7
#define C_CMOUTEN_Num 0
//-------------------------------------------------------------------------
//测试内容:PGA放大结果
//设置说明:有定义 = IO输出PGA放大结果,无定义 = IO正常输出
// 测试输出口只能选择RC0
//#define _TEST_PGAOUT_
/**************************************************************************
**************************************************************************/
#endif

View File

@@ -0,0 +1,221 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* IO¿ÚÉÏÀ­ÉèÖÃ
**************************************************************************/
#if !_MODE_COMM_NO_
unsigned char SetWPUX_CommHave(unsigned char x)
{
volatile unsigned char i = 0;
//---------------------------------------------------------------------
#ifdef _pIGBT_OVUV
if(x == (_pIGBT_OVUV >> 4))
{
i |= 1 << (unsigned)(0xF & _pIGBT_OVUV);
}
#endif
#ifdef _pCOMM_IN
if(x == (_pCOMM_IN >> 4))
{
i |= 1 << (unsigned)(0xF & _pCOMM_IN);
}
#endif
//---------------------------------------------------------------------
return i;
}
#endif
/*************************************************************************/
#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_
unsigned char SetWPUX_CommNo(unsigned char x)
{
volatile unsigned char i = 0;
//---------------------------------------------------------------------
#ifdef _pIGBT_OVUV
if(x == (_pIGBT_OVUV >> 4))
{
i |= 1 << (unsigned)(0xF & _pIGBT_OVUV);
}
#endif
//---------------------------------------------------------------------
return i;
}
#endif
/**************************************************************************
* IO¿Ú·½ÏòÉèÖÃ
**************************************************************************/
#if !_MODE_COMM_NO_
unsigned char SetTRISX_CommHave(unsigned char x)
{
volatile unsigned char i = 0;
//---------------------------------------------------------------------
#ifdef _pBUZZ
if(x == (_pBUZZ >> 4))
{
i |= 1 << (unsigned)(0xF & _pBUZZ);
}
#endif
#ifdef _pFAN
if(x == (_pFAN >> 4))
{
i |= 1 << (unsigned)(0xF & _pFAN);
}
#endif
#ifdef _pIGBT_SUP
if(x == (_pIGBT_SUP >> 4))
{
i |= 1 << (unsigned)(0xF & _pIGBT_SUP);
}
#endif
#ifdef _pCOMM_OUT
if(x == (_pCOMM_OUT >> 4))
{
i |= 1 << (unsigned)(0xF & _pCOMM_OUT);
}
#endif
//---------------------------------------------------------------------
#ifdef _TEST_CMPOUT_
#if _TEST_CMPOUT_ == _Pin_CMPOUT1
if(x == (_Pin_CMPOUT1 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1);
}
#elif _TEST_CMPOUT_ == _Pin_CMPOUT2
if(x == (_Pin_CMPOUT2 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2);
}
#endif
#elif _MODE_IHDEBUG_
if(B_Test_CM_RA0)
{
if(x == (_Pin_CMPOUT1 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1);
}
}
else if(B_Test_CM_RB7)
{
if(x == (_Pin_CMPOUT2 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2);
}
}
#endif
#ifdef _TEST_PGAOUT_
if(x == (_Pin_PGAOUT >> 4))
{
i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT));
}
#elif _MODE_IHDEBUG_
if(B_Test_PGA)
{
if(x == (_Pin_PGAOUT >> 4))
{
i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT));
}
}
#endif
//---------------------------------------------------------------------
return (unsigned)~i;
}
#endif
/*************************************************************************/
#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_
unsigned char SetTRISX_CommNo(unsigned char x)
{
volatile unsigned char i = 0;
//---------------------------------------------------------------------
#ifdef _pBUZZ
if(x == (_pBUZZ >> 4))
{
i |= 1 << (unsigned)(0xF & _pBUZZ);
}
#endif
#ifdef _pFAN
if(x == (_pFAN >> 4))
{
i |= 1 << (unsigned)(0xF & _pFAN);
}
#endif
#ifdef _pIGBT_SUP
if(x == (_pIGBT_SUP >> 4))
{
i |= 1 << (unsigned)(0xF & _pIGBT_SUP);
}
#endif
#ifdef _pSDA
if(x == (_pSDA >> 4))
{
i |= 1 << (unsigned)(0xF & _pSDA);
}
#endif
#ifdef _pSCK
if(x == (_pSCK >> 4))
{
i |= 1 << (unsigned)(0xF & _pSCK);
}
#endif
#ifdef _pSTB
if(x == (_pSTB >> 4))
{
i |= 1 << (unsigned)(0xF & _pSTB);
}
#endif
//---------------------------------------------------------------------
#ifdef _TEST_CMPOUT_
#if _TEST_CMPOUT_ == _Pin_CMPOUT1
if(x == (_Pin_CMPOUT1 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1);
}
#elif _TEST_CMPOUT_ == _Pin_CMPOUT2
if(x == (_Pin_CMPOUT2 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2);
}
#endif
#elif _MODE_IHDEBUG_
if(B_Test_CM_RA0)
{
if(x == (_Pin_CMPOUT1 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1);
}
}
else if(B_Test_CM_RB7)
{
if(x == (_Pin_CMPOUT2 >> 4))
{
i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2);
}
}
#endif
#ifdef _TEST_PGAOUT_
if(x == (_Pin_PGAOUT >> 4))
{
i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT));
}
#elif _MODE_IHDEBUG_
if(B_Test_PGA)
{
if(x == (_Pin_PGAOUT >> 4))
{
i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT));
}
}
#endif
//---------------------------------------------------------------------
return (unsigned)~i;
}
#endif

View File

@@ -0,0 +1,514 @@
/**************************************************************************
**************************************************************************/
#ifndef _SETUP_IO_H_
#define _SETUP_IO_H_
/**************************************************************************
-------------------------------- IO口配置 ---------------------------------
**************************************************************************/
//配置内容:IO脚位排序
//配置说明:有定义 = 该型号对应IO脚位排序
#define _IO_CMS79F5335 //CMS79F5335脚位
//#define _IO_CMS79F5365 //CMS79F5365脚位
//=========================================================================
//配置内容:功能对应IO脚位
//配置说明:无相应功能,可直接屏蔽或者删除
//-------------------------------------------------------------------------
#define _pBUZZ _Pin7 //蜂鸣器控制口
#define _pFAN _Pin7 //风扇控制口
//#define _pAD_TOP _Pin //顶部测温ADC口
#define _pAD_PAN _Pin8 //锅底测温ADC口
#define _pAD_IGBT _Pin12 //IGBT测温ADC口
#define _pAD_VOL _Pin11 //电压ADC口
#define _pCON1 _Pin15 //CON1口
#define _pCON2 _Pin14 //CON2口
#define _pCON3 _Pin13 //CON3口
//-------------------------------------------------------------------------
#define _pCOMM_IN _pCON2 //通信输入口(有通信)
#define _pCOMM_OUT _pCON3 //通信输出口(有通信)
#define _pSDA _pCON1 //驱动SDA口(无通信)
#define _pSCK _pCON2 //驱动SCK口(无通信)
#define _pSTB _pCON3 //驱动STB口(无通信)
//=========================================================================
//配置内容:上电初始化IO电平
//配置说明:0 = 低电平,1 = 高电平
#define C_Init_PORTA 0B00000000
#define C_Init_PORTB 0B00000000
#define C_Init_PORTC 0B00000000
/**************************************************************************
-------------------------------- AD通道配置 -------------------------------
**************************************************************************/
//配置内容:工作电流ADC通道
//配置说明:通道27 = 有RC滤波、通道28 = 无RC滤波
#define C_AdcChannel_Curr 28
/**************************************************************************
* 芯片测试脚位
**************************************************************************/
#define _Pin_CMPOUT1 0xA0 //比较器测试输出口1
#define _Pin_CMPOUT2 0xB7 //比较器测试输出口2
#define _Pin_PGAOUT 0xC0 //PGA测试输出口
/**************************************************************************
* 芯片专用脚位
**************************************************************************/
#define _pIGBT_SUP 0xB1 //IGBT辅助驱动口
#define _pIGBT_OVUV 0xB2 //IGBT驱动过欠压检测口
/**************************************************************************
* CMS79F5335脚位(16pin)
**************************************************************************/
#ifdef _IO_CMS79F5335
//#define _Pin1 VCC //Pin1
//#define _Pin2 VIN //Pin2
//#define _Pin3 GND //Pin3
//#define _Pin4 VDD //Pin4
#define _Pin5 0xA7 //Pin5
#define _Pin6 0xA5 //Pin6
#define _Pin7 0xC0 //Pin7
#define _Pin8 0xA4 //Pin8
#define _Pin9 0xA3 //Pin9
#define _Pin10 0xA2 //Pin10
#define _Pin11 0xA1 //Pin11
#define _Pin12 0xB7 //Pin12
#define _Pin13 0xB6 //Pin13
#define _Pin14 0xB4 //Pin14
#define _Pin15 0xB3 //Pin15
//#define _Pin16 PPG //Pin16
#endif
/**************************************************************************
* CMS79F5365脚位(20pin)
**************************************************************************/
#ifdef _IO_CMS79F5365
//#define _Pin1 VCC //Pin1
//#define _Pin2 VIN //Pin2
//#define _Pin3 GND //Pin3
//#define _Pin4 VDD //Pin4
#define _Pin5 0xC2 //Pin5
#define _Pin6 0xC1 //Pin6
#define _Pin7 0xA7 //Pin7
#define _Pin8 0xA5 //Pin8
#define _Pin9 0xC0 //Pin9
#define _Pin10 0xA4 //Pin10
#define _Pin11 0xA3 //Pin11
#define _Pin12 0xA2 //Pin12
#define _Pin13 0xA1 //Pin13
#define _Pin14 0xA0 //Pin14
#define _Pin15 0xB7 //Pin15
#define _Pin16 0xB6 //Pin16
#define _Pin17 0xB5 //Pin17
#define _Pin18 0xB4 //Pin18
#define _Pin19 0xB3 //Pin19
//#define _Pin20 PPG //Pin20
#endif
/**************************************************************************
* IO口定义
**************************************************************************/
#ifndef _pIGBT_SUP
ExteralPin(PORTC,7,Pin_Igbt_Sup);
#elif (_pIGBT_SUP>>4)==0xA
ExteralPin(PORTA,(_pIGBT_SUP&0xF),Pin_Igbt_Sup);
#elif (_pIGBT_SUP>>4)==0xB
ExteralPin(PORTB,(_pIGBT_SUP&0xF),Pin_Igbt_Sup);
#elif (_pIGBT_SUP>>4)==0xC
ExteralPin(PORTC,(_pIGBT_SUP&0xF),Pin_Igbt_Sup);
#else
ExteralPin(PORTC,7,Pin_Igbt_Sup);
#endif
//-------------------------------------------------------------------------
#ifndef _pIGBT_OVUV
ExteralPin(PORTC,7,Pin_Igbt_OVUV);
#elif (_pIGBT_OVUV>>4)==0xA
ExteralPin(PORTA,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV);
#elif (_pIGBT_OVUV>>4)==0xB
ExteralPin(PORTB,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV);
#elif (_pIGBT_OVUV>>4)==0xC
ExteralPin(PORTC,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV);
#else
ExteralPin(PORTC,7,Pin_Igbt_OVUV);
#endif
//-------------------------------------------------------------------------
#ifndef _pBUZZ
ExteralPin(PORTC,7,Pin_Buzz);
#elif (_pBUZZ>>4)==0xA
ExteralPin(PORTA,(_pBUZZ&0xF),Pin_Buzz);
#elif (_pBUZZ>>4)==0xB
ExteralPin(PORTB,(_pBUZZ&0xF),Pin_Buzz);
#elif (_pBUZZ>>4)==0xC
ExteralPin(PORTC,(_pBUZZ&0xF),Pin_Buzz);
#else
ExteralPin(PORTC,7,Pin_Buzz);
#endif
//-------------------------------------------------------------------------
#ifndef _pFAN
ExteralPin(PORTC,7,Pin_Fan);
#elif (_pFAN>>4)==0xA
ExteralPin(PORTA,(_pFAN&0xF),Pin_Fan);
#elif (_pFAN>>4)==0xB
ExteralPin(PORTB,(_pFAN&0xF),Pin_Fan);
#elif (_pFAN>>4)==0xC
ExteralPin(PORTC,(_pFAN&0xF),Pin_Fan);
#else
ExteralPin(PORTC,7,Pin_Fan);
#endif
//-------------------------------------------------------------------------
#ifndef _pCOMM_IN
ExteralPin(PORTC,7,Pin_CommIn);
#elif (_pCOMM_IN>>4)==0xA
ExteralPin(PORTA,(_pCOMM_IN&0xF),Pin_CommIn);
#elif (_pCOMM_IN>>4)==0xB
ExteralPin(PORTB,(_pCOMM_IN&0xF),Pin_CommIn);
#elif (_pCOMM_IN>>4)==0xC
ExteralPin(PORTC,(_pCOMM_IN&0xF),Pin_CommIn);
#else
ExteralPin(PORTC,7,Pin_CommIn);
#endif
//-------------------------------------------------------------------------
#ifndef _pCOMM_OUT
ExteralPin(PORTC,7,Pin_CommOut);
#elif (_pCOMM_OUT>>4)==0xA
ExteralPin(PORTA,(_pCOMM_OUT&0xF),Pin_CommOut);
#elif (_pCOMM_OUT>>4)==0xB
ExteralPin(PORTB,(_pCOMM_OUT&0xF),Pin_CommOut);
#elif (_pCOMM_OUT>>4)==0xC
ExteralPin(PORTC,(_pCOMM_OUT&0xF),Pin_CommOut);
#else
ExteralPin(PORTC,7,Pin_CommOut);
#endif
//-------------------------------------------------------------------------
#ifndef _pSDA
ExteralPin(PORTC,7,Pin_SDA);
ExteralPin(TRISC,7,Io_SDA);
#elif (_pSDA>>4)==0xA
ExteralPin(PORTA,(_pSDA&0xF),Pin_SDA);
ExteralPin(TRISA,(_pSDA&0xF),Io_SDA);
#elif (_pSDA>>4)==0xB
ExteralPin(PORTB,(_pSDA&0xF),Pin_SDA);
ExteralPin(TRISB,(_pSDA&0xF),Io_SDA);
#elif (_pSDA>>4)==0xC
ExteralPin(PORTC,(_pSDA&0xF),Pin_SDA);
ExteralPin(TRISC,(_pSDA&0xF),Io_SDA);
#else
ExteralPin(PORTC,7,Pin_SDA);
ExteralPin(TRISC,7,Io_SDA);
#endif
//-------------------------------------------------------------------------
#ifndef _pSCK
ExteralPin(PORTC,7,Pin_SCK);
#elif (_pSCK>>4)==0xA
ExteralPin(PORTA,(_pSCK&0xF),Pin_SCK);
#elif (_pSCK>>4)==0xB
ExteralPin(PORTB,(_pSCK&0xF),Pin_SCK);
#elif (_pSCK>>4)==0xC
ExteralPin(PORTC,(_pSCK&0xF),Pin_SCK);
#else
ExteralPin(PORTC,7,Pin_SCK);
#endif
//-------------------------------------------------------------------------
#ifndef _pSTB
ExteralPin(PORTC,7,Pin_STB);
#elif (_pSTB>>4)==0xA
ExteralPin(PORTA,(_pSTB&0xF),Pin_STB);
#elif (_pSTB>>4)==0xB
ExteralPin(PORTB,(_pSTB&0xF),Pin_STB);
#elif (_pSTB>>4)==0xC
ExteralPin(PORTC,(_pSTB&0xF),Pin_STB);
#else
ExteralPin(PORTC,7,Pin_STB);
#endif
/**************************************************************************
* PWM通道定义
**************************************************************************/
#if _pBUZZ==0xA0
#define C_PwmChannel_Buzz 0x0A
#elif _pBUZZ==0xB5
#define C_PwmChannel_Buzz 0x0B
#elif _pBUZZ==0xB2
#define C_PwmChannel_Buzz 0x0C
#elif _pBUZZ==0xC2
#define C_PwmChannel_Buzz 0x0D
#elif _pBUZZ==0xB7
#define C_PwmChannel_Buzz 0x1A
#elif _pBUZZ==0xB4
#define C_PwmChannel_Buzz 0x1B
#elif _pBUZZ==0xB1
#define C_PwmChannel_Buzz 0x1C
#elif _pBUZZ==0xC1
#define C_PwmChannel_Buzz 0x1D
#elif _pBUZZ==0xB6
#define C_PwmChannel_Buzz 0x2A
#elif _pBUZZ==0xB3
#define C_PwmChannel_Buzz 0x2B
#elif _pBUZZ==0xB0
#define C_PwmChannel_Buzz 0x2C
#elif _pBUZZ==0xC0
#define C_PwmChannel_Buzz 0x2D
#else
#define C_PwmChannel_Buzz 0xFF
#endif
//-------------------------------------------------------------------------
#if !_FAN_OUT_PWM_
#define C_PwmChannel_Fan 0xFF
#elif _pFAN==0xA0
#define C_PwmChannel_Fan 0x0A
#elif _pFAN==0xB5
#define C_PwmChannel_Fan 0x0B
#elif _pFAN==0xB2
#define C_PwmChannel_Fan 0x0C
#elif _pFAN==0xC2
#define C_PwmChannel_Fan 0x0D
#elif _pFAN==0xB7
#define C_PwmChannel_Fan 0x1A
#elif _pFAN==0xB4
#define C_PwmChannel_Fan 0x1B
#elif _pFAN==0xB1
#define C_PwmChannel_Fan 0x1C
#elif _pFAN==0xC1
#define C_PwmChannel_Fan 0x1D
#elif _pFAN==0xB6
#define C_PwmChannel_Fan 0x2A
#elif _pFAN==0xB3
#define C_PwmChannel_Fan 0x2B
#elif _pFAN==0xB0
#define C_PwmChannel_Fan 0x2C
#elif _pFAN==0xC0
#define C_PwmChannel_Fan 0x2D
#else
#define C_PwmChannel_Fan 0xFF
#endif
/**************************************************************************
* 非固定ADC通道定义
**************************************************************************/
#if _pAD_VOL==0xA0
#define C_AdcChannel_Vol 0
#elif _pAD_VOL==0xA1
#define C_AdcChannel_Vol 1
#elif _pAD_VOL==0xA2
#define C_AdcChannel_Vol 2
#elif _pAD_VOL==0xA3
#define C_AdcChannel_Vol 3
#elif _pAD_VOL==0xA4
#define C_AdcChannel_Vol 4
#elif _pAD_VOL==0xA5
#define C_AdcChannel_Vol 5
#elif _pAD_VOL==0xA6
#define C_AdcChannel_Vol 6
#elif _pAD_VOL==0xA7
#define C_AdcChannel_Vol 7
#elif _pAD_VOL==0xB0
#define C_AdcChannel_Vol 8
#elif _pAD_VOL==0xB1
#define C_AdcChannel_Vol 9
#elif _pAD_VOL==0xB2
#define C_AdcChannel_Vol 10
#elif _pAD_VOL==0xB3
#define C_AdcChannel_Vol 11
#elif _pAD_VOL==0xB4
#define C_AdcChannel_Vol 12
#elif _pAD_VOL==0xB5
#define C_AdcChannel_Vol 13
#elif _pAD_VOL==0xB6
#define C_AdcChannel_Vol 14
#elif _pAD_VOL==0xB7
#define C_AdcChannel_Vol 15
#elif _pAD_VOL==0xC0
#define C_AdcChannel_Vol 16
#elif _pAD_VOL==0xC1
#define C_AdcChannel_Vol 17
#elif _pAD_VOL==0xC2
#define C_AdcChannel_Vol 18
#else
#define C_AdcChannel_Vol C_AdcChannel_VRef
#endif
//-------------------------------------------------------------------------
#ifndef _pAD_IGBT
#define C_AdcChannel_Igbt C_AdcChannel_VRef
#elif _pAD_IGBT==0xA0
#define C_AdcChannel_Igbt 0
#elif _pAD_IGBT==0xA1
#define C_AdcChannel_Igbt 1
#elif _pAD_IGBT==0xA2
#define C_AdcChannel_Igbt 2
#elif _pAD_IGBT==0xA3
#define C_AdcChannel_Igbt 3
#elif _pAD_IGBT==0xA4
#define C_AdcChannel_Igbt 4
#elif _pAD_IGBT==0xA5
#define C_AdcChannel_Igbt 5
#elif _pAD_IGBT==0xA6
#define C_AdcChannel_Igbt 6
#elif _pAD_IGBT==0xA7
#define C_AdcChannel_Igbt 7
#elif _pAD_IGBT==0xB0
#define C_AdcChannel_Igbt 8
#elif _pAD_IGBT==0xB1
#define C_AdcChannel_Igbt 9
#elif _pAD_IGBT==0xB2
#define C_AdcChannel_Igbt 10
#elif _pAD_IGBT==0xB3
#define C_AdcChannel_Igbt 11
#elif _pAD_IGBT==0xB4
#define C_AdcChannel_Igbt 12
#elif _pAD_IGBT==0xB5
#define C_AdcChannel_Igbt 13
#elif _pAD_IGBT==0xB6
#define C_AdcChannel_Igbt 14
#elif _pAD_IGBT==0xB7
#define C_AdcChannel_Igbt 15
#elif _pAD_IGBT==0xC0
#define C_AdcChannel_Igbt 16
#elif _pAD_IGBT==0xC1
#define C_AdcChannel_Igbt 17
#elif _pAD_IGBT==0xC2
#define C_AdcChannel_Igbt 18
#else
#define C_AdcChannel_Igbt C_AdcChannel_VRef
#endif
//-------------------------------------------------------------------------
#ifndef _pAD_PAN
#define C_AdcChannel_Pan C_AdcChannel_VRef
#elif _pAD_PAN==0xA0
#define C_AdcChannel_Pan 0
#elif _pAD_PAN==0xA1
#define C_AdcChannel_Pan 1
#elif _pAD_PAN==0xA2
#define C_AdcChannel_Pan 2
#elif _pAD_PAN==0xA3
#define C_AdcChannel_Pan 3
#elif _pAD_PAN==0xA4
#define C_AdcChannel_Pan 4
#elif _pAD_PAN==0xA5
#define C_AdcChannel_Pan 5
#elif _pAD_PAN==0xA6
#define C_AdcChannel_Pan 6
#elif _pAD_PAN==0xA7
#define C_AdcChannel_Pan 7
#elif _pAD_PAN==0xB0
#define C_AdcChannel_Pan 8
#elif _pAD_PAN==0xB1
#define C_AdcChannel_Pan 9
#elif _pAD_PAN==0xB2
#define C_AdcChannel_Pan 10
#elif _pAD_PAN==0xB3
#define C_AdcChannel_Pan 11
#elif _pAD_PAN==0xB4
#define C_AdcChannel_Pan 12
#elif _pAD_PAN==0xB5
#define C_AdcChannel_Pan 13
#elif _pAD_PAN==0xB6
#define C_AdcChannel_Pan 14
#elif _pAD_PAN==0xB7
#define C_AdcChannel_Pan 15
#elif _pAD_PAN==0xC0
#define C_AdcChannel_Pan 16
#elif _pAD_PAN==0xC1
#define C_AdcChannel_Pan 17
#elif _pAD_PAN==0xC2
#define C_AdcChannel_Pan 18
#else
#define C_AdcChannel_Pan C_AdcChannel_VRef
#endif
//-------------------------------------------------------------------------
#ifndef _pAD_TOP
#define C_AdcChannel_Top C_AdcChannel_VRef
#elif _pAD_TOP==0xA0
#define C_AdcChannel_Top 0
#elif _pAD_TOP==0xA1
#define C_AdcChannel_Top 1
#elif _pAD_TOP==0xA2
#define C_AdcChannel_Top 2
#elif _pAD_TOP==0xA3
#define C_AdcChannel_Top 3
#elif _pAD_TOP==0xA4
#define C_AdcChannel_Top 4
#elif _pAD_TOP==0xA5
#define C_AdcChannel_Top 5
#elif _pAD_TOP==0xA6
#define C_AdcChannel_Top 6
#elif _pAD_TOP==0xA7
#define C_AdcChannel_Top 7
#elif _pAD_TOP==0xB0
#define C_AdcChannel_Top 8
#elif _pAD_TOP==0xB1
#define C_AdcChannel_Top 9
#elif _pAD_TOP==0xB2
#define C_AdcChannel_Top 10
#elif _pAD_TOP==0xB3
#define C_AdcChannel_Top 11
#elif _pAD_TOP==0xB4
#define C_AdcChannel_Top 12
#elif _pAD_TOP==0xB5
#define C_AdcChannel_Top 13
#elif _pAD_TOP==0xB6
#define C_AdcChannel_Top 14
#elif _pAD_TOP==0xB7
#define C_AdcChannel_Top 15
#elif _pAD_TOP==0xC0
#define C_AdcChannel_Top 16
#elif _pAD_TOP==0xC1
#define C_AdcChannel_Top 17
#elif _pAD_TOP==0xC2
#define C_AdcChannel_Top 18
#else
#define C_AdcChannel_Top C_AdcChannel_VRef
#endif
/**************************************************************************
* 固定ADC通道定义
**************************************************************************/
#define C_AdcChannel_Gnd 29 //GND-ADC通道
#define C_AdcChannel_Vdd 30 //VDD-ADC通道
#define C_AdcChannel_VRef 31 //内部参考电压(1.2V)ADC通道
/**************************************************************************
* AD检测设置(00xxxx01)
**************************************************************************/
#define C_AdcSet_Gnd 0x01 | (C_AdcChannel_Gnd<<2) //GND
#define C_AdcSet_Vdd 0x01 | (C_AdcChannel_Vdd<<2) //VDD
#define C_AdcSet_VRef 0x01 | (C_AdcChannel_VRef<<2) //内部参考电压
#define C_AdcSet_Curr 0x01 | (C_AdcChannel_Curr<<2) //工作电流
#define C_AdcSet_Vol 0x01 | (C_AdcChannel_Vol<<2) //市电电压
#define C_AdcSet_Igbt 0x01 | (C_AdcChannel_Igbt<<2) //IGBT-NTC
#define C_AdcSet_Pan 0x01 | (C_AdcChannel_Pan<<2) //锅底NTC
#define C_AdcSet_Top 0x01 | (C_AdcChannel_Top<<2) //顶部NTC
/**************************************************************************
--------------------------------- 函数声明 --------------------------------
**************************************************************************/
unsigned char SetWPUX_CommHave(unsigned char x);
unsigned char SetWPUX_CommNo(unsigned char x);
unsigned char SetTRISX_CommHave(unsigned char x);
unsigned char SetTRISX_CommNo(unsigned char x);
/**************************************************************************
**************************************************************************/
#endif

View File

@@ -0,0 +1,118 @@
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
* 函数名称:Delay_Xus
* 函数功能:延时处理
* 入口参数:x=延时时间
* 出口参数:无
* 备 注:死循环处理,注意调用
**************************************************************************/
void Delay_Xus(unsigned char x)
{
GIE = 0; //关闭中断
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
while(--x)
{
NOP();
NOP();
NOP();
}
GIE = 1; //恢复中断
}
/**************************************************************************
* 函数名称:Delay_Xms
* 函数功能:延时处理
* 入口参数:x=延时时间
* 出口参数:无
* 备 注:死循环处理,注意调用
**************************************************************************/
void Delay_Xms(unsigned int x)
{
volatile unsigned int i = 728;
GIE = 0; //关闭中断
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
while(--x)
{
while(--i);
i = 728;
CLRWDT(); //清看门狗
}
GIE = 1; //恢复中断
}
/***********************************************************************
* 函数名称:Memory_Write
* 函数功能:写入EE数据
* 入口参数:addr=写入地址,value=写入数据
* 出口参数:EE写操作完成状态
* 备 注:无
***********************************************************************/
unsigned char Memory_Write(unsigned char addr, unsigned char value)
{
EEADR = addr; //写入地址
EEDAT = value; //写入数据
CLRWDT(); //清看门狗
EECON1 = 0x10; //EE烧写时间 = 2.5ms
EEPGD = 0; //访问数据存储器
WREN = 1; //允许写周期
GIE = 0; //关闭中断
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
GIE = 0; //确保中断已关闭
EECON2 = 0x55; //给EECON2写入0x55
EECON2 = 0xAA; //给EECON2写入0xAA
WR = 1; //启动写周期
NOP();
NOP();
NOP();
NOP();
CLRWDT(); //清看门狗
WREN = 0; //写结束,关闭写入操作
GIE = 1; //恢复中断
if(WRERR)
{
return 0xFF; //EE写操作出错
}
else
{
return 0; //EE写操作OK
}
}
/***********************************************************************
* 函数名称:Memory_Read
* 函数功能:读取EE数据
* 入口参数:addr=读取地址
* 出口参数:读取数据
* 备 注:无
***********************************************************************/
unsigned char Memory_Read(unsigned char addr)
{
EEADR = addr; //读取地址
EEPGD = 0; //访问数据存储器
RD = 1; //使能读信号
NOP(); //这里读取数据,必须加NOP指令
NOP();
NOP();
NOP();
NOP();
return EEDAT; //读取数据
}

View File

@@ -0,0 +1,185 @@
/**************************************************************************
**************************************************************************/
#ifndef _CMS_IHPLUS_H_
#define _CMS_IHPLUS_H_
#pragma warning disable 752,759
/**************************************************************************
---------------------------------- 头文件 ---------------------------------
**************************************************************************/
#include "Define_Global.h"
/**************************************************************************
--------------------------------- 函数声明 --------------------------------
**************************************************************************/
extern void __CMS_Plus_Interrupt();
extern void __CMS_Plus_PPG();
/**************************************************************************
------------------------------- 连续低功率 --------------------------------
**************************************************************************/
//参数名称:PPG导通延时值(连续低功率)
//取值范围:0~15
//对应关系:0=不延时,1=4~5*125ns,2=8~9*125ns,……15=64~65*125ns
#define C_PPGDly_LxLow 0
//-------------------------------------------------------------------------
//参数名称:连续低功率开启功率下限阀值(实际:800W)
//参数说明:>=此阀值,才开启连续低功率功能
#define C_MinPower_LxLow 800/C_Mult_Power
/*************************************************************************/
const unsigned char ValueTime_PPGDly_LxLow = C_PPGDly_LxLow;
const unsigned char ValueMin_Power_LxLow = C_MinPower_LxLow;
/*************************************************************************/
extern volatile unsigned char Status_LxLow; //连续低功率状态
//-------------------------------------------------------------------------
extern volatile unsigned char Num_LxLowOn; //连续低功率开个数
extern volatile unsigned char Num_LxLowOff; //连续低功率关个数
/**************************************************************************
--------------------------------- PPG抖频 ---------------------------------
**************************************************************************/
//计算公式:电流斜率 = 256 * 256 * 实际电流 / 检测的电流AD
//参数说明:电流斜率越大,功率越小
//参数名称:铁锅电流斜率(PPG抖频)
#define C_SlopeIron_Curr_PPGDP 5400
//参数名称:钢锅电流斜率(PPG抖频)
#define C_SlopeSteel_Curr_PPGDP 5400
//-------------------------------------------------------------------------
//参数名称:PPG抖频开启PPGTMR下限阀值(实际:14us)
//参数说明:>=此阀值,才开启PPG抖频功能
#define C_MinPPGTMR_PPGDP 32*14
//参数名称:PPG抖频开启功率下限阀值(实际:1690W)
//参数说明:>=此阀值,才开启PPG抖频功能
#define C_MinPower_PPGDP 1690/C_Mult_Power
//-------------------------------------------------------------------------
//参数名称:PPG抖频控制值
//参数说明:与市电频率、中断时间(ValueTime_Int)有关联
#define C_Data1_PPGDP 55 //抖频前补偿PPG值
#define C_Data2_PPGDP 4 //PPG递减步进
#define C_Data3_PPGDP 4 //PPG递加步进
#define C_Time1_PPGDP 40 //抖频开始等待时间
#define C_Time2_PPGDP 60 //PPG递减总时间
#define C_Time3_PPGDP 60 //PPG递加总时间
#define C_Time4_PPGDP 10 //PPG变化暂停时间
/*************************************************************************/
const unsigned int ValueSlopeIron_Curr_PPGDP = C_SlopeIron_Curr_PPGDP;
const unsigned int ValueSlopeSteel_Curr_PPGDP = C_SlopeSteel_Curr_PPGDP;
const unsigned int ValueMin_PPGTMR_PPGDP = C_MinPPGTMR_PPGDP;
const unsigned char ValueMin_Power_PPGDP = C_MinPower_PPGDP;
const unsigned char ValueData1_PPGDP = C_Data1_PPGDP;
const unsigned char ValueData2_PPGDP = C_Data2_PPGDP;
const unsigned char ValueData3_PPGDP = C_Data3_PPGDP;
const unsigned char ValueTime1_PPGDP = C_Time1_PPGDP;
const unsigned char ValueTime2_PPGDP = C_Time2_PPGDP;
const unsigned char ValueTime3_PPGDP = C_Time3_PPGDP;
const unsigned char ValueTime4_PPGDP = C_Time4_PPGDP;
/*************************************************************************/
extern volatile unsigned char Status_PPGDP; //PPG抖频状态
//-------------------------------------------------------------------------
extern volatile bit B_PPGDP_Can; //PPG抖频强制打开
extern volatile bit B_PPGDP_Dis; //PPG抖频禁止
/**************************************************************************
--------------------------------- 其他部分 --------------------------------
**************************************************************************/
const unsigned char ValuePPGSub_BackPress = 0;
//-------------------------------------------------------------------------
const unsigned char ValueTime_Int = C_TimeUS_Int;
const unsigned char ValueTime_Main = C_TimeMS_Main;
//-------------------------------------------------------------------------
const unsigned int ValueSlopeIron_Curr = C_SlopeIron_Curr;
const unsigned int ValueSlopeSteel_Curr = C_SlopeSteel_Curr;
//-------------------------------------------------------------------------
const unsigned char ValueTime_SteelIron = C_Vaule_SteelIron;
//-------------------------------------------------------------------------
const unsigned char ValueVol_CoilVol = C_Vol_CoilVol;
const unsigned char ValueVol_ZeroTurn = C_Vol_ZeroTurn;
const unsigned char ValueVol_ZeroTurn_VH = C_Vol_ZeroTurn_VH;
const unsigned char ValueVol_ZeroTurn_VL = C_Vol_ZeroTurn_VL;
/*************************************************************************/
volatile unsigned char ValueOPA_Set = 0B00000000;
#ifdef _TEST_PGAOUT_
volatile unsigned char ValuePGA_Set = 0B10000010 | ((C_Times_PGA & 0x03) << 5);
#else
volatile unsigned char ValuePGA_Set = 0B10000000 | ((C_Times_PGA & 0x03) << 5);
#endif
#ifdef _TEST_CMPOUT_
volatile unsigned char ValueCM_Test = 0x08 | (C_CMOUTEN_Num & 0x07);
#else
volatile unsigned char ValueCM_Test = 0;
#endif
//-------------------------------------------------------------------------
volatile unsigned int ValuePPG_Single = C_PPGSingle;
volatile unsigned char ValueCnt_HaveNoPan = C_Vaule_HaveNoPan;
//-------------------------------------------------------------------------
volatile unsigned char ValueTime_PPGDly = C_PPGDly;
//-------------------------------------------------------------------------
volatile unsigned char ValueVol_VolSurge = C_Vol_VolSurge;
volatile unsigned char ValueVol_CurrSurge = C_Vol_CurrSurge;
volatile unsigned char ValueVol_OnStep = C_Vol_OnStep;
volatile unsigned char ValueVol_BackPress1 = C_Vol_BackPress1;
volatile unsigned char ValuePPG_BackPress1 = C_PPG_BackPress1;
volatile unsigned char ValueVol_BackPress2 = C_Vol_BackPress2;
/*************************************************************************/
volatile unsigned int Count_BackPress; //1级过压保护计数
volatile unsigned int BakCount_BackPress; //1级过压保护计数备份
volatile unsigned int Delay_CheckPan; //检锅延时时间
volatile unsigned int Time_Syn; //同步脉宽时间
volatile unsigned char Count_Syn; //同步次数
volatile unsigned int SlopeCurr_Set; //电流斜率设置值
volatile unsigned char PowerWork; //工作功率值
volatile unsigned int Buf_PPGTMR; //PPG导通缓存值
volatile unsigned int Value_PPGTMR; //PPG导通临时值
//-------------------------------------------------------------------------
volatile bit B_Zero_No; //无过零
volatile bit B_Zero_Have; //有过零
volatile bit B_Zero_Lose; //过零丢失
volatile bit B_Zero_60Hz; //过零频率=60Hz
volatile bit B_Zero_Time; //过零翻转(时间基准)
volatile bit B_Zero_Adc; //过零翻转(ADC)
volatile bit B_Vol_Low; //低压区间
volatile bit B_Vol_Mid; //中压区间
volatile bit B_Vol_High; //高压区间
volatile bit B_Adc_Auto; //ADC自动开始
volatile bit B_Adc_Curr; //检测工作电流AD
volatile bit B_Adc_Vol; //检测市电电压AD
volatile bit B_Pan_Check; //检锅
volatile bit B_Pan_Single; //单次检锅脉冲输出
volatile bit B_Pan_LoseDly; //丢锅检测延时
volatile bit B_Pan_Error; //检锅故障(未接线盘)
volatile bit B_Pan_No; //无锅
volatile bit B_Pan_Have; //有锅
volatile bit B_Pan_Iron; //铁锅
volatile bit B_Pan_Steel; //钢锅
volatile bit B_PPGTMR_ReadLock; //读PPGTMR锁保护
volatile bit B_PPGTMR_WriteLock; //写PPGTMR锁保护
volatile bit B_Protect_BackPress; //过压保护
volatile bit B_Protect_Stop; //硬件保护停止
volatile bit B_ProtectCM_Restart; //保护比较器重启
volatile bit B_PPG_On; //PPG开启
volatile bit B_PPG_Out; //PPG输出
volatile bit B_Heat_En; //加热使能
/**************************************************************************
**************************************************************************/
#endif

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

View File

@@ -0,0 +1,55 @@
/**************************************************************************
**************************************************************************/
#ifndef _REL_IHDEBUG_
#define _REL_IHDEBUG_
#if _MODE_IHDEBUG_
/**************************************************************************
--------------------------------- 常量定义 --------------------------------
**************************************************************************/
#define C_IhDebug_Baudrate 9600 //波特率(最大支持波特率为9600)
//-------------------------------------------------------------------------
#define C_IhDebug_SendTypeID 0 //发送数据类型ID
#define C_IhDebug_SendCntSum 15 //一共需要发送结构体个数
#define C_IhDebug_SendCntOnce 2 //一次循环最多发送结构体个数
//*************************************************************************
const unsigned char REL_IhDebug_Baudrate = 1000000 / C_IhDebug_Baudrate - 1;
//-------------------------------------------------------------------------
const unsigned char REL_IhDebug_SendTypeID = C_IhDebug_SendTypeID;
const unsigned char REL_IhDebug_SendCntOnce = C_IhDebug_SendCntOnce;
#if (C_IhDebug_SendCntSum % C_IhDebug_SendCntOnce)
const unsigned char REL_IhDebug_PackIDX_Max = C_IhDebug_SendCntSum / C_IhDebug_SendCntOnce;
const unsigned char REL_IhDebug_PackSend_CntFinal = C_IhDebug_SendCntSum % C_IhDebug_SendCntOnce;
#else
const unsigned char REL_IhDebug_PackIDX_Max = (C_IhDebug_SendCntSum - 1) / C_IhDebug_SendCntOnce;
const unsigned char REL_IhDebug_PackSend_CntFinal = C_IhDebug_SendCntOnce;
#endif
/**************************************************************************
--------------------------------- 变量定义 --------------------------------
**************************************************************************/
volatile unsigned int PPGTMR_TestPPG;
volatile unsigned int SlopeCurr_Test;
//-------------------------------------------------------------------------
volatile bit B_Test_PGA;
volatile bit B_Test_CM_RA0;
volatile bit B_Test_CM_RB7;
volatile bit B_Test_PanCheck;
volatile bit B_Test_PPGOut;
volatile bit B_Test_SlopeCurr;
volatile bit B_ErrorCheck_Dis;
volatile bit B_LosePanCheck_Dis;
/**************************************************************************
--------------------------------- 函数声明 --------------------------------
**************************************************************************/
extern void REL_IhDebug_Main();
extern void REL_IhDebug_Int();
/**************************************************************************
**************************************************************************/
#endif
#endif

View File

@@ -0,0 +1,3 @@
/* 版本号:V1.0
/* 生成日期:2023.2.7

View File

@@ -0,0 +1,4 @@
/* 库名称:__CMS_IhPlus_CMS79F53x5
/* 版本号:V1.0.0
/* 生成日期:2023.2.7

Binary file not shown.