?? main.c
字號:
//**********************************************************************
//功能 : 定點濾波程序
//作者 : lihj
//創建日期 : 2004-06-13
//版本 : V1.0
//修改記錄 :
//***********************************************************************
#include "math.h"
//系統參數配置
#define TS 5 //信號采樣周期定義,單位是100ms
#define TF 20 //濾波時間常數定義,單位是100ms
#define DOT_BITS 8 //濾波過程中的放大倍數(定點數小數位數)
//全局變量定義
int g_nPreInput; //上一周期的采樣值
//內部函數聲明
int Filter(int); //濾波函數
//外部函數聲明
int Sample(void); //信號采樣接口函數
void HardIni(void); //硬件初始化接口
//主循環
void main(void)
{
int CurSigVal; //當前信號值
int i;
//硬件初始化
HardIni();
//全局變量初始化
g_nPreInput = 0;
while(1)
{
CurSigVal = Filter(Sample()); //采樣并濾波
for(i=0;i<20000;i++); //待機一段時間后,開始下一循環
}
}
//一階慣性濾波
//最差情況下,12MHz晶振,需要0.27ms
int Filter(int CurInput)
{
int t;
int temp;
int input;
input = CurInput<<DOT_BITS;
//如果信號沒有改變,則直接返回
if(g_nPreInput == input)
{
return CurInput;
}
//對信號進行限幅,輸入值不能超過32767/(TS<<DOT_BITS)
if(CurInput > (32767/(TS<<DOT_BITS)))
{
CurInput = 32767/(TS<<DOT_BITS);
//可以進行越限報警
//......
}
//已經逼進最終值時的處理
temp = (CurInput<<DOT_BITS)-g_nPreInput;
if(abs(temp)*TS < (TS+TF))
{
g_nPreInput = input;
return CurInput;
}
//濾波計算
//保存本周期的計算值
g_nPreInput = g_nPreInput + (temp*TS)/(TS+TF);
t = g_nPreInput>>DOT_BITS;
return t;
}
//硬件初始化接口
void HardIni(void)
{
}
//信號采樣接口
int Sample(void)
{
return 20;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -