📄 igbt.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 + -