- ESP32 Dev Board
- CAN transceiver (either one):
-
- SN65HVD230 (3.3V)
-
- TJA1051T/3 (with 5V booster)
- 2x 120Ω resistors (bus termination)
- Length of 2 wire twisted cable (pair of CAT5E works great)
+- (5V) USB Power
+-----------------+ +------------------+ +---------------------+
| ESP32 | | SN65HVD230 Board | | Flatpack2 PSU |
| | | | | |
| | | | | AC (L) |
| | | | | AC (N) |
| 3.3V | ---- | 3.3V +- CAN_H | ---- | CAN_H -+ |
| | | 120Ω | | 120Ω |
| | | +- CAN_L | ---- | CAN_L -+ |
| GPIO 17 (TX2) | ---- | TX | | |
| GPIO 16 (RX2) | ---- | RX | | |
| | | | | DC +48V |
| GND | ---- | GND | | DC -48V |
| | | | | |
+-----------------+ +------------------+ +---------------------+
Important
2x 120Ω resistors: On each end of CAN twisted cable connecting CAN_H to CAN_L
Tip
If using TJA1051T/3 (Adafruit CAN PAL) connections stay the same, just connect SLNT (S) pin to GND
Warning
Please note that -48V is not connected to tranceiver or ESP32!
#define TWAI_TX_PIN GPIO_NUM_17 #define TWAI_RX_PIN GPIO_NUM_16 twai_general_config_t g_config = { .mode = TWAI_MODE_NORMAL, .tx_io = TWAI_TX_PIN, .rx_io = TWAI_RX_PIN, .clkout_io = TWAI_IO_UNUSED, .bus_off_io = TWAI_IO_UNUSED, .tx_queue_len = 10, .rx_queue_len = 10, .alerts_enabled = TWAI_ALERT_NONE, .clkout_divider = 0 }; twai_timing_config_t t_config = TWAI_TIMING_CONFIG_125KBITS(); twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
Current project has the ability to control flatpack2 via serial:
echo -ne '<CTFP,SET,4320,100,5800>' >/dev/ttyUSB0 echo -ne '<CTFP,DEF,5410>' >/dev/ttyUSB0
<CTFP,Start of messageSET/DEF: SET_OPERATION/DEFAULT_VOLTAGE-
SETVOLTAGE,CURRENT,PROTECTION
-
DEFVOLTAGE
>End of message
main.cpp
#define OLED_ENABLED true # Enable/Disable OLED screen #define CAN_ENABLED true # Enable/Disable CAN (loop() doesn't run) #define SCOM_ENABLED true # Enable/Disable Commands via Serial
Wouldn't have done anything without:
