跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1MD1 SENT解析EPS hella sent 1.65us信号

YTM32B1MD1 SENT解析EPS hella sent 1.65us信号

已定时 已固定 已锁定 已移动 YTM32B1M系列
can
9 帖子 3 发布者 460 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • YaojianyongY 离线
    YaojianyongY 离线
    姚见勇
    编写于 最后由 编辑
    #1

    YTM32芯片手册SENT解析 的1TICK在3us到90us之间,但是EPS hella传感器sent有两路了是1.65us的,是不是就不能解析?cec8fb37fc6a2b9fd083fb0ea53960ef.png 但是EPS的传感器信号时间小于3us 6517d626f765e22ff5c9ab3e7cee6535.png

    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      编写于 最后由 编辑
      #2

      可以支持,但是 SDK 不支持配置,需要自己手动修改寄存器来满足该 Tick 值,具体请参考 CH_CLK 寄存器描述
      1e0bbb86-1007-45a8-970a-366fe7eeb376-image.png

      1 条回复 最后回复
      0
      • YaojianyongY 离线
        YaojianyongY 离线
        姚见勇
        编写于 最后由 编辑
        #3

        那YTM32B1MD1只有两个SENT通道,但传感器的SENT是3路,那么只有更换为YTM32B1HA01系列来采集嘛?

        1 条回复 最后回复
        0
        • DigaD 离线
          DigaD 离线
          Diga
          编写于 最后由 编辑
          #4

          是的,MD1 只支持两路 SENT 通道,如果这三路 SENT 是同时发送数据,那 HA01 是更好的选择

          1 条回复 最后回复
          0
          • YaojianyongY 离线
            YaojianyongY 离线
            姚见勇
            编写于 最后由 编辑
            #5

            测试SENT例程只运行一次,请问怎么周期性采集SENT信号呢?

            1 条回复 最后回复
            0
            • HAIYANGH 离线
              HAIYANGH 离线
              HAIYANG YunTu
              编写于 最后由 编辑
              #6

              具体哪个demo,正常只要你SENT信号在发,中断就会一直进的,也能一直采集SENT信号的

              1 条回复 最后回复
              0
              • YaojianyongY 离线
                YaojianyongY 离线
                姚见勇
                编写于 最后由 编辑
                #7

                /* USER CODE BEGIN Header /
                /
                you can remove the copyright /
                /

                • Copyright 2020-2025 Yuntu Microelectronics Co., Ltd.
                • All rights reserved.
                • SPDX-License-Identifier: BSD-3-Clause
                • @file main.c
                • @brief

                */

                /* USER CODE END Header /
                #include "sdk_project_config.h"
                /
                Includes ------------------------------------------------------------------*/

                /* Private includes ----------------------------------------------------------/
                /
                USER CODE BEGIN Includes /
                #include "printf.h"
                /
                USER CODE END Includes */

                /* Private typedef -----------------------------------------------------------/
                /
                USER CODE BEGIN PTD /
                /
                USER CODE END PTD */

                /* Private define ------------------------------------------------------------/
                /
                USER CODE BEGIN PD */
                //#define INST_UART (0)

                #define CAN1_INST (0U)

                #define RX_STD_MSG_ID (0x03UL)
                #define RX_STD_MAILBOX (0x00UL)

                #define TX_MSG1_ID (0x133UL)
                #define TX_MAILBOX1 (0x01UL)

                #define TX_MSG2_ID (0x134UL)
                #define TX_MAILBOX2 (0x02UL)

                #define TX_MSG3_ID (0x135UL)
                #define TX_MAILBOX3 (0x03UL)

                #define LED_B_TOGGLE() (PINS_DRV_TogglePins(GPIOB, (pins_channel_type_t)1 << 4U))
                #define LED_R_TOGGLE() (PINS_DRV_TogglePins(GPIOE, (pins_channel_type_t)1 << 8U))

                /* USER CODE END PD */

                /* Private macro -------------------------------------------------------------/
                /
                USER CODE BEGIN PM /
                /
                USER CODE END PM */

                /* Private variables ---------------------------------------------------------/
                /
                USER CODE BEGIN PV */
                sent_raw_msg_t fastMessageBuffer;
                sent_raw_msg_t slowMessageBuffer;
                sent_fast_msg_t fastMessage[SENT_CH_COUNT];
                sent_slow_msg_t slowMessage[SENT_CH_COUNT];

                uint32_t fastMsgCnt[SENT_CH_COUNT] = { 0, 0 };
                uint32_t slowMsgCnt[SENT_CH_COUNT] = { 0, 0 };

                uint16_t SENT_T1,SENT_T2,SUM_T;

                flexcan_msgbuff_t rxStdMsg1;
                flexcan_msgbuff_t rxExtMsg1;

                //define can tx message
                flexcan_msgbuff_t txMsg1 = {
                .cs = 0U,
                .msgId = TX_MSG1_ID,
                .data[0] = 0x00,
                .dataLen = 1U,
                };

                flexcan_msgbuff_t txMsg2 = {
                .cs = 0U,
                .msgId = TX_MSG2_ID,
                .data[0] = 0x00,
                .dataLen = 1U,
                };

                flexcan_msgbuff_t txMsg3 = {
                .cs = 0U,
                .msgId = TX_MSG3_ID,
                .data[0] = 0x00,
                .dataLen = 1U,
                };

                const flexcan_data_info_t txMbStdInfo1 = {
                .msg_id_type = FLEXCAN_MSG_ID_STD,
                .data_length = 8,
                .fd_enable = false,
                .fd_padding = 0,
                .enable_brs = false,
                .is_remote = false,
                };

                //define can rx message
                const flexcan_data_info_t rxMbStdInfo1 = {
                .msg_id_type = FLEXCAN_MSG_ID_STD,
                .data_length = 8,
                .fd_enable = false,
                .fd_padding = 0,
                .enable_brs = false,
                .is_remote = false,
                };

                volatile bool canError = false;
                /* USER CODE END PV */

                /* Private function declare --------------------------------------------------/
                /
                USER CODE BEGIN PFDC /
                /
                USER CODE END PFDC */
                static void Board_Init(void);

                /* Private user code ---------------------------------------------------------/
                /
                USER CODE BEGIN 0 /
                /
                Callback for SENT handler */
                void sentNotification(uint32_t instance, uint32_t channel, sent_callback_type_t type, void *param)
                {
                (void)param;
                (void)instance;
                (void)channel;
                sent_fast_msg_t fastMsgDMA;
                sent_slow_msg_t slowMsgDMA;
                switch (type)
                {
                case SENT_CALLBACK_SLOW_DMA_RX_COMPLETE:
                SENT_DRV_GetSlowMsgFromRaw(&slowMsgDMA, &slowMessageBuffer);
                slowMessage[slowMsgDMA.channelNumber] = slowMsgDMA;
                slowMsgCnt[slowMsgDMA.channelNumber]++;
                break;

                    case SENT_CALLBACK_FAST_DMA_RX_COMPLETE:
                        SENT_DRV_GetFastMsgFromRaw(&fastMsgDMA, &fastMessageBuffer);
                        fastMessage[fastMsgDMA.channelNumber] = fastMsgDMA;
                        fastMsgCnt[fastMsgDMA.channelNumber]++;
                        break;
                
                    case SENT_CALLBACK_SLOW_RX_COMPLETE:
                        break;
                
                    case SENT_CALLBACK_FAST_RX_COMPLETE:
                        break;
                
                    case SENT_CALLBACK_RX_ERROR:
                        break;
                
                    default:
                        break;
                }
                

                }

                /* Printf current slow message and short message /
                void sent_print_msg(uint8_t ch)
                {
                PRINTF("
                ********* CH %d **********\n", ch);
                if (SENT_SLOW_TYPE_SHORT == slowMessage[ch].type)
                {
                PRINTF("Short message cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                slowMsgCnt[ch],
                slowMessage[ch].data,
                slowMessage[ch].timeStamp,
                slowMessage[ch].crc,
                slowMessage[ch].id);
                }
                else if (SENT_SLOW_TYPE_ENHANCED_4_BIT == slowMessage[ch].type)
                {
                PRINTF("Enhance message with 4-bit cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                slowMsgCnt[ch],
                slowMessage[ch].data,
                slowMessage[ch].timeStamp,
                slowMessage[ch].crc,
                slowMessage[ch].id);
                }
                else if (SENT_SLOW_TYPE_ENHANCED_8_BIT == slowMessage[ch].type)
                {
                PRINTF("Enhance message with 8-bit cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                slowMsgCnt[ch],
                slowMessage[ch].data,
                slowMessage[ch].timeStamp,
                slowMessage[ch].crc,
                slowMessage[ch].id);
                }

                PRINTF("Fast message cnt %d data = %x, TS = %x, crc = %x\n",
                       fastMsgCnt[ch],
                       fastMessage[ch].data,
                       fastMessage[ch].timeStamp,
                       fastMessage[ch].crc);
                

                }
                /* USER CODE END 0 */

                /**

                • @brief The application entry point.

                • @retval int
                  /
                  int main(void)
                  {
                  /
                  USER CODE BEGIN 1 */
                  status_t status = STATUS_SUCCESS;
                  uint8_t can1RxFrameCnt = 0;

                  /* USER CODE END 1 /
                  Board_Init();
                  /
                  USER CODE BEGIN 2 */
                  OSIF_TimeDelay(1000);

                  SENT_DRV_Deinit(0);

                  status |= FLEXCAN_DRV_ConfigRxMb(CAN1_INST, RX_STD_MAILBOX, &rxMbStdInfo1, RX_STD_MSG_ID);

                  /* Start receiving data in RX_STD_MAILBOX. */
                  status |= FLEXCAN_DRV_Receive(CAN1_INST, RX_STD_MAILBOX, &rxStdMsg1);

                  /* USER CODE END 2 */

                  /* Infinite loop /
                  /
                  USER CODE BEGIN WHILE */
                  while (1)
                  {
                  OSIF_TimeDelay(10);

                  SENT_DRV_Deinit(0);

                  txMsg1.data[0] = (fastMessage[0].data&0xff000000)>>24;
                  txMsg1.data[1] = (fastMessage[0].data&0xff0000)>>16;
                  txMsg1.data[2] = (fastMessage[0].data&0xff00)>>8;
                  txMsg1.data[3] = fastMessage[0].data&0xff;
                  txMsg1.data[4] = (fastMessage[1].data&0xff000000)>>24;
                  txMsg1.data[5] = (fastMessage[1].data&0xff0000)>>16;
                  txMsg1.data[6] = (fastMessage[1].data&0xff00)>>8;
                  txMsg1.data[7] = fastMessage[1].data&0xff;

                  //SENT_T1
                  txMsg2.data[0] = (fastMessage[0].data&0xff00)>>8;
                  txMsg2.data[1] = (fastMessage[0].data&0xf0)>>4;
                  SENT_T1 = (uint16_t)((uint16_t)txMsg2.data[0]+(((uint16_t)txMsg2.data[1])<<8));
                  //SENT_T2
                  txMsg2.data[2] = (fastMessage[1].data&0xff00)>>8;
                  txMsg2.data[3] = (fastMessage[1].data&0xf0)>>4;
                  SENT_T2 = (uint16_t)((uint16_t)txMsg2.data[2]+(((uint16_t)txMsg2.data[3])<<8));
                  SUM_T = SENT_T1+SENT_T2;
                  //SENT_P1
                  txMsg2.data[4] = (fastMessage[0].data&0xff00000)>>20;
                  txMsg2.data[5] = (fastMessage[0].data&0xf0000)>>16;
                  //SENT_P2
                  txMsg2.data[6] = (fastMessage[1].data&0xff00000)>>20;
                  txMsg2.data[7] = (fastMessage[1].data&0xf0000)>>16;

                  txMsg3.data[0] = SUM_T&0xff;
                  txMsg3.data[1] = (SUM_T&0xff00)>>8;
                  txMsg3.data[2] = 0;
                  txMsg3.data[3] = 0;
                  txMsg3.data[4] = 0;
                  txMsg3.data[5] = 0;
                  txMsg3.data[6] = 0;
                  txMsg3.data[7] = 0;

                  if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX1) != STATUS_BUSY)
                  {
                  status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX1, &txMbStdInfo1, TX_MSG1_ID, txMsg1.data);
                  }

                  if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX2) != STATUS_BUSY)
                  {
                  status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX2, &txMbStdInfo1, TX_MSG2_ID, txMsg2.data);
                  }

                  if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX3) != STATUS_BUSY)
                  {
                  status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX3, &txMbStdInfo1, TX_MSG3_ID, txMsg3.data);
                  }

                  if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, RX_STD_MAILBOX) != STATUS_BUSY)
                  {
                  can1RxFrameCnt++;
                  LED_B_TOGGLE();

                     /* Start receiving data in RX_STD_MAILBOX. */
                     status |= FLEXCAN_DRV_Receive(CAN1_INST, RX_STD_MAILBOX, &rxStdMsg1);
                  

                  }

                   /* USER CODE END WHILE */
                   /* USER CODE BEGIN 3 */
                  

                  }
                  /* USER CODE END 3 */
                  }

                static void Board_Init(void)
                {
                CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
                if(STATUS_SUCCESS != CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT))
                {
                /* USER CODE BEGIN ERROR_HANDLER 1 /
                SystemSoftwareReset();
                /
                USER CODE END ERROR_HANDLER 1 */
                }
                PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);

                // LINFlexD_UART_DRV_Init(INST_UART,&linflexd_uart_config0_State,&linflexd_uart_config0);
                // UTILITY_PRINT_Init();

                DMA_DRV_Init(&dmaState,&dmaController_InitConfig,dmaChnState,dmaChnConfigArray,NUM_OF_CONFIGURED_DMA_CHANNEL);
                SENT_DRV_Init(0,&sentUserConfig,&sentState);     
                
                FLEXCAN_DRV_Init(CAN1_INST,&flexcanInitConfig0_State,&flexcanInitConfig0); 
                

                }

                /* USER CODE BEGIN 4 */

                /* USER CODE END 4 */
                我参考SENT_DMA_DEMO和CAN DEMO做的,上电后CAN发送OK的,但是数据不再变化了。

                1 条回复 最后回复
                0
                • YaojianyongY 离线
                  YaojianyongY 离线
                  姚见勇
                  编写于 最后由 编辑
                  #8

                  b2ad8db10e59645395fb869e704d944c.png

                  1 条回复 最后回复
                  0
                  • YaojianyongY 离线
                    YaojianyongY 离线
                    姚见勇
                    编写于 最后由 编辑
                    #9

                    c2e07adb12c3efdb1ad70c69a4bf355a.png找到原因了,例程中这个函数是复位函数,不能去调用。解决了。

                    1 条回复 最后回复
                    0

                  • 云途开发生态介绍

                    快速上手云途开发生态

                  • 云途论坛规则/Yuntu Forum Rules

                    发帖前请查看

                  • YT CONFIG TOOL调查问卷

                    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                  • can
                    20
                    demo
                    20
                    uds
                    13
                    lin stack
                    10
                    md14
                    6
                    fbl
                    5
                    yt-link
                    5
                    adc模块
                    4
                    Online Users
                    DerrickD
                    Derrick
                    limanjiangL
                    limanjiang
                    jinyiJ
                    jinyi
                    qiuQ
                    qiu
                    z123456111Z
                    z123456111
                    NooBN
                    NooB
                    爪云爪
                    爪云
                    WKYW
                    WKY
                    AlexzA
                    Alexz
                    DJZD
                    DJZ
                    FrankieF
                    Frankie
                    • 登录

                    • 登录或注册以进行搜索。
                    • 第一个帖子
                      最后一个帖子
                    0
                    • 版块
                    • 最新
                    • 标签
                    • 热门