厂家提供的芯片资料

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

View File

@@ -0,0 +1,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(); //蜂鸣器输出
}