Простой ESP32 MCP2515 МОЖЕТ кодировать VP230

У меня есть рабочий код, который использует модуль MCP2515 CAN. Хотел минимизировать размер необходимых модулей, поэтому я пошел с приемопередатчиком VP230 CAN, и у меня возникли проблемы с ретрансляцией одних и тех же данных через разные библиотеки. Все, что ему нужно сделать, это войти в систему с первым "payload1" и отправить инструкцию напряжения с "setdefaultvolt". Любая помощь будет очень признательна.

MCP2515 код:

#include <mcp_can.h>
#include <mcp_can_dfs.h>
#include <SPI.h>
#include <Wire.h>

//pins:
#define CAN_INT 17                                                                         // Set INT to pin 2
MCP_CAN CAN(5);                                                                         // Set CS to pin 4 (D2)

void setup()
{
  Serial.begin(115200);
  delay(100);
  pinMode(17, INPUT);                                                                       //Setting pin 2 for /INT input

START_INIT:
  if(CAN_OK == CAN.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ))
  {
  }
  else
  {
    delay(100);
    goto START_INIT;
  }
  CAN.setMode(MCP_NORMAL);                                                        //set operation mode to normal so the MCP2515 sends acks to received data.
  unsigned char payload1[8] = {0x16, 0x50, 0x71, 0x07, 0x97, 0x089, 0x00, 0x00};  //login data with serial number
  CAN.sendMsgBuf(0x05004804, 1, 8, payload1);                                     //send login data

  unsigned char setdefaultvolt[5] = {0x29, 0x15, 0x00, 0xFE, 0x10};              //this is the command for setting the default output voltage (Last two bytes, LSB first). 16 80 is the maximum voltage of 57.6 V
  CAN.sendMsgBuf(0x05019C00, 1, 5, setdefaultvolt);                              //send setup data
}

void loop()
{
}

Код VP230:

#include <CAN_config.h>
#include <ESP32CAN.h>

CAN_device_t CAN_cfg;

#include <SPI.h>
#include <Wire.h>

void setup()
{
  Serial.begin(115200);

  CAN_cfg.speed=CAN_SPEED_1000KBPS;
  CAN_cfg.tx_pin_id = GPIO_NUM_19;
  CAN_cfg.rx_pin_id = GPIO_NUM_23;

  CAN_frame_t my_frame;
  CAN_frame_t my_frame2;

  ESP32Can.CANInit();

  my_frame.FIR.B.FF = CAN_frame_ext;
  my_frame.MsgID = 0x05004804;
  my_frame.FIR.B.DLC = 8;

  my_frame.data = {0x16, 0x50, 0x71, 0x07, 0x97, 0x089, 0x00, 0x00};

  ESP32Can.CANWriteFrame(&my_frame);

  my_frame.FIR.B.FF = CAN_frame_ext;
  my_frame.MsgID = 0x05019C00;
  my_frame.FIR.B.DLC = 5;

  my_frame2.data = {0x29, 0x15, 0x00, 0xFE, 0x10};

  ESP32Can.CANWriteFrame(&my_frame2);

}

void loop()
{
}

, 👍1


2 ответа


3

Только что заметил это, но если кто-то еще найдет это: у вас есть одна скорость CAN, установленная на 125kb на MCP2515, а другая на 100kb на VP230.

Вот почему ты ничего не получишь!

Марк

,

1

из таблицы данных ...Может работать со скоростью до 1 Мбит/с.

На SN65HVD230 и SN65HVD231 контакт 8 обеспечивает три различных режима работы: высокоскоростные, с регулировкой наклона и режимы с низким энергопотреблением. Высокоскоростной режим работы выбирается путем подключения контакта 8 к заземлению, что позволяет выходным транзисторам передатчика включаться и выключаться как можно быстрее без ограничений по наклону подъема и падения.

,