想对一个方波(增量式编码器输出)进行倍频。增量式编码器稳定输出时候占空比50%,应该是可以倍频的。有没有比较好的解决方案。需要是更改比较容易的方案对波形进行n倍频。最好程序里n改个数字就可以。CLB的话好像不太行,更改不是很方便。现在想到的是用eCap或者eQep把频率读出来,之后去调整PWM寄存器调节频率来输出。
1. PWM设置频率的寄存器可以这么实时更改吗?
2. 有没有别的解决方案
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.
想对一个方波(增量式编码器输出)进行倍频。增量式编码器稳定输出时候占空比50%,应该是可以倍频的。有没有比较好的解决方案。需要是更改比较容易的方案对波形进行n倍频。最好程序里n改个数字就可以。CLB的话好像不太行,更改不是很方便。现在想到的是用eCap或者eQep把频率读出来,之后去调整PWM寄存器调节频率来输出。
1. PWM设置频率的寄存器可以这么实时更改吗?
2. 有没有别的解决方案
您好,
想跟您确认下, 您指的倍频,是指频率相乘吗? 例如,初始信号的频率为10Hz,您希望其频率为10*nHz?
如果是的话,并且您使用 ePWM 模块来实现 PWM 信号,那么最简单的方法就是通过Time-Base子模块来调整 ePWM 的周期。 强烈建议您通过影子加载来完成此操作,不要用即时加载,因为这样可以在系统联机时安全地进行操作。或者,如果您只需要更改 ePWM 的占空比,那么可以通过调整计数器比较值,详情请见TRM中Counter-Compare submodule of the ePWM。
此外如果您希望保持相同的占空比,那么该期间的调整应伴随 CMPA/B 的调整。
您好,
您指的倍频,是指频率相乘吗? 例如,初始信号的频率为10Hz,您希望其频率为10*nHz?
所以您是想更改频率对吗?我们的设想是正确的?
是的话,那么通过外部源控制该(或任何)加载/寄存器影子写入操作的时序是使用4类 ePWM 的Global Load功能完成的。 通过将全局负载触发器配置为由其外部脉冲生成(这个可以通过几种不同的方法实现,最常见的实现方式是在 ePWM 输入 X-Bar 上将信号设置为 SyncIn 并利用该功能),您能够在下一个 TBCLK 脉冲上调整这些寄存器中的值。
您好,
更改运行频率的总延迟量是完全取决于 TBCLK (ePWM 的本地时钟)的设置,以及(启用影子加载的情况下)影子加载事件的频率。 也就是说,考虑到datasheet中描述的 ePWM 的最大频率和您的工作频率,从影子加载事件到寄存器更新的延迟应小于1 TBCLK 周期。 该器件的 TRM 中提供了可用于更新这些寄存器的可用影子加载/全局加载事件列表。
(一个不太相关的小备注:以上我们提到要使用影子加载时,也提到了"全局加载",在此为您/该帖的任何其他读者阐明-这是两个不同的东西。 影子加载会告诉器件"对于该特定寄存器,无论何时此影子加载事件发生,例如TBCLK=0 or SyncIn=1,就只会加载新的值。" 同时,全局加载会告知器件"对于此影子寄存器列表,请忽略本地设置。 相较而言,所有的这些设备都使用此影子加载事件,以便都同时发生。"
工程师更建议使用全局加载设置,因为周期调整通常伴随着 CMPx 值的调整,并且通过全局加载一次性配置影子寄存器更新设置比单独配置每个设置更简单。)