Не работает шаговый привод JSS57P1.5N + RS232 + Arduino

  1. Приобрел я вот такой шаговый привод: https://ivcnc.ru/index.php/kategorii/product/view/180/1544

Даташит:
https://docviewer.yandex.ru/?url=https://forum.duet3d.com/assets/uploads/files/1637110096898-jss57p-integrated-digital-hybrid-servo.pdf

  1. Попробовал поуправлять с компьютера с помощью утилиты ESS Tuner через адаптер USB/RS232 (CH340G). Всё работает.

  2. Зафиксировал скорость передачи данных 38400N1, команду Modbus проснифферил. 01 06 00 1C 00 02 C9 CD - запуск вращения по команде Parameter28 = 2 - это все соответствует даташиту.

  3. Попробовал Modbus-клиент на компьютере, передал эту команду через CH340G - работает.

  4. Взял Arduino Nano, пины 2 и 3 настроил как TX/RX, скорость 38400, команду подаю на шаговик через микруху SP3232EEN. Но шаговик не принимает команду.

  5. Ладно, меряю напряжение на TX (RS232) минус 8,5 В - довольно приличный уровень. И передача вроде идет, каждую секунду напряжение проваливается до -8,1 В.

  6. Подключил я этот RS232 к компьютеру через CH340G - он прекрасно видит ежесекундную передачу.

  7. Я даже UART подключал к компьютеру через другой переходник, но это уже лишнее.

  8. Поменял SP3232EEN на MAX3232, но это не помогло.

Ребят, подскажите, почему не работает RS232 от MAX3232? Никакой информации об уровнях напряжений в даташите на шаговик нет.

Встроенный USB-UART есть ?
Какой чип AVR распаян ?

Как такое возможно?

Вы бы схему привели и код, может кто чего и подскажет

Arduino Nano ESP32, два UARTа, но один из них я посадил конвертер UART/RS232.

это что за покемон

Официальнее некуда ))

Где на этой схеме ESP32 ???

ESP32 - это микроконтроллер на плате Arduino, ромбиком расположен.
Программирую так:

#include <SoftwareSerial.h>

const int stepper_drive_TX_pin = 2;
const int stepper_drive_RX_pin = 3;

String Modbus_command;
SoftwareSerial stepper_drive_RS232(stepper_drive_RX_pin, stepper_drive_TX_pin);


void setup() {
  stepper_drive_RS232.begin(38400);
}

void loop() {

  Modbus_command = (char) 0x01;
  Modbus_command += (char) 0x06;
  Modbus_command += (char) 0x00;
  Modbus_command += (char) 28;
  Modbus_command += (char) 0x00;
  Modbus_command += (char) 0x02;
  Modbus_command += (char) 0xC9;
  Modbus_command += (char) 0xCD;
  stepper_drive_RS232.print(Modbus_command);

  delay(1000);
}

Фото платы покажите ! Тот что ромбиком нарисован - Atmega328P …
Попробуйте поменять местами

const int stepper_drive_TX_pin = 3;
const int stepper_drive_RX_pin = 2;

Как вариант, попробуйте
stepper_drive_RS232.write(Modbus_command);

ATMEL конечно :smiley:

Если чип PB, то в нём есть второй аппаратный сериал …

Не работает write() со строкой. А как вы модбас с помощью write() поднимаете?

Сильно не вникал, глянул мимоходом.
Если будет время, позже посмотрю

Посылку modbus в String, а потом через print() лупить - вот это сильно ваще. Я прям чуть сознание не потерял от такого великолепия.

А по первопосту все так логично было…

А зачем Вам нужна строка?
Почему не передавать команды из массива, просто циклом for?

@Тайга
Так какая все-таки плата - классическая Нана или Нано ЕСП32? Если второе - почему на картинке в #7 обычная Нано?
И если у вас на плате два Уарт порта, зачем вам СофтСериал?

Да даже цикл не нужен для 9 байт.

Классическая, атмега. Извините запутал.

У меня второй порт занят для графики.