This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28069M:如何在读取 ADC 时使用数字低通滤波器?

Guru**** 2589300 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/794311/ccs-tms320f28069m-how-can-i-use-a-digital-low-pass-filter-when-reading-adc

器件型号:TMS320F28069M

工具/软件:Code Composer Studio

您好!

我想读取 ADC 通道、我正在使用 ADCINT1通过中断读取该通道(如 controlsuit 中的示例)。 我为 ADC 读取的值噪声很大、因此我希望使用低通滤波器来读取这些值。 我知道数字低通滤波器可以这样写:

y (n)=(1-2^(-k))* y (n-1)+x (n)

我的问题是、如何为 ADC 实施此滤波器?

到目前为止、我已经在 ADC_ISR 函数中编写了一个代码、但它给出了无效读取(4e27)。 这是我的代码:

void ADC_Config (void)
{
EALLOW;
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;// ADCINT1在 AdcResults 锁存后跳闸
AdcRegs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//禁用 ADCINT1连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL = 1;//设置 EOC1以触发 ADCINT1触发

AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;//将 SOC0通道选择设置为 ADCINA0


AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0xD;//设置 SOC0在 EPWM1A 上启动触发器、因为轮询 SOC0先转换、然后 SOC1


AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)

EDIS;

//假设 ePWM1时钟已在 InitSysCtrl()中启用;
EPwm5Regs.ETSEL.bit.SOCAEN = 1; //在组上启用 SOC
EPwm5Regs.ETSEL.bit.SOCASEL = 4; //在递增计数时从 CMPA 中选择 SOC
EPwm5Regs.ETPS.bit.SOCAPRD = 1; //在发生第一个事件时生成脉冲
EPwm5Regs.CMPA.half-CMPA = 1000;//设置比较 A 值
EPwm5Regs.TBPRD = 2000;//为 ePWM1设置周期
EPwm5Regs.TBCTL.bit.CTRMODE = 0; //向上计数并启动
EDIS;

}

__interrupt void ADC_ISR (void)
{
INTERRUPT_TICT++;
IF (RESULT_indexV1 

在我的 ADC_ISR 中、我要首先减去每个数据读取的平均值、然后使用滤波器公式(k=4)、最后读取标准化输出(Voltage1)。 我认为中断频率比我的代码更快、因此当我在代码中读取 Voltage1时、它应该已经收集了大量数据并从低通滤波器传递这些数据。 我是对的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ATA、

    您的帖子中可能有太多考虑因素、无法在论坛上交互式工作。 请确定您的故障点、以便我们可以推荐解决方案。

    首先隔离用于程序的各种步骤、并验证每个步骤的行为、直到您发现故障。  例如:

    1. ADC 触发生成
    2. ADC ISR 条目
    3. 原始 ADC 转换的精度
    4. 算术运算的准确性

    对于 ISR 执行时间、您可以记录 ePWM TBCTR 寄存器的值、以了解各种操作需要多长时间以及在下一个中断之前还有多少时间。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ATA、

    自上次更新以来已经有一段时间了。 我假设您能够解决您的问题。

    如果没有、请回复此主题。 如果该线程由于超时而锁定、请创建一个描述问题当前状态的新线程。

    Tommy