微孔雾化片单片机自动调整中心频率原理图和软件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
}