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/TMS320F2.8379万D:MCU中的输入感应和将相同数据传输到CAN接收器和发射器终端

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/616438/ccs-tms320f28379d-input-sensing-in-mcu-and-transferring-the-same-data-to-the-can-receiver-and-transmitter-terminals

部件号:TMS320F2.8379万D

工具/软件:Code Composer Studio

大家好,

     我正在Code Composer Studio软件环境中的两个微控制器之间进行基于CAN的消息传输。 通信接口的方框图结构如下所示:

根据上图,需要通过编程开发的应用程序包括以下几个步骤:

在转换器2 (直流-交流3相逆变器)中发生故障时,

(A)  MCU2必须  检测Conv2中的故障。

(B) MCU2必须将故障状态告知MCU1。

(c)因此,MCU1将向CONV1生成门控信号 ,以便将直流链路电压降至零。

(D)最后 ,Conv2的输入电压将为零,因此同样会停止工作并为负载提供3相输出功率。

   如果有人建议为上述情况进行编程,我将非常有义务。

   谢谢你。

此致

Sumanta

   

  

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

    我在上面提到的问题上陷入了几天的困境,无法找到可行的解决方案。 谁能建议如何修改CAN_Loopback程序中的源代码,以便2个MCU卡具有通过CAN总线通信特定干扰信息的功能。

    提前感谢。

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

    您好,Sumantha:

    请查看您可以尝试的修改代码。  请注意我的评论,它以“// info:”开头。  由于需要定义正在运行的正确函数,因此代码将不会按其本身进行编译,但下面的示例应让您了解要修改的内容以及在何处放置函数调用。 您可以为每个MCU使用类似的代码,并且实际上可以将任意多个节点连接到CAN总线。  最好为每个MCU分配一个唯一的ID,以便您知道哪个节点传输了故障条件。 希望示例代码有所帮助。

    此致,

    约瑟夫

    //###################################################################
    //
    //文件:can_loop.c.
    //
    //标题:演示基本CAN设置和使用的示例。
    //
    //! \addtogroup cpu01_example_list
    //! <H1>CAN外部环回(CAN_Loopback)</H1>
    //!
    //! 此示例显示了CAN的基本设置,以便传输和接收
    //! CAN总线上的信息。 CAN外围设备配置为传输
    //! 具有特定CAN ID的消息。 然后,每传输一次消息
    //! 其次,使用简单的延迟回路进行计时。 发送的消息为
    //! 包含递增模式的4字节消息。 CAN中断
    //! handler用于确认消息传输并计算的数量
    //! 已发送的邮件。
    //!
    //! 本示例将CAN控制器设置为外部环回测试模式。
    //! 传输的数据在CAN0TX引脚上可见,可通过接收
    //! 适当的邮箱配置。
    //!
    //
    //###################################################################
    //$TI发行版:F2837xD支持库V200 $
    //$发布日期:星期二六月21 13:00:02 CDT 2016 $
    //$Copyright:版权所有(C) 2013-2016 Texas2016 Texas Instruments Incorporated -
    // http://www.ti.com/ 保留所有权利$
    //###################################################################

    //
    //包含的文件
    //
    #include "F28x_Project.h"
    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/HW_CAN.h"
    #include "driverlib/can.h"

    //
    //全局
    //
    volatile unsigned long g_ulMsgCount =0;//跟踪的计数器
    //传输的次数
    //成功。
    volatile unsigned long g_bErrFlag =0;//指示某些的标志
    //发生传输错误。

    //
    //主菜单
    //
    内部
    主(无效)

    tCANMsgObject sTXCANMessage;
    tCANMsgObject sRXCANMessage;
    unsigned char ucTXMsgData[4],ucRXMsgData[4];

    //
    //步骤1. 初始化系统控制:
    // PLL,看门狗,启用外设时钟
    //此示例函数可在F2837xD_sysctrl.c文件中找到。
    //
    InitSysCtrl();

    //
    //步骤2. 初始化GPIO:
    //此示例函数可在F2837xD_GPIO.c文件和中找到
    //说明了如何将GPIO设置为其默认状态。
    //
    伊尼特·格皮奥();
    GPIO_SetupPinMux (30,GPIO _MUX_CPU1,1);//GPIO30 - CANRXA
    GPIO_SetupPinMux (31,GPIO _MUX_CPU1,1);//GPIO31 - CANTXA
    GPIO设置PIN选项(30,GPIO输入,GPIO _异步);
    GPIO设置引脚选项(31,GPIO输出,GPIO推送);

    //
    //初始化CAN控制器
    //
    CANInit (Cana_base);

    //
    //可以为设置计时,使M3/主子系统时钟不工作
    //
    CANClkSourceSelect(Cana_base, 0);

    //
    //设置CAN总线的比特率。 此功能设置CAN
    //额定配置的总线定时。 您可以实现更多的控制
    //通过CAN总线定时,改为使用函数CANBitTimingSet()
    //(如果需要)。
    //在本例中,CAN总线设置为500 kHz。 在下面的函数中,
    //调用SysCltlClockGatet()用于确定其时钟速率
    //用于为CAN外围设备计时。 这可以替换为
    //固定值(如果知道系统时钟的值),保存额外的值
    //函数调用。 对于某些零件,CAN外围设备由固定的计时器计时
    // 8 MHz,无论系统时钟如何,在这种情况下,呼叫
    // SysClockCatlockGatet()应替换为800万。 查阅数据
    //表,了解有关CAN外围设备时钟的更多信息。
    //
    CANBitRateSet(Cana_base, 2亿, 50万);

    //
    //步骤3. 清除所有中断并初始化PIE矢量表:
    //禁用CPU中断
    //
    色调;

    //
    //将PIE控件寄存器初始化为其默认状态。
    //默认状态是禁用所有PIE中断和标志
    //被清除。
    //此函数位于F2837xD_PIECTRL.c文件中。
    //
    InitPieCtrl();

    //
    //禁用CPU中断并清除所有CPU中断标志:
    //
    IER = 0x0000;
    IFR = 0x0000;

    //
    //使用指向外壳中断的指针初始化PIE矢量表
    //服务例程(ISR)。
    //这将填充整个表,即使中断也是如此
    //在本例中不使用。 这对于调试非常有用。
    // shell ISR例程位于F2837xD_DefaultIsr.C.中
    //此函数位于F2837xD_PieVect.C.中
    //
    InitPieVectorTable();

    //
    //启用测试模式并选择外部回送
    //
    //HWREG (Cana_base + CAN_O_CTL)|= CAN_CTL_TEST;
    HWREG (Cana_base + CAN_O_TEST)= CAN_TEST_EXL;

    //
    //启用CAN以进行操作。
    //
    CANEnable (Cana_base);

    //
    //初始化将用于接收CAN的消息对象
    //消息。
    //
    *(unsigned long *) ucRXMsgData = 0;
    sRXCANMessage.ui32MsgID = 1;// CAN消息ID -使用1
    sRXCANMessage.ui32MsgIDMask = 0;// TX不需要掩码
    sRXCANMessage.ui32Flags = MSG_OBJ_NO_FLAGS;
    sRXCANMessage.ui32MsgLen = sizeof(RXucMsgData);//邮件大小为4
    sRXCANMessage.pucMsgData = ucRXMsgData;// ptr至邮件内容

    //
    //设置用于接收消息的消息对象
    //
    CANMessageSet (Cana_base,2,&sRXCANMessage,MSG_OBJ_TYPE_RX);


    while (1)// info:将此部分放在MCU能够运行功能的程序的一部分中
    {//可能会导致故障
    faultOccured = OtherMCUFunction1();// info:如果MCU中发生故障,将返回该函数
    faultcode = OtherMCUFunction2();// info:这将是确定故障代码的功能
    RestOfMCUFunctions();



    TransmitAndMonitorFault();// info:这将调用CAN函数以传输和接收故障
    }

    }

    TransmitAndMonitorFault()

    //
    //使用对象编号1发送CAN消息(与
    // CAN ID,在本例中也是1)。 此功能将导致
    //要立即传输的消息。
    //

    IF (FaultOccured)// INFO:如果发生故障,MCU将变量设置为true,仅在发生故障时传输

    //
    //初始化将用于发送CAN的消息对象
    //消息。 消息将为4个字节,其中包含增量
    //值。 最初它将被设置为0。
    //
    *(unsigned long *) ucTXMsgData = faultCode;// info:分配要传输的故障代码
    sTXCANMessage.ui32MsgID = MCUID;// INFO:为每个MCU分配唯一ID,以便您知道谁在传输故障
    sTXCANMessage.ui32MsgIDMask = 0;// TX不需要掩码
    sTXCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;//在TX上启用中断
    sTXCANMessage.ui32MsgLen = sizeof(ucTXMsgData);//邮件大小为4
    sTXCANMessage.pucMsgData = ucTXMsgData;// PTR到消息内容

    CANMessageSet (Cana_base,1,&sTXCANMessage,MSG_OBJ_TYPE_TX);

    //
    //现在等待1秒钟,然后继续
    //
    DELAY _US(1000*1000);</s>1000
    }

    //
    //获取接收消息
    //
    CANMessageGet (Cana_base,1,&sRXCANMessage,TRUE);

    //传输故障的MCU将把ID存储在sRXCANMessage.ui32MsgID中
    //故障代码将在rxMsgData中可用

    }


    //
    //文件结束
    //

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

    目前,我正在开发一个应用程序,其功能如下:

    1)在DSP的ADC端口检测故障数据,该端口将传输到MCU1的接收器(RX)端口。

    2) MCU1将通过CAN总线将消息数据传输至MCU2。

    3) MCU2 TX端口将与DAC端口通信,DAC端口将能够执行特定功能(例如, 打开/关闭
    PWM信号)提供一个时间范围,以便纠正故障并重新启动操作。

    如果有人开发了上述任何应用程序,请给出建议。

    提前感谢。


    此致
    Sumanta