Arduino + CAN bus mcp2515
- Войдите на сайт для отправки комментариев
Здравствуйте, ребята.
1) Имею китайский контроллер для управления электродвигателем
2) Китайская программа для Windows которая подключается по CAN через USB преобразователь (в комплекте)
У которого есть CAN-L, CAN-H, GND, GND, RX, TX, VCC
3) Контроллер не отсылает статус двигателя (обороты) без предварительного запроса, программа посылает пакет, контроллер отвечает.
Мои инструменты:
1) Arduino (UNO, Mega)
2) mcp2515
3) Использую "Правильную библиотеку" и использую setBitrate(CAN_500KBPS, MCP_8MHZ);
(https://github.com/autowp/arduino-mcp2515)
В чём у меня трудность и проблема:
1) Я соединил (мне кажется правильно) mcp2515 по схеме с Arduino
2) Я параллельно подключил CAN-L/CAN-H от китайского контроллера (п.1) к USB преобразователю и mcp2515
3) Используя Sketch для Read packet (чтения пакетов), я должен увидеть пакеты которыми обменивается USB преобразователь с контроллером, но к сожалению при подключении ничего нет, более того, при попытке включения mcp2515 в цепь с USB, программа тоже перестаёт коммуницировать с контроллером электродвигателя.
Я не понимаю:
1) Можно ли параллелить провода CAN-L, CAN-H?
2) Можно ли одновременно читать трафик mcp2515
3) Пакеты снифать мне не нужно, а вот can_id я не знаю как получить.
(Ранее этот контроллер работал по RX/TX и проблем с обменом не было, но сейчас производитель перешёл на CAN Bus и ввёл меня в ступор!)
Я предпринял попытку использовать CAN_Hacker v2, используя Arduino, но пакеты при подключенном состоянии не отображаются...
Мне нужны ваши советы и помощь ребята! Спасибо!
CAN адаптеры, в сущности, все параллельно соединяются.
Если просто незапитанный модуль на шине оставить - тоже обмен прекращается?
Здравствуйте, если убрать VCC, GND с модуля MCP2515, то обмен данными в Windows программе - работает, а в Arduine по-прежнему нет входящих данных.
Джампер рядом с клеммником попробуй замкнуть.
rkit, здравствуйте, попробовал поставить перемычку на J1, ничего не изменилось.
Методом тыка поставил mcp2515.setListenOnlyMode(); вместо normalMode.
Получил ответ (уже что-то есть, лучше чем ничего):
Китайская программа параллельно обновляет статус (работает). :)
Arduino кроме этого пакета ничего не увидел
H и L замкнуть? Оригинальный совет.
Нет, он имел ввиду J1 )))
Я правильно понял, не переживайте xDDD
ListenOnlyMode - это правильный ход для сниффера. В противном случае 2515 будет слать ACK и может портить обмен.
J1 - это терминатор. Лишний резистор на линии не нужен.
sadman41, rkit
Ребята спасибо за моральную и физическую поддержку.
Я помучался еще часок, и решил просто попробовать сменить на другой (благо заказал их 4шт)
Подключил и всё заработало xDDD, спасибо нашим братьям Китайцам.
Ребята, пользуясь случаем, задам вопрос.
Каким образом узнать скорость bitrate ?
Никакой документации естественно нет, из готовых:
Соответственно из этих скоростей ни одна не подходит, потомучто пакет приходит кривой (не полный или вообще не такой).
Единственная зацепка, которая у меня есть - это упоминание о "buadrate" в 115200.
Пощупать осциллографом, измерить самый узкий импульс, из него высчитать. Бодрейт это не то и выбор не сужает.
Ребят, ну какая-то чертовщина.
Вообщем суть такова, я написал китайцам, уточнил у них bitrate, ответили 250.
Окей, установил:
Результат:
Если поставить 500KBPS, данные начинают идти, на 8MHZ, но пакет совершенно некорректный
И теперь самое интересное, меняю я на 16Mhz
И данные начинают тоже ходить и тоже некорректные.
-------
Теперь вопросы:
1) Какую библиотеку вы используете для работы с CAN и 8Mhz кварцем?
2) Почему на одном битрейте работает, на другом вообще молчит
3) VCC/GND всё-таки нужно подключать по схеме или нет? Потому-что с подключенным VCC/GND от 5V порта, перестаёт слать вообще что-либо
4) Давайте еще раз проверим подключение: (Верно?)
Arduino UNO:
INT (PIN2)
SCK (PIN13)
SI (PIN11)
SO (PIN12)
CS (PIN10)
Я даже предпринял попытку на второй плате поставить 16.000Mhz кварц HC-49S, но пакеты с ним вообще перестали ходить даже мусорные. (https://www.chipdip.ru/product/16mhz-hc-49s)
Помогите, пожалуйста, ребята.
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA...
rkit,
Там не то чтобы порядок байт нарушен, там вся целостность их нарушена. :))))))
Байты вообщем какие-то мусорные приходят, формат пакета, который должен придти я заранее знаю.
gnd и VCC на модуль mcp2515 само собой нужно подключать . Подключите по CAN два модуля 2515 между собой (на одной джампер j1 поставить) , добейтесь устойчивых приема и отправки пакетов на 250 кбит/сек скорости, потом уже подключайте к шине мотора. Что за мотор то?
MaksVV,
VOTOL контроллер и двигатель QSMotor
и попробуйте без ListenMode , должно работать и без него .
и после изменения любых настроек пересбрасывать питание на модуле mcp2515
Пробовал, не помогло,
Я попробую последовать совету и сделать CAN обмен между двумя ARDUINO
вот отсюда попробуйте библиотеку, может действительно дело в ней. Там ещё одна кстати есть. POSL называется что то такое
вот отсюда попробуйте библиотеку, может действительно дело в ней. Там ещё одна кстати есть. POSL называется что то такое
Сейчас попробую.
Не помогло, я пересобрал по вашей ссылке на NANO, результаты теже самые 1 в 1
Библиотека используется кстати тажа самая)))) Сейчас попробую POSL
MaksVV,
Скетч скомпилился и загрузился, ошибок нет. Запустил CAN Hacker согласно примеру. Выбрал порт, выбрал LISTEN ONLY 115200 / 250Kbit, нажал CONNECT, подключилось, но входящие пакеты не видит ))))
Пойду убьюсь наверно... :)))
У меня есть еще подозрение что мои модули MCP2515 с браком, ну или я ))))
Проверил POSL библиотеку.
И тишина. :)
Причём что 16Mhz ставить что 8Mhz всё равно показывает что всё ок. :)
Завтра всё-же осталось проверить Aduino<=> CAN <=> Arduino
Чтобы ответить наверняка себе на вопрос, проблема:
1) во мне
2) в модулях
3) в псевдо-CAN-е китайского контроллера
Мне дохлые или фейковые модули такого вида не попадались. 125...500кбпс между ними вполне себе ходили через 100м UTP. По стандарту терминаторы должны стоять на обоих концах шины. Без них вообще ничего не ходило, с одним активированным бывали разные непонятные ситуации.
Библиотеку юзаю ту же самую, от autowp, с небольшим допилингом по иниту - сбросом масок и фильтров.
Мне дохлые или фейковые модули такого вида не попадались. 125...500кбпс между ними вполне себе ходили через 100м UTP. По стандарту терминаторы должны стоять на обоих концах шины. Без них вообще ничего не ходило, с одним активированным бывали разные непонятные ситуации.
Библиотеку юзаю ту же самую, от autowp, с небольшим допилингом по иниту - сбросом масок и фильтров.
Через несколько дней отпишусь, когда придут другие модули.
Самому теперь интересно....
Предварительное продолжение истории:
Собрал схему Arduino CAN <=> Arduino CAN
Приёмник входящих пакетов не видит :DDDD
Вывод: Модули не рабочие. xD Жду пару дней получения новых и пробую снова.
Продолжение истории :)
Пришли новые модули. Поменял их в схеме с неисправными местами.
---
Всё работает. Спасибо, всем кто не остался в стороне и попытался помочь!
Ребята, такой вопрос.
Китайцы мне еще помогли с спецификацией передачи.
Длина пакета и сам пакет идут неверными, с чем может это быть связано?
(Между двумя Arduino всё ок)
Есть предположение, что связано это с Extend ID (29 bit). Вероятно, что библиотечка работает со стандартным ID (11bit).
Есть из готовых решений что-то?)))
От чего отталкиваться?
Сейчас попробую: https://github.com/coryjfowler/MCP_CAN_lib
sadman41,
Подскажите пожалуйста частота должна быть 16Mhz или всё-же 8Mhz? На самом резонаторе написано 8000
Если на кварце 8, то и в библиотеке 8. Кварц под библиотеку не умеет подстраиваться.
Тогда я ничего не понимаю.
Если соединить по CAN две ардуины между собой :
То На 16Mhz коммуникация между Arduino работает, на 8Mhz нет - пакет некорректный.
При этом на кварце написано 8000
Не знаю. Я ставил 8 и работало на 8.
Autowp библиотека умеет читать extended id?
Если да, то что нужно установить для этого?
умеют по идее обе либы читать 29бит ID, берите из моей папки они обе читают. А вот отправлять 29 бит немного отличается от 11 бит в обоих либах. Кварц если 8 то везде в библиотеках и ставьте 8 . И попробуйте листенонли убрать. У меня вроде были глюки в этом режиме .
вот как отправлять 29 бит в обоих библиотеках
умеют по идее обе либы читать 29бит ID, берите из моей папки они обе читают. А вот отправлять 29 бит немного отличается от 11 бит в обоих либах. Кварц если 8 то везде в библиотеках и ставьте 8 . И попробуйте листенонли убрать. У меня вроде были глюки в этом режиме .
Стандартный пример не работает на установленных 8Mhz,
При этом корректно работает на 16Mhz, при этом кварц 8000
значит где то что то не так. Должно работать на 8 мгц. Не забывайте питание пересбрасывать при изменении настроек
MaksVV, простите, не нарушая правил можно с вами связаться по Telegram/Skype и тд? (не бесплатно)
@semenich отпишитесь пжлст
Отписал вам на почту
Спасибо MaksVV, sadman41 за помощь с советами.
----
Собрал на основе http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-i-mcp2515-can?page=2
Arduino < CAN > Arduino с передачей массива Extended ID, завелось без проблем
----
Но при подключении китайского контроллера по USB к Windows и Arduino в разрез его CAN-L, CAN-H - тишина.
Но при подключении китайского контроллера по USB к Windows и Arduino в разрез его CAN-L, CAN-H - тишина.
К этому стоит добавить, что не просто тишина, а подключение Arduino в разрез USB адаптера (в комплекте с контроллером) с CAN-L, CAN-H к Windows программе - начинает также препятствовать ее (программе) работе!
Не в разрез, а параллельно, наверное?