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

📄 igbt.c

📁 汽车测功机源肛码.单片机用的是LPC2104. 实现测速,对涡流机的控制,马达的控制.
💻 C
字号:
/******************************************************************************************
*                              IGBT功能模块
*                              作者:周川福
*模块说明:IGBT是底盘测功机控制涡流机加载的硬件功能,单片机通过PWM的输出来调整导通时间,从而  
*          达到能自由调节输出电压的能力,并且控制涡流机的加载。
*******************************************************************************************/
#define _IGBT

#include "src\config.h"
#include "src\LPC2294.h"

#define PCLK                    11059200                        // 外设时钟周期
#define IGBT_PERIOD             (PCLK / 100)                    // IGBT控制周期5毫秒
#define IGBT_WIDTH              (IGBT_PERIOD / 12000)           // IGBT最小脉宽,也就是IGBT的导通时间
//#define OUT_CONTROL             0x00001000                    // P0.12    为输出控制端口
#define OUT_CONTROL             0x00000080 

#define IGBT_MIN                200                             // IGBT输出最小值,用来防御输出死角!


static uint32 L_iWidth;
static uint32 L_iCount;

static BOOL L_bOutput;

/****************************************************************************************
**函数名称:    void IGBT_Init(void)
**输入:        None
**输出:        None
**说明:        IGBT功能模块初始化
*****************************************************************************************/
void IGBT_Init(void)
{
    L_iWidth  = 0;
    L_iCount  = 0;
    L_bOutput = FALSE;
}

/****************************************************************************************
**函数名称:    uint32 IGBT_GetCurrentWidth(void)
**输入:        None
**输出:        IGBT模块的PWM占宽比值
**说明:        得到当前IGBT输出占宽比的值。
*****************************************************************************************/
uint32 IGBT_GetCurrentWidth(void)
{
    return L_iWidth;
}

/****************************************************************************************
**函数名称:    uint32 IGBT_GetCurrentCount(void)
**输入:        None
**输出:        PWM输出数值。
**说明:        IGBT模块的PWM输出数值(Count),输出宽值(Width)=输出数值(Count) * IGBT_WIDTH
*****************************************************************************************/
uint32 IGBT_GetCurrentCount(void)
{
    return L_iCount;
}

/****************************************************************************************
**函数名称:    uint32 IGBT_GetPeriod(void)
**输入:        None
**输出:        IGBT控制周期
**说明:        得到IGBT控制周期
*****************************************************************************************/
uint32 IGBT_GetPeriod(void)
{
    return IGBT_PERIOD;
}


/*********************************************************************************************************
** 函数名称: IGBT_GetWidth()
** 功能描述: 得到IGBT的最小脉宽。
**           
** 输 入:   无
** 输 出 :  IGBT最小脉宽值
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint32 IGBT_GetWidth(void)
{
    return IGBT_WIDTH;
}


/*********************************************************************************************************
** 函数名称: IGBT_SetPeriodWidth()
** 功能描述: 设置IGBT的脉宽
**           
** 输 入:   IGBT的脉宽值
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-06
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_SetPeriodWidth(uint32 value)
{
        
    if( value > IGBT_PERIOD) {
        value = IGBT_PERIOD;
    }
    
    L_iWidth = value;

    if( L_bOutput ) {
        PWMMR2 = L_iWidth;
    }
}


/*********************************************************************************************************
** 函数名称: IGBT_SetPeriodCount()
** 功能描述: 设置IGBT的脉宽,该脉宽值等于count个IGBT_WIDTH
**           
** 输 入:   count  数量
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_SetPeriodCount(uint32 count)
{
    L_iCount = count;
    IGBT_SetPeriodWidth(count * IGBT_WIDTH);
}

/*********************************************************************************************************
** 函数名称: IGBT_MR0_Handler()
** 功能描述: IGBT高电平输出匹配定时器0中断处理函数
**           
** 输 入:   无
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_MR0_Handler(void)
{
    
    if( L_bOutput ) {
        IOSET = OUT_CONTROL;                    // 输出高电平
    } 
    else {
        IOCLR = OUT_CONTROL;                        // 输出低电平

    }

}


/*********************************************************************************************************
** 函数名称: IGBT_MR1_Handler()
** 功能描述: IGBT低电平输出匹配定时器1中断处理函数
**           
** 输 入:   无
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_MR1_Handler(void)
{
    IOCLR = OUT_CONTROL;                            // 输出低电平
}


/*********************************************************************************************************
** 函数名称: IGBT_Enable()
** 功能描述: IGBT输出使能
**           
** 输 入:   无
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_Enable(void)
{
    L_bOutput = TRUE;
}


/*********************************************************************************************************
** 函数名称: IGBT_Disable()
** 功能描述: IGBT关闭输出
**           
** 输 入:   无
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
** 
** 作 者: 周川福
** 日 期: 2006-04-01
**-------------------------------------------------------------------------------------------------------
** 修 改: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IGBT_Disable(void)
{
    PWMMR2 = 0;
    L_bOutput = FALSE;
}

⌨️ 快捷键说明

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