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.

[参考译文] TMS320F28335:TMS320F28333

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1191550/tms320f28335-tms320f28333

器件型号:TMS320F28335

此代码用于 ECAP 模块实验。 我使用我的函数发生器信号(具有特定的频率和占空比)在端口 GPIO24处进行捕获。 频率在 CCS 监视窗口通过变量 PWM_Duty 和 PWM_PERIOD 测量。 我需要将我测得的同一信号(相同的频率和占空比)传递到任何 GPIO 端口 A (假设 GPIO06)。 这意味着您捕获的任何数字信号都将传递到我分配的任何引脚/GPIO 端口 A (假设 GPIO06)。 通过这种方法、我可以通过示波器在 GPIO06处测量该信号、以分别验证我在观察窗口上看到的信号频率和占空比。 我尝试在代码中添加两行(第121行和第122行)、但我想它不起作用。 社区成员、请在代码中提供建议、以便我能够执行所需的任务。

谢谢

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

    您好、Muhammed、  

    您现在尝试将32位寄存器输出到单个 GPIO 位。 CAP 是一个32位寄存器、因此您需要32个 GPIO 才能输出寄存器内容所保存的内容。

    最棒的

    Ryan Ma

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

    您好、Ryan、

    关于下图、所有这些都是我们在 ECAP 模块中使用的寄存器。

    ECAP 函数在代码中使用三个寄存器。  ECap1Regs.ECEINT.ALL、 ECap1Regs.ECCTL1.ALL 和 ECap1Regs.ECCTL2.ALL。 我复制了的值  

    ECap1Regs.ECCTL2.bit.CAP (single-bit - capture value)到 第121行和第122行的 GpioDataRegs.GPADD.bit.GPIO06 (single-GPIO06)。

    我是否需要在第121行的代码中写入以下行?

    GpioDataRegs.GPADAT.bit.GPIO06 = ECap1Regs.ECCTL2.bit.CAP;

    GpioCtrlRegs.GPAMUX1.bit.GPIO06 = 0;

    GpioCtrlRegs.GPADIR.bit.GPIO06 = 1;

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

    您好、Muhammad、

    很抱歉、我不正确、查看了错误的寄存器。 是的、如果引脚配置为 GPIO 输出、则表示正确。 在设置 GPADAT 寄存器之前、请确保设置 GPAMUX1和 GPADIR 寄存器。

    GpioCtrlRegs.GPAMUX1.bit.GPIO06 = 0;

    GpioCtrlRegs.GPADIR.bit.GPIO06 = 1;

    GpioDataRegs.GPADAT.bit.GPIO06 = ECap1Regs.ECCTL2.bit.CAP;

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

    您好、Ryan、

    在测试电路板时、GPIO6引脚不会在示波器上提供任何所需信号/结果的迹象。  我们需要输出端具有与我 通过 ECAP/GPIO24引脚从函数发生器捕获的频率和占空比相同的数字信号(1kHz 和50%占空比)。 观察窗口(监视器)显示了所需的结果、但示波器未提供所需的信号。 是否可以在第121-123行重新检查代码? 我是否在引脚 GPIO6上发送了正确的位信号(CAP_APWM)?  请查看以下图片。  

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

    您好、Muhammed、

    是否要将 GPIO 引脚设置为输出位于该寄存器位正确的任何内容? ECCTL.CAP_APWM?

    该位告诉您选择了哪种工作模式。 您是否正在尝试输出以查看您根据该位字段从 GPIO 中选择了哪种模式?

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

    感谢您的回复。

    问:该位告诉您选择了哪种工作模式。 您是否正在尝试输出以查看您根据该位字段从 GPIO 中选择了哪种模式?

    答案是否定的、

    在您的解释中、我认为我选择了错误的位来执行所需的任务。

    任务是通过示波 器测量 GPIO06上的输出信号(与我通过发生器从 GPIO24捕获的信号相同)、以便验证占空比和周期、如观察窗口中所示。

    这意味着将相同的输入传递到输出。 或者、您可以说、无论您从发生器提供的任何频率/占空比的数字方波脉冲是在 GPIO06传递还是测量的。

     

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

    您好、Muhammed、  

    您要做的是将函数发生器的信号输出到电路板上的另一个 GPIO 输出正确吗? 是否要使用 ECAP 的 APWM 功能? APWM 可以生成从函数发生器生成的方波。

    很抱歉、我不清楚您要实现的目标。 如果您尝试通过 ECAP 将输入(函数发生器)路由到电路板上的输出引脚、则无法执行此操作。 您可以使用 ECAP 作为 APWM 模式来生成 PWM 信号。

    此致、

    Ryan Ma

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

    感谢您的回复

    问:您要做的是将函数发生器的信号输出到电路板上的另一个 GPIO 输出正确吗?

    答: 是的

    如果您尝试通过 ECAP 将输入(函数发生器)路由到电路板上的输出引脚、则无法执行此操作。 您可以使用 ECAP 作为 APWM 模式来生成 PWM 信号。

    我可以遵循此过程吗?

    - GPIO24作为 从函数发生器捕获的输入信号。 (这在代码中完成)。

    -我可以在  CCS 监视窗口中看到捕获信号的频率和占空比。 (这也通过代码通过 PWM 周期/占空比来完成)。

    -在 另一个 GPIO 引脚(如 APWM 模式中的 ECAP2)而非 GPIO24处生成捕获信号的 PWM 信号、因为它用于从函数发生器捕获信号。

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

    是的、这听起来像是一个解决方案! 只要您将 ECAP 模块设置为 APWM 模式、并使用从另一个 ECAP 捕获的信息来计算周期/占空比、您就应该能够完成想要执行的操作。

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的回复。

    - GPIO24作为  从函数发生器捕获的输入信号。 (这在代码中完成)。

    -我可以在  CCS 监视窗口中看到捕获信号的频率和占空比。 (这也通过代码通过 PWM 周期/占空比来完成)。

    -在   另一个 GPIO 引脚(如 APWM 模式中的 ECAP2)而非 GPIO24处生成捕获信号的 PWM 信号、因为它用于从函数发生器捕获信号。

    按照以下步骤设置代码、如下所示。 请检查代码:行:112、153、154、155、157、158、178、174、189、202、203、用于在 GPIO25处生成  从函数发生器捕获的信号(GPIO24)的 APWM 信号。

    此致

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

    您好、Muhammed、  

    当您关注上述发送的代码时、是否会发生意外情况?  

    最棒的

    Ryan Ma

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

    您好、Ryan、

    感谢您的回复。 我今天在硬件中执行了代码。 没有建筑错误。 但在 GPIO25 (Ecap2)处、我没有在示波器上获得输出。 输出应为    从函数发生器捕获的信号(GPIO24) GPIO25处的 APWM 信号。  请参阅下面的图片。

    请再次查看代码并提出相应建议。  行数:112 153 154、155、157、158、174、189、202、203

    此致

    Arsalan

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

    您好、Arsalan、

    您 是否可以尝试以这种方式对其进行配置?

        EALLOW;
        
        //
        // Enable internal pull-up for the selected pins
        // Pull-ups can be enabled or disabled by the user.
        // This will enable the pullups for the specified pins.
        // Comment out other unwanted lines.
        //
        GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;    // Enable pull-up on GPIO25 (CAP2)
    
        //
        // Inputs are synchronized to SYSCLKOUT by default.
        // Comment out other unwanted lines.
        //
        GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0;  //Synch to SYSCLKOUT GPIO25 (CAP2)
    
        //
        // Configure eCAP-2 pins using GPIO regs
        // This specifies which of the possible GPIO pins will be eCAP2 functional 
        // pins. Comment out other unwanted lines.
        //
        GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;   // Configure GPIO25 as CAP2
    
        EDIS;

    您是否还尝试设置初始周期以首次测试 ECAP2的输出?

    ECap2Regs.ECCTL2.bit.CAP_APWM = 1;	    // Enable APWM mode
    ECap2Regs.CAP1 = 0x01312D00;			// Set Period value
    ECap2Regs.CAP2 = 0x00989680;			// Set Compare value
    ECap2Regs.ECCLR.all = 0x0FF;			// Clear pending interrupts
    
    //
    // Start counter
    //
    ECap2Regs.ECCTL2.bit.TSCTRSTOP = 1;

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

    您好、Ryan、

    上述代码用于 ECAP_APWM (示例)、我已经测试了此代码。  您上面提到的线路适用于7.5Hz 和15Hz。 但我想这里的周期是由我们自己设置的(0x1312D00)。 当我从函数发生器(GPIO24)捕获的信号生成 PWM 时。 如果我从发生器设定1kHz、程序应该生成相对于 GPIO25上1kHz 的 PWM 信号。 如果我将 GPIO24处发生器的频率更改为150kHz、程序应在 GPIO25处生成相对于150kHz 的 PWM 信号 、而不更改代码中的任何内容。

    期待您的反馈

    此致

    Arsalan

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

    您好、Muhammad、

    interrupt void eCAP1_isr(void)
    {
    	ECap1Regs.ECCLR.bit.INT = 1;				// Clear the ECAP1 interrupt flag
    	ECap1Regs.ECCLR.bit.CEVT3 = 1;				// Clear the CEVT3 flag
    
    	// Calculate the PWM duty period (rising edge to falling edge)
    	PWM_Duty = (int32)ECap1Regs.CAP2 - (int32)ECap1Regs.CAP1;
    
    	// Calculate the PWM period (rising edge to rising edge)
    	PWM_Period = (int32)ECap1Regs.CAP3 - (int32)ECap1Regs.CAP1;
    
    	PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;	// Must acknowledge the PIE group 4
    }

    对于此中断、您正在更新 PWM_Duty 和 PWM_PERIOD、这似乎很好。 但是、我看不到您将 ecap2.cap 寄存器设置为这些值的位置。 因此、我假设您在寄存器的调试选项卡中显示了什么 ecap2 CAP 寄存器为零? 能否提供您的 ecap2.CAP1寄存器是什么?

    ECap2Regs.CAP1 = PWM_Duty;			// Set Period value
    ECap2Regs.CAP2 = PWM_Period;			// Set Compare value

    在 APWM 模式下、写入 CAP1/CAP2活动寄存器也会将相同的值写入相应的影子寄存器 CAP3/CAP4。 这模拟立即模式。 写入影子寄存器 CAP3/CAP4将调用影子模式。 根据您希望加载的方式、您可能需要直接写入 CAP1寄存器或 ecap3/4 CAP1寄存器。

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

    您好、Ryan、

    1 - 关于 GPIO 设置、通过添加这三行没有发现差异

    GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;  //启用 GPIO25上的上拉电阻(CAP2)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; //同步到 SYSCLKOUT GPIO25 (CAP2)

    GpioCtrlRegs.GPAMUX2.bit.GPIO25=1;  //将 GPIO25配置为 CAP2

    2-运行代码后,寄存器 ecap2.cap 1/CAP2显示0值。 请参见下图

    3 -然后在代码中的中断例程中添加这两行:

    ECap2Regs.CAP1 = PWM_Duty;//设置周期值
    ECap2Regs.CAP2 = PWM_PERIOD;//设置比较值

    这将开始在 ecap2.cap1/cap2寄存器中显示连续值。 这些值会持续变化。 但它不会在示波器上从 GPIO25生成任何 PWM 输出。 请参阅下面的图片。

      

    更新后的代码附在此处。

    期待您的回复

    此致

    Arsalan

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

    您好、Arsalan、

    您的周期 CAP1的十进制值为 74953 (x124C9)、而与 CMPA 事件等效的 CAP2的值为 149977 (x249D9)、这意味着永远不会达到 CMPA 事件。 149977已超过您设定的期限。

    尝试切换这些代码行。 我想我在之前的答复中以相反的方式写了这篇文章,抱歉。

    ECap2Regs.CAP1 = PWM_PERIOD;
    ECap2Regs.CAP2 = PWM_Duty;

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

    您好、Ryan、

    现在、我将在占空比为50%时获得1kHz 的结果 PWM 信号。 感谢您完成此步骤。 另一件事是、信号有延迟、它在大约4-5秒后生成输出、有时随着我增加步进频率而延长。 请在示波器上查看下图以了解1KHz PWM。

       

    但是、一旦我将频率从1KHz 更改为120kHz 、50%或发生器的不同占空比、并等待一段时间或更长的时间。 同样、输出不会出现、它在示波器中显示了垃圾值。 请参阅下面的结果图片。

    期待您的反馈

    此致

    Arsalan

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

    您好、Arsalan、

    能否创建单独的线程? 先前提供的答案似乎解决了您的原始问题、并获得了一些输出、因此我们应该将此主题标记为已解决。

    但是、这个新问题与更高频率的 APWM 有关。 打开另一个线程对于同样遇到此问题的未来客户很有帮助。 我将能够在另一个线程上帮助您。

    此致、

    Ryan Ma

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

    当然。

    感谢您解决此主题