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.

[参考译文] MSP430F6659:向生成的 PWM 频率添加抖动频率

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/987538/msp430f6659-adding-dither-frequency-to-generated-pwm-frequency

器件型号:MSP430F6659

您好、TI、

我正在进行一个项目、使用比例电磁阀控制线性控制阀。 我们在 PWM 模式(PWM 输出模式:7 - PWM 复位/设置)中使用 TimerA 来控制比例电磁阀相对于设定值的作用。 在这里、生成的 PWM 输出会导致电磁阀线圈的电流随着 PWM 占空比的增加或减少而增加或减少。 占空比的最小限制在35%至40%之间、任何占空比低于此值都会导致电磁阀关闭。 目前、在使用电磁阀测试控制时、观察到电磁阀在35%至40%的可变占空比下停止打开。 现在、根据比例电磁阀的数据表、生成的 PWM 还应包含叠加在 PWM 频率上的抖动频率、以实现更好的线性度和迟滞。 因此、我认为需要抖动频率、以便电磁阀在电磁阀数据表中给出的40%左右的固定占空比下停止打开。 因此、我可以根据设定的值准确地停止阀门、而不会出现任何控制波动

为了实现 PWM 和增加抖动频率、我将在软件中执行以下操作  

如下所示初始化 TImerA:

TA0CCR0 =根据 PWM 的时间周期= 32000;

TA0CCTL1 = OUTMOD_7 + CCIE;//PWM 输出模式:7 - CCIFG 的 PWM 复位/设置和中断使能

TA0CTL = tassel_2 + MC_1 + TACLR + ID__4;//总时间周期 = SMCLK/4 = 16MHz/4 = 4MHz。 PWM 的定时器周期= TA0CCR0 /总时间周期=  32000/4M = 8ms。 PWM 频率= 125Hz

现在、 中断处理程序内的控制例程内(PWM 的每个定时器溢出事件后、针对 TImerA 的中断处理程序)

int16 x = TA0CCTL1;//存储旧 的 TA0CCTL1 值

TA0CCTL1 = OUTMOD_5 + CCIE;//保持输出复位以避免对 PWM 输出的任何干扰

TA0CCR1 =占空比;//占空比、根据计算结果和针对抖动添加的设置;

TA0CCTL1 = x;//恢复旧 的 TA0CCTL1 值

如上所示、为了增加抖动频率、我将在收到由 PWM 输出中的计时器溢出引起的中断后更新计时器处理程序内的占空比

这样做是为了将抖动频率作为 PWM 频率的倍数来实现

我有以下问题:

1) 1)我想知道是否能够使用上述方法将抖动频率叠加为 PWM 频率的多个因子。 PWM 已经实现、没有启用任何中断。在这里、我需要启用中断

2) 2)是否还有其他方法像上述方法一样添加抖动频率、这种方法在处理中断时会占用 CPU 时间、从而获得更高频率的 PWM

3) 3)我还想生成高达10KHz 的高频 PWM。 我无法实现、因为 使用的输出驱动器电路是高频固态继电器(SSR )、由于 SSR 电路中的延迟、我能够在螺线管线圈的输入端实现仅高达500Hz 的最大频率。 是否有任何可为比例电磁阀产生高频 PWM 的输出驱动器电路可用

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

    1) 1)我不太确定这里的"多因子"是什么意思、但您列出的序列显示得差不多。  

    2) 2)这似乎是一个很好的 DMA 应用。 假设抖动函数是周期性的、则可以构建一个周期的 CCR1 (占空比+抖动)值表、并使用 TRIGGER=1 (TA0CCR0)和 DMADP=4以循环方式写入连续占空比值[参考数据表(SLAS700D)表6-13]。 当您想要切换占空比时、只需设置 DMAEN=0、写入一个新的 DMAxSA 值、然后设置 DMAEN=1。 这里有一个小竞赛、但损失的代价是使用旧值获得一个额外的 PWM 周期、这看起来是良性的。

    3) 3)我必须在这个问题上向其他人提出。