电子烟开发【恒压、恒有效算法】

发布于:2024-06-01 ⋅ 阅读:(170) ⋅ 点赞:(0)

恒压算法

pwm是通过软件模拟的 pwm满值运行是250全占空比

#define D_TARGET_AVERAGE_VOLTAGE  3500
//R_ADC1_Vout 	:发热丝两端AD值
//R_ADC_FVR 	:电池电压AD值
//FVR_VOLTAGE 	:电池AD参考电压 满电值AD
//R_Smk1Duty  	:最后得出的占空比
void CAL1_ConstantVoltage(void)
{
	R_Temp32 = (vu32)D_TARGET_AVERAGE_VOLTAGE * 250 * R_ADC_FVR;	//电压* duty =3.5V;		
	R_Temp32 = R_Temp32 / R_ADC1_Vout;
	R_Temp32 = R_Temp32/FVR_VOLTAGE;
	if(R_Temp32 > 250) R_Smk1Duty = 250;
	else	R_Smk1Duty = R_Temp32 & 0xff;
}

恒有效值表对应AD值

AD值 = (功率 * 负载阻值 * (电池参考电压)^2 ) 开方
=SQRT(A9988988B9)
=SQRT(A9
10001000B9)
在这里插入图片描述

恒有效算法

//VoltageTab 	:恒有效对应输出功率AD值
//R_Power_Num	:输出的功率 1-30W
//R_ADC1_Vout 	:发热丝两端AD值
//R_ADC_FVR 	:电池电压AD值
//FVR_VOLTAGE 	:电池AD参考电压 满电值AD
//R_Smk1Duty  	:最后得出的占空比
const vu16 VoltageTab[31] = {
		0,
		// 699 ,988 ,1210,1397,1562,1711,1848,1976,2096,2209,		//1-10w -0.5R
		// 2317,2420,2519,2614,2706,2794,2880,2964,3045,3124,		//11-20w -0.5R
		// 3201,3277,3350,3423,3493,3562,3630,3697,3762,3827		//21-30w -0.5R
		699 ,988 ,1210,1397,1562,1711,1848,1976,2096,2079,		//1-10w -0.5R
		2190,2300,2400,2500,2585,2664,2730,2814,2900,2985,		//11-20w -0.5R
		3061,3137,3210,3285,3353,3562,3630,3697,3762,3827		//21-30w -0.5R
	};

void ConstantValidVoltage(void)
{
	R_Temp32 = (vu32)R_ADC_FVR * VoltageTab[R_Power_Num];
	R_Temp32 = R_Temp32 / R_ADC1_Vout;
	R_Temp32 = R_Temp32 << 8;
	R_Temp32 = R_Temp32 / FVR_VOLTAGE;
	R_Temp32 = R_Temp32 * R_Temp32;
	R_Temp32 = R_Temp32 >> 8;
	if (R_Temp32 > 250)
		R_Smk1Duty = 250;
	else
		R_Smk1Duty = R_Temp32 & 0xff;
}

定时器处理

此函数8ms打开一次mos管 一个占空比周期为8ms 通过控制Timer2定时器去关mos实现调整mos管输出占空比实现调整发热丝输出

	SMOKE1_MOS_ON; 
//定时器2 通道1
	R_Smk1Duty_Valid = ((vu16)R_Smk1Duty + R_Smk1Duty_Valid) >> 1;	// re-initial TIMER2
	// re-initial TIMER2
	PR2H = R_Smk1Duty_Valid >> 7;
	PR2L = (R_Smk1Duty_Valid & 0x7F) << 1;
	TMR2H = 0;
	TMR2L = 0;
	TMR2IF = 0;
	TMR2IE = 1;

中断函数处理

//低优先级中断服务函数
void interrupt low_priority ISR_l (void)
{
    if(TMR2IE == 1 && TMR2IF == 1)     //一个PWM周期关MOS时间到;
    {                    
		TMR2IF = 0;
		CMP1IE = 0;//关比较器中断
        TMR2IE = 0;//禁止中断
		SMOKE1_MOS_OFF;
    }
}