微孔雾化片单片机自动调整中心频率原理图和软件 联系客服

发布时间 : 星期一 文章微孔雾化片单片机自动调整中心频率原理图和软件更新完毕开始阅读9c9e7ba4da38376bae1fae62

/****************扫频函数************* FileName:Frepuecy_Sweep.c ProjectName: FunctionDesc: CreateDate: Version: Author:

ModifyHistory: Remark:

5ms执行一次

*****************包含头文件**********************/ #include \#include \

#include \#include \

/*****************定义全局变量*******************/

/*****************声明全局变量*******************/ extern bit B_Moistrue;

extern u8 r_adc1,r_adc2,r_adc3; bit B_SF_OK;//是否已经扫过频标志

/*******************定义常量*********************/ #define PWM1_DUTY_MIN 3u #define PWM1_DUTY_MAX 253u #define PWM1_CURRENT_MIN 10u //#define M1_Stop_500ms_Set_Value 100u

/*****************IO口重定义*********************/ /*******************函数定义*********************/ /*******************Frepuecy_Sweep function******/

//扫频思路:求取AD值最大的5的占空比的值取最小值做为中心频率可抗四次大的干扰 void Frequency_Sweep(void) {

static uint8_t PWM1_Duty,Temp1,Temp2,Temp3; static uint8_t PWM1_Duty_OK; if(B_Moistrue) { if(B_SF_OK == 0) //扫频位完成 { if (PWM1_Duty < PWM1_DUTY_MAX) //加暂空比 { PWM1_Duty++; PWM1_Duty_Update(PWM1_Duty); Temp3 = Temp2;

电流

}

Temp2 = Temp1; if(r_adc1 < r_adc2) { Temp1 = r_adc1; r_adc1 = r_adc2; r_adc2 = Temp1; }

if(r_adc2 < r_adc3) { Temp1 = r_adc2; r_adc2 = r_adc3; r_adc3 = Temp1; }

if(r_adc1 < r_adc2) { Temp1 = r_adc1; r_adc1 = r_adc2; r_adc2 = Temp1; //三个数排大小,r_adc2为中间值

}

Temp1 = r_adc2; if(Temp3 >= Temp2) { if(Temp2 >= Temp1) //连续递减

{ if(Temp1 < Temp3) // 并且第1次比第3次大

{

if( Temp1 >= PWM1_CURRENT_MIN ) //并且都有一定

{

PWM1_Duty_OK = (PWM1_Duty-2); B_SF_OK = 1; } } } } } else { if(B_SF_OK == 0) //没扫到重来 { PWM1_Duty = 3; } }

}

else { static uint8_t Tempa; Tempa++; if(Tempa == 1) PWM1_Duty_Update(PWM1_Duty_OK+1); else if(Tempa == 2) PWM1_Duty_Update(PWM1_Duty_OK+2); else { Tempa = 0; PWM1_Duty_Update(PWM1_Duty_OK); } } } else { B_SF_OK = 0; PWM1_Duty_OK = PWM1_DUTY_MIN; PWM1_Duty_Update(PWM1_DUTY_MIN); PWM1_Duty = PWM1_DUTY_MIN; Temp1 = 0; Temp2 = 0; Temp3 = 0; }