Простой 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()
{
}
@multifrag, 👍1
2 ответа
Только что заметил это, но если кто-то еще найдет это: у вас есть одна скорость CAN, установленная на 125kb на MCP2515, а другая на 100kb на VP230.
Вот почему ты ничего не получишь!
Марк
из таблицы данных ...Может работать со скоростью до 1 Мбит/с.
На SN65HVD230 и SN65HVD231 контакт 8 обеспечивает три различных режима работы: высокоскоростные, с регулировкой наклона и режимы с низким энергопотреблением. Высокоскоростной режим работы выбирается путем подключения контакта 8 к заземлению, что позволяет выходным транзисторам передатчика включаться и выключаться как можно быстрее без ограничений по наклону подъема и падения.
- Какие правильные контакты для TWAI (CAN) на ESP32?
- Как отобразить информацию о шине CAN на веб-сервере EPS32?
- Как отображать текст на OLED?
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi