/****************扫频函数************* 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; }
微孔雾化片单片机自动调整中心频率原理图和软件
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)