-
Доброго времени. При управлении нагрузкой через ардуино по последовательному порту, очень часто возникает проблема: выдает ошибку «Ошибка при настройке параметров последовательного порта: 9 600 N 8 1». Нагрузкой является двигатель, который вращается в разные стороны. Пример кода:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0){
int val = Serial.read();
if(val==‘1’){ //если нажата 1, то вал двигателя вращается по часовой стрелке
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
Serial.println(«RIGHT»);
}
if(val==‘2’){//если нажата 2, то вал двигателя вращается против часовой стрелке
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
Serial.println(«LEFT»);
}
if(val==‘3’){ //если нажата 3, то останавливаем
digitalWrite(7,LOW);
digitalWrite(8,LOW);
Serial.println(«STOP»);
}
}
}Собственно говоря, не в коде дело. Дело в том, что эта ошибка постоянно возникает. Как ее решать даже не знаю. Двигатель подключен через реле. Параллельно управляющей обмотке стоит диод. Что интересно, данная проблема достает на 7 винде, а на 8 не так часто. По вашему опыту в чем может быть дело?
-
rkit, а с чем эти проблемы (с usb) могут быть связаны?
-
Питание для двигателя откуда берется?
-
127 В переменного напряжения
-
Со всем, что касается usb. Начиная от драйверов и заканчивая электромагнитным фоном в помещении.
Сначала проверьте последовательные порты. Загрузите Windows, но не подключайте плату Arduino или ESP8266. На рабочем столе щелкните правой кнопкой мыши (ПКМ) по ярлыку Этот компьютер (Компьютер). В меню выберите Свойства. В окне Система щелкните по ссылке Диспетчер устройств. В окне Диспетчер устройств откройте Порты (COM и LPT). Должен присутствовать последовательный порт COM1.
Теперь воткните в USB порт кабель от Arduino или ESP8266. В диспетчере устройств должен появиться дополнительный COM порт. Я подключил NodeMCU v3 и появился дополнительный порт COM3.
Если порт определился, но никаких сообщений в монитор порта не выводится, то проверьте скорость порта. В настройках Arduino IDE выставьте скорость порта ту, которая прописана в скетче. В окне монитора порта нажмите кнопку Очистить вывод. После этого монитор порта должен заработать.
Если ничего не изменилось и присутствует только порт COM1, то значит у вас проблемы с последовательным портом.
В этом случае при запуске скетча в окне выдается сообщение «Порт недоступен», «Ошибка подключения последовательного порта», «Порт не найден» и т.п. После этого начинаются пляски с бубном — отключаются и снова подключаются кабели, перезагружается компьютер. Иногда это помогает, иногда — нет.
Вероятная причина ошибки порта — помехи при передаче данных по USB кабелю. Как это не банально, но чаще всего причина в некачественном кабеле.
Поделюсь своим опытом. Тоже долгое время мучился с ошибкой порта, пробовал разные варианты — в общем, работало, но как-то нестабильно. Понадобился мне для чего-то кабель USB — microUSB. Пошел, купил в магазине предложенный мне такой кабель. Он работал, потом какое-то время валялся без дела. Чисто случайно подключил его к ESP8266. И, о чудо, скетч загрузился без проблем. Потом еще не раз редактировал скетч и каждый раз загрузка проходила без проблем. И тут я понял, вся проблема у меня была в некачественном кабеле. Так что не стоит экономить на кабеле, купите пусть более дорогой, но качественный кабель. Не используйте дешевые поделки, тем более кабели от зарядных устройств. В них жилы для передачи данных могут быть выполнены некачественно или вообще отсутствовать.
Вторая вероятная причина — слаботочный USB порт. Замените ненадёжный кабель и не используйте разбитые USB разъёмы.
По второй причине — недостаточно тока для питания Arduino или ESP8266. USB порт в материнской плате компьютера может быть запитан от источника с малым выходным током. Попробуйте самое простое — подключить Arduino к другому порту в надежде на то, он запитан от более мощного источника. Такое возможно, если USB портов несколько. Кардинальное решение — подключить Arduino или ESP8266 через USB хаб (USB — разветвитель) с внешним блоком питания с выходным током не менее 2 — 3 А.
Радиолюбители, умеющие паять, могут поступить проще — подпаять короткими проводами к разъему USB в параллель еще один разъем USB, в который завести от основного разъема два провода питания GND и +5В. Или купите такой кабель, если есть такая возможность. Такой прием используют фирмы, когда питания от одного разъема USB не хватает, например для питания жесткого диска, подключенного к порту USB (USB HDD). Таким образом устройство получит дополнительное питание от другого порта USB.
Ещё одно причина нехватки питания для портов USB — подключение к роутеру по Wi-Fi. Wi-Fi адаптер потребляет значительный ток и нагружает шину питания портов USB. В связи с этим отключите Wi-Fi адаптер и подключите компьютер к роутеру кабелем. Иногда это сразу может решить проблему.
Предпочтительно использовать компьютер с подключением клавиатуры и мыши к портам PS/2. Клавиатура и мышь с подключением по USB будут дополнительно нагружать шину +5В USB и питания для Arduino или Node MCU может не хватить. Отключите на время принтер, подключенный по USB, смартфон, подключенный по USB и другие устройства, подключенные к портам USB, без которых можно обойтись, так как они потребляют ток по шинам USB. Кроме того, они могут просто влиять на порты USB и вызывать сбои системы.
По возможности используйте десктоп с достаточно мощным блоком питания, который обеспечивает с запасом ток по шине +5В. Некоторые дешёвые материнские платы при подключении двух-трёх USB устройств уже начинают давать сбои.
Используйте короткий USB кабель, насколько это возможно. Это уменьшит помехи при передаче данных.
Не используйте USB удлинители, подключайте Arduino или ESP8266 непосредственно к USB портам компьютера на задней стенке системного блока. Не используйте USB разъёмы на передней панели системного блока или USB порты картридера. Они подключаются к материнской плате кабелями. Это увеличивает помехи при передаче данных.
Самый действенный способ снизить помехи это использовать USB кабель с ферритовыми фильтрами — цилиндрическими утолщениями из ферритовых колец на концах кабелей.
Фильтры бывают съемными, они надеваются на кабель и защелкиваются.
Можно изготовить фильтр самостоятельно. Возьмите ферритовое кольцо диаметром около 20 мм, притупите острые кромки наждачной бумагой, сделайте один виток кабеля вокруг сердечника и зафиксируйте кольцо на кабеле с помощью скотча или термоусадочной трубки.
Если использовать кольца небольшого диаметра, то никакой фиксации не понадобится. Например, я использовал два кольца, снятые с неисправной материнской платы. Только придется разрезать кабель и затем спаять его снова или припаять новый USB разъем.
Бывают ситуации, когда Arduino работает нормально, а при подключении ESP8266 появляются ошибки и скетч не работает. Такое может быть из-за того, что Wi-Fi передатчик модуля потребляет довольно значительный ток и для нормальной работы просто не хватает тока. Подключите ESP8266 через USB хаб с внешним блоком питания с выходным током 2-2.5-3 А. Также используйте для подключения короткие кабели с ферритовыми фильтрами на концах.
Желательно использовать Micro-USB или Mini-USB кабель с двумя USB разъемами на конце. Отвод с USB разъемом служит для подачи дополнительного питания. Радиолюбители могут без труда подпаять дополнительный USB разъем сами.
Если USB порты на материнской плате слабы по токам питания, то можно попробовать дополнительно подключить в PCI разъем контроллер USB. Подключите к этому контроллеру USB-мышь и USB-клавиатуру. К USB портам на материнской плате подключайте только Arduino или NodeMCU v3. К PCI разъему подводится более мощное питание. Один из таких контроллеров показан на фото:
Пробуйте подключаться к разным USB разъёмам компьютера, если их несколько, или разным разъёмам USB хаба.
Если ваш компьютер имеет порты USB2.0 и USB3.0, то пробуйте подключаться к тем и другим. Скорее всего лучшие результаты получите при подключении к USB2.0. Драйвер USB3.0 может работать некорректно.
Windows иногда просто не может определить порт. Проверьте контакты блока питания USB хаба в розетке сети. Если блок питания болтается, то о надёжной работе USB портов не может быть и речи.
Подключайте плату Arduino или ESP8266 в USB разъём после полной загрузки Windows.
При переключениях в другие порты номер порта может измениться. Проверяйте номер порта. В верхнем меню Arduino IDE выберите Сервис (Tools) -> Последовательный порт (Serial Port). Рядом с портом COM1 должен быть дополнительный порт. Поставьте галку, чтобы активировать его.
Работу COM порта и загрузку скетча визуально можно проверить по миганию светодиодов RX и TX на плате Arduino или по частому миганию светодиода рядом с Wi-Fi антенной на плате ESP8266 (NodeMCU v3).
Несмотря на все ухищрения, Windows 10 не открывает COM порт для Node MCU v3 (ESP-12E). Иногда подключает порт и тут же сбрасывает его и так без конца.
Подключил Node MCU v3 (ESP8266) через USB хаб с внешним блоком питания к компьютеру с Windows XP SP3. Установил драйвер ch341ser.exe и Arduino IDE 1.6.5. COM порт определяется и работает. В Windows XP COM порты определяются более надёжно. Проверил это на двух компьютерах с Windows XP с Intel и AMD процессорами.
Однако некоторые скетчи уже не используют приложения Win32 и при компиляции выдаётся ошибка. В этом случае потребуется как минимум 64-разрядная Windows 7.
COM порты виртуальные и, как в любой программе, возможен сбой при определении порта.
Семипортовые USB хабы (разветвители), как пишут в интернете, имеют две микросхемы по 4 порта. Последний порт первой микросхемы используется для подключения второй микросхемы. В итоге получается 3+4 порта. Можно попробовать подключать Arduino или Node MCU в разные порты хаба.
В Windows откройте Диспетчер устройств, раскройте Порты (COM и LPT). Не закрывайте это окно. Начинайте пробовать разные кабели, разные порты и разные варианты подключения оборудования и, как только порт надёжно определится в Диспетчере устройств, запомните эту конфигурацию оборудования.
И последнее и, может быть, самое главное. Большинство бестрансформаторных блоков питания (зарядных устройств), выполненных в корпусе-вилке, не обеспечивают заявленных характеристик. Например, у зарядного устройства 5V 2.1А, показанного ниже, при токе 0,9 А напряжение на выходе падает до 3,8 В. Сомневаюсь в том, что такой блок питания вообще может отдать в нагрузку ток 2А.
При подозрениях на проблему с питанием используйте трансформаторный блок питания. По габаритам он будет намного больше, зато надежно обеспечит расчетные ток и напряжение.
Рекомендации по блоку питания (из книги «Неисправности вашего ZX SPECTRUM» С.-Петербург, 1991):
«Советуем Вам выбрать самую простую, но и самую надежную схему: трансформатор — диодный мост — конденсатор фильтра — микросхема КР142ЕН5А в стандартном включении — блокировочный конденсатор.
Не стремитесь к чрезмерной миниатюризации! Трансформатор должен иметь мощность не менее 15 Вт, провод вторичной обмотки диаметр не менее 0,7 мм и напряжение на вторичной обмотке под нагрузкой 7-8 Ом должно быть 9-10 В.
Диодный мост подойдет любой из серий КЦ402, КЦ405. Конденсатор фильтра должен быть не менее 4000 мкФ, а рабочее напряжение — не ниже 16 В. На выходе ЕН5А поставьте блокировочный конденсатор 100-200 мкФ на 10-16 В. После сборки БП проконтролируйте напряжение на входе ЕН5А при подключенной нагрузке 5 Ом — должно быть 10,5-11 В.
Если это не так — отмотайте или домотайте несколько витков вторичной обмотки трансформатора. Затем проконтролируйте под нагрузкой 5 Ом напряжение на выходном разъеме БП — должно быть 4,9 — 5,1 В. При низком напряжении придется взять более толстый провод для подсоединения разъема.
При окончательной проверке БП посмотрите на осциллографе переменную составляющую напряжения на пределе 10 мВ (под нагрузкой 5 Ом) — заметных отклонений от прямой линии не должно быть.
В случае неудачи емкость фильтрующего конденсатора нужно увеличить.
Наконец, позамыкайте выход БП накоротко и убедитесь, что ЕН5А не выходит из строя.»
Вместо диодного моста КЦ можно применть более компактный диодный мост DB157S.
Некоторые экземпляры ЕН5А имеют на выходе напряжение чуть меньше 5 В. Для регулировки выходного напряжения соберите блок питания по схеме:
Номиналы резисторов R1 и R2 вы можете рассчитать сами. Например, после мостика на конденсаторе фильтра под нагрузкой у вас получилось напряжение 15 В. Напряжение на стабилитроне составит 3-3,3 В. Значит на резисторе R1 должно упасть 15 — 3 = 12 В. Ток стабилитрона КС133А 10 мА, т. е. 0,01 А. По закону Ома R = V/I. R = 12/0.01= 1200 Ом = 1,2 кОм. Также можно попробовать стабилитрон КС119А (напряжение стабилизации 1,9 В). Резистор R2 можно взять сопротивлением раза в три больше, чем R1, чтобы не так сильно шунтировал стабилитрон. R2 будет 3 — 3,6 кОм. Мощность рассеивания тоже рассчитывается по закону Ома. Резистор 0,25 Вт будет с большим запасом по мощности рассеивания. Для регулировки напряжения удобно использовать подстроечный многооборотный резистор СП5-3 или аналогичный.
Аккуратнее с регулировкой напряжения, а то выведите из строя само устройство. Вначале для проверки блока питания подключите нагрузку — резистор 5 Ом 5 Вт. Ток нагрузки будет 1 А. Резистором R2 установите напряжение на выходе + 5,0 ÷ 5,25 В.
Для повышения напряжения на выходе есть более простой вариант — включить в разрыв между выводом ЕН5А и общим проводом диод Д9Б. Так сделано в блоке питания для компьютера Специалист — М (ж. «Моделист-конструктор» № 4, 1991 г.)
Если вы хотите получить выходной ток 2 А, то вместо моста КЦ используйте четыре диода КД202. Также можно соединить «этажеркой» в параллель два мостика КЦ405, спаяв одноименные выводы между собой. Тогда вторичную обмотку выберите с проводом потолще. ЕН5А прикрепите к радиатору достаточных габаритов. О расчете трансформатора блока питания можно прочитать на странице Простейший расчет силового трансформатора. Сейчас проще подобрать трансформатор из готовых, например в ЧИП и ДИП. При этом учтите то, что входное напряжение КР142ЕН5А должно быть в диапазоне 7,5В < Vвх < 15В.
Если описанные меры не помогают и виртуальный COM порт не появляется или в Диспетчере устройств Windows строка виртуального порта все-таки появляется, помеченная желтым знаком вопроса (восклицательным знаком), то скорее всего проблема с драйвером CH340. Щелкнув по строке правой кнопкой мыши и выбрав Свойства, можно увидеть сообщение о том, что драйвер не подписан цифровой подписью. Попробуйте скачать другие версии драйвера CH340 (с разной длиной файла) и по очереди устанавливать их, удаляя старые версии.
Например, мне для Node MCU v.3 в Windows 7 максимальной подошел драйвер driver_ch340_341_arduino.exe (235 kb). Плата Node MCU v.3 подключена к контроллеру USB, который установлен в PCI разъем материнской платы.
На этом же ресурсе https://myrobot.ru/ можно скачать драйвер CH340 (480 kb) для Windows, Mac OS и Linux.
Если есть подозрения на глюки системы, то тогда можно попробовать переустановить систему Windows.
Если все описанные меры не дали надежного результата, то скорее всего ваш системный блок имеет слаботочные порты USB и маломощный блок питания. Тут может помочь замена материнской платы и блока питания на более мощные, т.е по сути нужен новый системный блок.
Резюме
Чтобы устранить ошибки последовательного порта —
► используйте для питания Arduino или ESP8266 USB порты с достаточным выходным током или USB хаб с внешним блоком питания.
► используйте для подключения короткие USB кабели с ферритовыми фильтрами около разъемов.
► попробуйте разные версии драйвера CH340, если не поможет — тогда другую версию Windows.
► используйте качественный кабель со всеми сигнальными жилами, а не кабель от зарядного устройства.
Последнее редактирование 23 мая 2023 г.
Использованные ресурсы
https://wm-help.net/lib/b/book/1248084587/4
https://masterpaiki.ru/top-10-samyih-chastyih-neispravnostey-zhk-monitorov.html
https://www.dns-shop.ru/product/3a24983fdab4526f/usb-razvetvitel-ginzzu-gr-487ua/opinion/
https://kiloom.ru/spravochnik-radiodetalej/microsxema/k142en5a-k142en5b-k142en5v-k142en5g-kr142en5a-kr142en5b-kr142en5v-kr142en5g.html
System information
- Have I written custom code (as opposed to using a stock example script
provided in TensorFlow): tensorflow/tensorflow/lite/micro/examples/person_detection/ - OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
- Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue
happens on a mobile device: - TensorFlow installed from (source or binary):
- TensorFlow version (use command below): 1.14
- Python version:3.6
- Bazel version (if compiling from source):
- GCC/Compiler version (if compiling from source):
- CUDA/cuDNN version:
- GPU model and memory:
- Exact command to reproduce:
Describe the problem
When I load the person detection example code in Arduino IDE, it works perfectly.
But, for my custom dog detection model, I re-implement all steps as defined in this article. This custom dog detection model trained successfully and also able to generate .cc model file. But, when I replace person_detect_model_data.cpp file with my dog_model, it throw the below error message when I click on serial monitor.
Can someone help me to solve my issue?
Thanks a lot,
Bhavika
Source code / logs
Sketch uses 428728 bytes (43%) of program storage space. Maximum is 983040 bytes.
Global variables use 127600 bytes (48%) of dynamic memory, leaving 134544 bytes for local variables. Maximum is 262144 bytes.
Device : nRF52840-QIAA
Version : Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]
Address : 0x0
Pages : 256
Page Size : 4096 bytes
Total Size : 1024KB
Planes : 1
Lock Regions : 0
Locked : none
Security : false
Erase flash
Done in 0.000 seconds
Write 428736 bytes to flash (105 pages)
[==============================] 100% (105/105 pages)
Done in 17.794 seconds
Error while setting serial port parameters: 9,600 N 8 1
Loading
Offline
Зарегистрирован: 25.08.2016
Есть ардуино UNO на CH3400, к нему подключен 8 ми канальный 5ти вольтовый модуль реле.
Через простеньку программу написанную в делфи передаю 1 байт в ардуино, число от 1 до 8. Ардуино включает на 1 секунду одно из 8 ми реле.
Без нагрузки на реле все работает отлично. При подключении нагрузки в модуль реле, а именно 12ти вольтовый электромагнитный замок, запитанный от отдельного компьютерного блока питания, вся система срабатывает ровно 1 раз. Далше при попытке передать повторно данные программа на компе ругается:
«writefile function failed win error code 31»
Оживить систему помогает переподключение ардуинки. Похоже что вешается ком порт. Монитор порта тоже не может поключится, пишет ошибку «Ошибка при настройке параметров последовательного порта: 9 600 N 8 1»
Подскажите в чем может быть проблема? Я никак не могу понять как подключение нагрузки к выводам реле может повлиять на работу ком порта? Пробовал разные блоки питания (компьютерные). Пробовал разные компоненты для делфи, результат один.
Код ардуинки
int pin[] = {2,3,4,5,6,7,8,9}; // Объявляем массив в котором указанны номера выводов byte i; void setup() { // Запускаем цикл, в котором определяем контакты 2-9 как выводные for (int t = 0; t < 8; t++ ) // > { pinMode(pin[t], OUTPUT); digitalWrite(pin[t], HIGH); } Serial.begin(9600); // Инициализируем перередачу данных по COM-порту на скорости 9600 бод } void loop() { // Запускаем цикл без каких либо действий // Только когда данные придут на COM-порт продолжится выполнение программы дальше этой строки while (Serial.available() == 0); // Данные пришли, считываем их в переменную i i = Serial.read(); //Serial.print("Poluchil"); i--; digitalWrite(pin[(i)], LOW); // включаем реле delay(1000); digitalWrite(pin[i], HIGH); // выключаем реле Serial.println(i); // отправляем ответ что все прошло успешно }
В делфи использую компонент CPortLib, пробовал еще CommPortDriver.
Буду рад любым советам и помощи.