plecs实现数字滤波

plecs实现数字滤波

1、PLECS仿真

![(https://img-blog.csdnimg.cn/8d100de3fccf4d5595532391d149c55d.png)](https://img-blog.csdnimg.cn/762d565f13944ef5bfa077b501ea9376.png

2、declaration

#include <stdio.h>

// 输入定义
#define     VOLT_SAMPLE       Input(0)

// 输出定义

// 离散状态变量定义

// 时间定义
#define     SYS_TIME1S_BS12US5      (80000)
#define     TIME1MS_BS12US5         (80000 / 1000)
#define     SYS_TIMER_PRD           SYS_TIME1S_BS12US5

// 非离散全局变量定义
int g_sysTimerCnt;
int g_isrTaskIndex;
// 输入输出量定义
double g_voltSample;
double g_voltFilt1;
double g_voltFilt2;
int g_isrCnt;

// 函数定义
inline void SysTimerRun(void)
{
    if (++g_sysTimerCnt >= SYS_TIMER_PRD) {
        g_sysTimerCnt = 0;
    }
}

// 分频中断任务
typedef void (*Fun)(void);

void IsrTask1(void)
{
    g_isrCnt++;
}

void IsrTask2(void) {}
void IsrTask3(void) {}
void IsrTask4(void) {}
void IsrTask5(void) {}
void IsrTask6(void) {}
void IsrTask7(void) {}
void IsrTask8(void) {}

const Fun g_isrFun[8] = {
    IsrTask1,
    IsrTask2,
    IsrTask3,
    IsrTask4,
    IsrTask5,
    IsrTask6,
    IsrTask7,
    IsrTask8,
};

void Sample(void)
{
	g_voltFilt1 += (g_voltSample - g_voltFilt1) / 1024;
}

inline void IsrTaskRun(void)
{

	 Sample();
    g_isrFun[g_isrTaskIndex]();
    if (++g_isrTaskIndex >= 8) {
        g_isrTaskIndex = 0;
    }
}

// 后台慢速任务
void TaskRun(void)
{
    static int sysTimerCntFor1msPre = 0;

    int delta = g_sysTimerCnt - sysTimerCntFor1msPre;
    delta = delta < 0 ? delta + SYS_TIMER_PRD : delta;

    if (delta >= TIME1MS_BS12US5) {
        g_voltFilt2 += (g_voltSample - g_voltFilt2) / 64;
        sysTimerCntFor1msPre = g_sysTimerCnt;
    }
}

3、start_function

// 初始化变量
g_sysTimerCnt = 0;
g_isrTaskIndex = 0;
g_isrCnt = 0;

4、output_function

// 输出
Output(0) = g_voltFilt1;
Output(1) = g_voltFilt2;

5、update_funcion

// 输入量
g_voltSample = VOLT_SAMPLE;
// 离散
g_voltFilt1 = DiscState(0);
g_voltFilt2 = DiscState(1);

SysTimerRun();
IsrTaskRun();
TaskRun();

DiscState(0) = g_voltFilt1;
DiscState(1) = g_voltFilt2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东门吹嘘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值