//**************************************************************
// HID PIC16F716
// 本程序主要针对小糸黄标及大众车HID镇流器编写,减小了启动电流,
//启动时的电流降为6A左右,拓展了电源电压保护范围,9V启动工作电压
//为8V-16V。
// 编写本程序的目的主要是为了因为改装某些车辆时启动电流过大引起
//电脑报警。
// 编写日期2015-1-1
// 编写人:宁静致远
//***************************************************************
#define _XTAL_FREQ 1000000.0
#include<pic.h>
#include"hid.h"
__CONFIG(UNPROTECT&BORV40&PWRTEN&WDTDIS&RC);
unsigned char Timer1_Int_Flag =0;
unsigned char AD_Convert_Preparation=0;
unsigned int Timer_Counter =0;
unsigned int Set_Power =POWER_50W_VALUE;
unsigned char EXTDR_Flip_Flop =0;
unsigned int CCPR1_Value;// =PWM_MAX_VALUE;
unsigned char I_AD,HIV_AD,V_AD,Power_Down_Step,I_AD_Average,HIV_AD_Average,V_AD_Average;
unsigned int I_AD_Array,HIV_AD_Array,V_AD_Array,Current_Power;
//*****************************************************
// Load_PWM(void)
// 装在PWM初值
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Load_PWM(void)
{
CCPR1L =CCPR1_Value>>2;
DC1B0=(CCPR1_Value&0x0001)!=0?1:0;
DC1B1=(CCPR1_Value&0x0002)!=0?1:0;
}
//*****************************************************
// void Init(void)
// 初始化端口、PWM、定时器1
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Init(void)
{
OPTION=0xff;
//初始化端口A
TRISA =0x1f;
ADCON1 =0x00;
//初始化端口B
PORTB =0x20;
TRISB =0x04;
//初始化PWM部分
CCP1CON=0x0c;
PR2 =255;
T2CON =0x04;
//定时器T1初始化
TMR1H =TMR_VALUE/0x100;
TMR1L =TMR_VALUE%0x100;
TMR1IF =0;
TMR1IE =0;
PEIE =1;
GIE =1;
T1CON =0x35;
}
//*****************************************************
// Shutdown(void)
// 故障关机
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Shutdown(void)
{
CCP1CON =0x00; //00001100
T2CON =0x00;
T1CON =0;
GIE =0;
EXTDR =0;
SIG_OUT =0;
SHUTDOWN =1;
for(;;)CLRWDT();
}
//*****************************************************
// Load_Config(void)
// 判断冷热启动,并装载参数,并判断工作电压正常否
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Load_Config(void)
{
unsigned char Ad_Value;
ADCON0 =0x01;//0000 0001
__delay_us(10);
GODONE = 1;
while(GODONE==1);
Ad_Value=ADRES;
// CCPR1_Value=(256-Ad_Value)*2+100;
CCPR1_Value=(256+100-Ad_Value);
Load_PWM();
Power_Down_Step=(0xff-Ad_Value)/POWER_DOWN_DIV;
Power_Down_Step=Power_Down_Step==0?1:Power_Down_Step;
ADCON0 =0x19;//0001 1001
__delay_us(10);
GODONE = 1;
while(GODONE==1);
Ad_Value=ADRES;
if((Ad_Value<POWER_LOW_VALUE)||(Ad_Value>HIGH_POWER_WORK_VALUE))
Shutdown();
}
//*****************************************************
// Int(void)
// 定时器1中断处理,完成交流驱动方波输出和计时用
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void interrupt Int(void)
{
if(TMR1IF==1)
{
TMR1H =TMR_VALUE/0x100;
TMR1L =TMR_VALUE%0x100;
TMR1IF =0;
Timer1_Int_Flag++;
Timer_Counter++;
AD_Convert_Preparation=Timer1_Int_Flag==1?1:AD_Convert_Preparation;
if(Timer1_Int_Flag>=2)
{
EXTDR_Flip_Flop=EXTDR_Flip_Flop==OFF?ON:OFF;
EXTDR=EXTDR_Flip_Flop==ON?HIGH_LEVEL:LOW_LEVEL;
Timer1_Int_Flag=0;
};
};
}
//*****************************************************
// AD_W(void)
// 采集AD并计算平均值和当前功率
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void AD_W(void)
{
ADCON0 =0x09;//0000 1001
__delay_us(10);
GODONE = 1;
while(GODONE==1);
I_AD=ADRES;
I_AD_Array-=I_AD_Array/AVERAGE_CELL;//电流平均值算法
I_AD_Array+=I_AD;
I_AD_Average=I_AD_Array/AVERAGE_CELL;
ADCON0 =0x11;//0001 0001
__delay_us(10);
GODONE = 1;
while(GODONE==1);
HIV_AD=ADRES;
HIV_AD_Array-=HIV_AD_Array/AVERAGE_CELL;//高压平均值算法
HIV_AD_Array+=HIV_AD;
HIV_AD_Average=HIV_AD_Array/AVERAGE_CELL;
ADCON0 =0x19;//0001 1001
__delay_us(10);
GODONE = 1;
while(GODONE==1);
V_AD=ADRES;
V_AD_Array-=V_AD_Array/AVERAGE_CELL;//输入电压平均值算法
V_AD_Array+=V_AD;
V_AD_Average=V_AD_Array/AVERAGE_CELL;
Current_Power=I_AD*HIV_AD;
}
//*****************************************************
// Fire(void)
// 点火启动程序
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Fire(void)
{
unsigned char i,j,Fire_OK;
CLRWDT();
SHUTDOWN =0;
BD =0;
EXTDR =1;
for(i=0;i<TRY_TIMES;i++)
{
CLRWDT();
__delay_ms(200);
CLRWDT();
Fire_OK=TRUE;
for(j=0;j<5;j++)
{
CLRWDT();
AD_W();
Fire_OK=I_AD<6?FALSE:Fire_OK;
};
if(Fire_OK==TRUE)break;
SHUTDOWN =1;
EXTDR =0;
BD =1;
__delay_ms(20);
SHUTDOWN =0;
EXTDR =1;
BD =0;
};
if(Fire_OK==FALSE) Shutdown();
AD_W();
I_AD_Array =I_AD*AVERAGE_CELL;
HIV_AD_Array=HIV_AD*AVERAGE_CELL;
V_AD_Array =V_AD*AVERAGE_CELL;
SIG_OUT =1;
TRISA0 =0;
HOT =1;
TMR1IE =1;
}
//*****************************************************
// Fault_Check()
// 故障检测程序
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//*****************************************************
void Fault_Check(void)
{
//电流低检测、输出短路检测、低电压输入检测、高电压输入检测
if((I_AD_Average<5)
||(HIV_AD_Average<40)
||(V_AD_Average<LOW_POWER_WORK_VALUE)
||(V_AD_Average>HIGH_POWER_WORK_VALUE))
{
Shutdown();
};
}
//****************************************************
// Power_Trace()
// 功率跟踪调节
// 输入参数:无
// 输出参数:无
// 编写日期2015-1-1
// 编写人:宁静致远
//****************************************************
void Power_Trace(void)
{
unsigned int ls_value;
if(Timer1_Int_Flag==1)
{
if(AD_Convert_Preparation==TRUE)
{
AD_Convert_Preparation==FALSE;
AD_W();
Fault_Check();
if(Current_Power>Set_Power)
{
ls_value=(Current_Power-Set_Power)/POWER_SWING;
ls_value=ls_value>ADJUST_STEP?ADJUST_STEP:ls_value;
CCPR1_Value=CCPR1_Value>ls_value?CCPR1_Value-ls_value:PWM_MIN_VALUE;
}
else
{
ls_value=(Set_Power-Current_Power)/POWER_SWING;
ls_value=ls_value>ADJUST_STEP?ADJUST_STEP:ls_value;
CCPR1_Value=CCPR1_Value<(PWM_MAX_VALUE-ls_value)?CCPR1_Value+ls_value:PWM_MAX_VALUE;
};
Load_PWM();
};
};
}
//*****************************************************
// Power_Control()
// 根据冷热启动参数,从启动到正常工作,以不同的速度控
// 制功率接近正常功率
// 输入参数:无
// 输出参数:无
//
xiaosi.zip_stabilizer_安定器_黄标小糸安定器程序4.5A
版权申诉
152 浏览量
2022-07-14
23:34:27
上传
评论
收藏 139KB ZIP 举报
钱亚锋
- 粉丝: 88
- 资源: 1万+
最新资源
- flowable-designer-5.22.0.zip
- threadmanager.cpp
- 腾讯云小程序 - 一站式开发与部署平台
- 基于JSP+Java+Servlet采用MVC模式开发的购物网站+源码(毕业设计&课程设计&项目开发)
- fastgestures安装包,模拟mac的触控板收拾,两指代表右击, 三指拖拽
- 基于组态王的升降式横移立体车库控制系统+源码(毕业设计&课程设计&项目开发)
- 基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
- 环境配置 vscode+jupyter
- 项目全部代码,还包含使用到的图片
- 项目全部代码,还包含使用到的图片
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0