单片机/MCU论坛
直播中

duke刘

9年用户 672经验值
擅长:可编程逻辑
私信 关注
[问答]

如何使用PWM信号控制Aurix TC39x板上的另一个信号?

我正在使用 GTM.ATOM 生成 PWM 信号,我想使用这个 PWM 信号在主从模式下控制另一个 PWM 信号。 例如,在主 PWM 信号的上升沿,从属 PWM 信号处于启用状态,在下降沿,从属 PWM 信号被禁用。 从用户手册中,我发现 ARU 可以提供帮助,但我不知道如何实现我的配置。 有人能给我一些提示吗? 提前谢谢了〜
最诚挚的问候,
郑涛
下图可以进一步澄清我的问题:


                                                                                                                                                                                                                                                                                                                                                                                                        
                                                      

回帖(2)

王丹青

2024-1-23 09:32:06
要实现主从模式,根据主 PWM 信号的上升沿和下降沿控制从机 PWM 信号,可以将 GTM(通用计时器模块)的 ARU(高级路由器单元)与 ATOM(定时器输出模块)结合使用,生成 PWM 信号。
以下示例代码演示如何配置和使用 GTM ATOM 生成主 PWM 信号并控制从属 PWM 信号:
#include "Ifx_Types.h"#include "IfxCpu.h"#include "IfxScuWdt.h"#include "GTM_ATOM_PWM.h"#include "Bsp.h"#define MASTER_PWM_CHANNEL 2#define SLAVE_PWM_CHANNEL 5IfxGtm_Atom_Pwm_Config masterConfig;IfxGtm_Atom_Pwm_Config slaveConfig;IfxGtm_Atom_Pwm_Driver masterDriver;IfxGtm_Atom_Pwm_Driver slaveDriver;void initGtmAtomPwm(void){    // Enable the GTM    IfxGtm_enable( MODULE_GTM);    // Set the CMU clock 0 frequency to 1 MHz    IfxGtm_Cmu_setClkFrequency( MODULE_GTM, IfxGtm_Cmu_Clk_0, 1000000);    // Enable the CMU clock 0    IfxGtm_Cmu_enableClocks( MODULE_GTM, IFXGTM_CMU_CLKEN_CLK0);    // Initialize the master PWM configuration    IfxGtm_Atom_Pwm_initConfig( masterConfig,  MODULE_GTM);    masterConfig.atom = IfxGtm_ATOM2;    masterConfig.atomChannel = MASTER_PWM_CHANNEL;    masterConfig.period = 5000; // Set the period for the master PWM signal    masterConfig.pin.outputPin =  LED; // Set the LED as the output pin for the master PWM signal    masterConfig.synchronousUpdateEnabled = TRUE; // Enable synchronous update of the timer    // Initialize and activate the master PWM    IfxGtm_Atom_Pwm_init( masterDriver,  masterConfig);    IfxGtm_Atom_Pwm_start( masterDriver, TRUE);    // Initialize the slave PWM configuration    IfxGtm_Atom_Pwm_initConfig( slaveConfig,  MODULE_GTM);    slaveConfig.atom = IfxGtm_ATOM2;    slaveConfig.atomChannel = SLAVE_PWM_CHANNEL;    slaveConfig.period = 5000; // Set the period for the slave PWM signal    slaveConfig.pin.outputPin =  SLAVE_LED; // Set the slave LED as the output pin for the slave PWM signal    slaveConfig.synchronousUpdateEnabled = TRUE; // Enable synchronous update of the timer    // Initialize and activate the slave PWM    IfxGtm_Atom_Pwm_init( slaveDriver,  slaveConfig);    IfxGtm_Atom_Pwm_start( slaveDriver, TRUE);}int main(void){    // Enable interrupts    IfxCpu_enableInterrupts();    // Disable the watchdog    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());    // Initialize the GTM ATOM PWM    initGtmAtomPwm();    while (1)    {        // Your application code here    }    return 0;}在此代码中,该initGtmAtomPwm 函数用于配置和初始化 GTM ATOM 以生成主机和从 PWM 信号。主 PWM 信号使用 和masterConfig masterDriver结构生成,而从属 PWM slaveConfig信号slaveDriver使用 和 结构生成。period配置结构中的 字段用于设置 PWM 信号的周pin.outputPin期,该 字段用于选择 LED 作为 PWM 信号的输出引脚。
请注意,您需要将LED SLAVE_LED和 替换为适合您的特定硬件设置的引脚定义。
GTM ATOM 初始化后,您就可以使用该IfxGtm_Atom_Pwm_start 功能启动主 PWM 信号和从机 PWM 信号的 PWM 生成。然后,您可以通过使用所需的导通时间值调用 PWM 信号的占空比来控制 PWMIfxGtm_Atom_PwmHl_updatePulse 信号的占空比。
请注意,此代码是一个基本示例,可能需要修改以适应您的特定要求和硬件设置。
举报

贾小龙

2024-1-23 11:30:16
要使用Aurix TC39x板上的PWM信号控制另一个信号,您可以利用GTM(General Timer Module)模块和ARU(Analog Reset Unit)功能来实现。

以下是一种可能的实现方式:

1. 首先,将GTM的ATOM功能配置为生成您所需的主PWM信号。您可以使用GTM的寄存器和中断来设置PWM信号的周期、占空比和其他参数。确保您的主PWM信号已正确配置并正常工作。

2. 接下来,使用ARU功能来控制从PWM信号的启用/禁用。请注意,ARU模块与GTM模块相连,并且可以通过配置ARU寄存器来监测和响应来自GTM的事件。

3. 配置ARU以匹配您的需求。例如,您可以配置ARU以在主PWM信号的上升沿上启用从PWM信号,在下降沿上禁用它。这可以通过将ARU寄存器配置为监测主PWM信号并相应地设置/清除从PWM信号的控制位来实现。

4. 确定ARU的工作模式和触发条件。您可以使用ARU寄存器来配置主PWM信号的边沿和确定与之关联的从PWM信号的动作。

请注意,以上只是一种概念性的实现思路,并且具体的配置细节可能因您的硬件和固件版本而有所不同。因此,我建议您参考Aurix TC39x芯片的用户手册和相关文档,以获取更多详细信息和确切的指导。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分