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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/****************扫频函数*************

FileName:Frepuecy_Sweep.c

ProjectName:

FunctionDesc:

CreateDate:

Version:

Author:

ModifyHistory:

Remark:

5ms执行一次

*****************包含头文件**********************/

#include "Stdint_Sonix.h"

#include "SysInit.h"

#include "Frequency_Sweep.h"

#include "adc.h"

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

/*****************声明全局变量*******************/

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;

}

}

相关文档
最新文档