Использование Arduino для чтения и записи данных на устройство RS232
У меня есть турбореактивный микродвигатель (JetCat P100-RX), который управляется электронным блоком управления (ЭБУ).
ЭБУ содержит много информации о двигателе. Я хочу получить доступ к этой информации, а также отправить команды на ЭБУ для управления двигателем.
ЭБУ подключается к устройству Mini I/O. Это подключение показано на следующем изображении:
Подробные сведения о последовательном соединении ECU и мини-плате ввода-вывода приведены на этой странице руководства. 4. (Я понимаю, что поток данных от Mini Board следует протоколу RS232.) Это выглядит так:
Я хотел бы собрать информацию с контактов Tx, Rx и GND с помощью Arduino Uno. Как я могу это сделать? Arduino подключен к моему ПК через порт USB.
EDIT1: Что я пытался сделать:
Я подключил Tx, Rx и GND мини-платы к контактам 10 и 11 Arduino и настроил 10 и 11 как последовательные контакты, а GND к Arduino GND (Rx и Tx соответственно) с помощью SerialSoftware следующим образом:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // прием, передача
void setup() {
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(57600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
// устанавливаем скорость передачи данных для порта SoftwareSerial
mySerial.begin(9600); // Установите 9600, как написано в руководстве (ссылка выше)
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
}
Моя принципиальная схема:
Но у меня ничего не выводится на Serial Monitor.
Читая в Интернете, я обнаружил, что мне нужен конвертер. После этих сообщений я купил MAX3232. Нужно ли мне это использовать? Как мне это использовать и какие изменения внести в свой код?
@Atharva, 👍2
Обсуждение1 ответ
Это относительно легко сделать. Если у вас есть Mega или другой Arduino с более чем одним последовательным портом, отлично. Если нет, тогда softwareserial — это то, что вам нужно. Для этого все основания должны быть соединены.
Softwareserial может одновременно принимать только один канал. На аппаратном уровне вы должны использовать приемник с высоким импедансом для мониторинга сигналов RX и TX. Я использую 74HC14 (74C914 рассчитан на +- 25 В на входе) или подобное устройство. Поместите резистор 50 кОм от RX к входу на IC, сделайте то же самое с TX к другому входу на IC. Входные защитные диоды 74HC будут ограничивать ток, при 50 кОм 50 В дает 1 мА.
Подключите выходы микросхемы к входам Arduino. Каждый вход необходимо настроить для приема асинхронного ввода с правильной скоростью передачи и другими параметрами. Я делал это много раз, и это прекрасно работает. Я всегда делал это с помощью UART, а не программного обеспечения. Обратите внимание, что устройство 74HC инвертирует сигнал, как это обычно бывает с RS232. Для Arduino доступны различные модули с USART, UART или аналогичным последовательным устройством.
Спасибо за ваш ответ. Пункт 1: Проверка software serial. Что значит "все" основания? Я вижу только 1 контакт GnD на мини-плате. Пункт 2: Я не понимаю, о чем вы говорите, напряжение на мини-плате 3,3 В, откуда 50 В? Параграф 3: Как настроить получение асинхронного ввода с правильной скоростью передачи данных? Можете ли вы показать код в качестве примера?, @Atharva
К чему подключается мини-плата. RS232 — это три провода, один для Tx, один для Rx и один для земли. Земли каждого блока должны быть соединены. То есть просто показать, что вход в ворота прочный. При 50В у вас будет 1 мА тока в защиту ВК, а не разрушить микросхему. Извините за код, его много для Arduino. В лучшем случае я мог только догадываться, поскольку у вас даже не закончен дизайн. Убедитесь, что вы указали правильное количество битов, правильную четность, правильное количество стоповых битов и, конечно же, скорость. Обычно это 9600,n,1 (9600 бод, без четности и 1 стоп., @Gil
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Искаженный серийный номер устройства GPS
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как читать и записывать на устройство rs232 с/на Arduino
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- myserial.available() возвращает нулевой байт
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
не вопрос конкретно про ардуино... у вас возник бы тот же вопрос, если бы вы использовали любой другой микроконтроллер... первое что нужно сделать, это определить уровни сигнального напряжения на выводах RxD и TxD, @jsotola
В руководстве к устройству указано, что TX и RX являются сигналами 3,3 В., @Wendall
@jsotola Да Действительно, контакты на 3,3 В. Теперь, куда мне двигаться отсюда? Я не электронщик ;), @Atharva
@Wendall Вы правы, в руководстве это сказано. Как мне теперь подключиться?, @Atharva
Поскольку вы не используете адаптер JetCat RS232 (который преобразует сигналы 3,3 В в уровни RS-232 (для чего потребуется MAX 3232), вы сможете напрямую подключиться к UART вашего Arduino. Как только он заработает с вашим ЗАТЕМ попытайтесь запустить его, используя последовательный порт, управляемый программным обеспечением. По моему опыту, программные порты работают нормально, но не очень хорошо и почти не работают, если я использую прерывания для своих целей. Поскольку это сигнал 3,3 В, вы МОЖЕТЕ нужно преобразовать их в 5 В. Погуглите немного, есть много способов сделать это.Есть также 3 В Arduinos, тогда он будет работать на 3 В., @Wendall
Поскольку интерфейс USB использует тот же UART Arduino, будьте осторожны, чтобы ничего не отправлять с вашего ПК на Arduino, или действительно используйте программный порт. Как уже упоминалось, он может работать нормально., @Wendall