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/TMS570LS0432:相邻引脚相互影响。

Guru**** 2589280 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS1224

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/792491/ccs-tms570ls0432-adjacent-pins-influencing-each-other

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGENTMS570LS1224

工具/软件:Code Composer Studio

您好!

我想使用相邻的 GIO 引脚读取两个方波信号、或者更确切地读取它们的频率。

每当在引脚上检测到上升沿时、就会发出中断通知并执行 ISR。  

但是、这些频率似乎相互影响:
当我仅使用一个 GIO 引脚且相邻引脚均为无线时、测得的引脚工作正常(由 ISR 切换的引脚可视化)。

但是、当我将具有另一个方波信号的导线连接到任何相邻引脚时、信号会影响测量的信号。

我还使用多个 ADC 引脚来测量电压、具体取决于电位器。 相邻引脚受其相邻引脚的电压影响...
当测得的 ADC 引脚未连接任何导线并且改变其中一个相邻引脚的电压时、这一点尤其值得注意!

您知道原因吗? 或者更好地解决问题?

提前感谢您!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    请参阅以下有关 ADC 的应用手册 :www.ti.com/.../spna118b.pdf
    我不确定"信号正在影响测量的信号"是什么意思。 当您连接两个相邻引脚时会发生什么情况?
    请记住、Hercules MCU 不支持嵌套中断。 当 GIO 引脚产生中断时、下一个中断将在前一个 ISR 完成后被处理。 您可以考虑使用 N2HET 模块来测量频率。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Miro、
    我想使用微控制器测量两个不同的频率。 目前、我使用的是 GIO 引脚和 ISR、它对特定时间段内上升沿所创建的中断进行计数。
    在使用一个引脚时、这完全正常、结果符合预期。 但是、当我在靠近引脚的位置连接第二根导线时、我将使用该导线来测量第一个频率、结果完全错误:
    例如:通过频率发生器、我将创建两个方波信号、一个1Hz、另一个1kHz。 当我仅将1Hz 通道连接到 GIO 引脚时、结果是正确的(由于 ISR 中有额外的线路、LED 每秒切换一次)。
    当我以1kHz 的频率将第二根导线连接到任何相邻的引脚时、结果完全错误、LED 随机闪烁...

    也许使用 N2HET 模块捕捉频率更容易、但我不知道如何操作、因为本教程仅用于创建 PWM、而不用于捕捉信号... 此外、我必须检测频率中是否缺少边沿(传感器正在读取齿轮以测量每分钟转数、并且可能会错过边沿)、我不知道 N2HET 是否可以实现这一点。

    此外、我正在读取相邻引脚(ADIN0 - ADIN5)上的不同6个模拟输入。 例如、如果 ADIN1接地、它仍然读取一个值、具体取决于 ADIN0的电压...

    再次感谢您的帮助:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、再说一次、

    我刚才在 TVM 中读出、您只能选择10位或12位 ADC、但在 Halcogen 中、可以选择8位 ADC (我正在使用它)。 这可能是个问题吗?

    我正在使用 TMS570LS043。。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您使用的两个 GIO 都会生成中断、中断由同一个处理程序处理。 在 ISR 中、您应该确定哪个引脚在计数中断时导致中断发生变化。
    请增加 ADC 的采样时间。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void gioNotification (gioPORT_t*端口,uint32位)

    if ((port=gioPORTA)&&(bit=0))

    gioToggleBit (gioPORTA、6);
    V_LEFT_Counter++;
    calculateTimePeriod (0);
    //Zeit erfassen und vergleichen mit ter Zeit.. WENn GANZZAHliges Vielfach +-5% Dann zusätzlich Counter erhöhen


    if ((port=gioPORTA)&&(bit=1))

    V_right_Counter++;
    calculateTimePeriod (1);





    我实际上在做这个... 或者我是否错过了这里的内容?

    我通过使用 ADC-自检模式解决了 ADC 问题:D 也感谢你们的帮助!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Christian、
    当 GIO 引脚生成中断时、下一个中断(来自另一个 GIO)将在前一个 ISR 完成后被处理。 这可能会导致测量错误、因为中断可能会重叠。
    我建议您为此使用 HET。 您可以尝试使用 HALCoGen 生成的函数来捕获周期和占空比。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我知道。 这就是您不支持嵌套中断的含义。

    但是、即使我将1kHz 导线连接到 NHET21引脚(GIOA0的另一个相邻引脚)并且只有在 Halcogen 中配置了 GIOA0来执行中断、它仍然会导致 GIOA0上的频率错误。

    感谢您的持续支持!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    最好使用示波器检查这是否来自串话。
    您可以尝试将外部电容器从引脚接地(几皮法拉-您的信号频率很低、这不会损坏它们)或外部下拉电阻器。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    捕获频率的占空比实际上也会非常好。
    借助 N2HET 模块、这是可能的、但是我没有用于通过 N2HET 模块捕捉频率的示例代码。

    我在《技术参考手册》中只找到了一个脉冲测量的小示例、但没有关于如何初始化和编写代码的说明。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    /*用户代码开始(0)*/
    #include "Gio.h"
    #include "het.h"
    #include "sci.h"
    #include "stdlib.h"
    /*用户代码结束*/

    /*包含文件*/

    #include "sys_common.h"

    /*用户代码开始(1)*/
    hetSIGNAL_t*信号;

    浮点周期;
    unsigned char period_inChars[16]; //Strings zur PC-Visualizierung über SCI
    /*用户代码结束*/

    /**@fn void main (void)
    *@应用程序主函数简介
    *@请注意、默认情况下、此函数为空。
    *
    *此函数在启动后调用。
    *用户可以使用此函数来实现应用程序。
    *

    /*用户代码开始(2)*/
    /*用户代码结束*/

    int main (空)

    /*用户代码开始(3)*/
    uint8 numberof _chars; //Anzahl der chars für Die SCI-M ü Übermittlung

    gioInit();
    sciInit();
    gioSetDirection (hetPORT1、0x00000000);
    gioSetDirection (gioPORTA、0xFFFFFFFF);



    hetInit();
    hetREG1->GCR |=(1<<26);

    while (1)

    capGetSignal (hetRAM1、cap0、SIGNAL);

    周期=信号->周期;


    numberof_chars = ltoa (period、(char*) period_inChars); //pin Nummer in chars umwandeln
    sciSend (scilinREG、numberof 字符、period_inChars); //ad-引脚数字器 ausgeben
    sciSend (scilinREG、2、(unsigned char *)"\r\n");


    gioToggleBit (gioPORTA、6);
    _delay_cycles (160000-1); //延迟


    /*用户代码结束*/

    返回0;


    每次返回相同的值、而不受频率的影响。
    在 Halcogen、我只进行了以下调整:
    het->edge0-7:边沿0 =上升边沿
    het->edge 中断:EDGE 0 =启用、高级
    HET->Cap0-7:Cap0 =高极性

    这不工作。。 您能给我建议还是一个简单的示例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    随附的是 TMS570LS1224的示例项目、此项目使用 HET 来生成 PWM (HET1[9]上的 PWM0)并将其捕捉(NHET1[10]上的 CAP0)。 还执行了外部信号捕捉-引脚 HET1[12]上的 CAP1。 包括 HALCoGen 和 CCS 项目。 您可以将其用作参考。

    请查看此链接:

    e2e.ti.com/.../5140.e2e_5F00_PWM_5F00_HET_5F00_1224.zip

    此致、

    米罗