Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Драйвер CAN
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
upc2
Создал драйвер для CAN.
Все уровни соответствуют стандарту.
Посчитал, что дифференциальный усилитель не обязателен.
Приемный транзистор четко переключается при переходе
из Recessive в Dominant и наоборот.Однако MCP2510
выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что
все это связано с протоколом.Где-то я его не дочитал.
Andy Mozzhevilov
Цитата(upc2 @ Oct 13 2005, 13:36)
Создал драйвер для CAN.
Все уровни соответствуют стандарту.
Посчитал, что дифференциальный усилитель не обязателен.
Приемный транзистор четко переключается при переходе
из Recessive в Dominant и наоборот.Однако MCP2510
выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что
все это связано с протоколом.Где-то я его не дочитал.
*


а сколько устройств сейчас на шине?
upc2
Создал 2 примочки LPT. Вообщем соеденены 2 компьютера.
spf
Цитата(upc2 @ Oct 13 2005, 13:36)
Создал драйвер для CAN.
Все уровни соответствуют стандарту.
Посчитал, что дифференциальный усилитель не обязателен.
Приемный транзистор четко переключается при переходе
из Recessive в Dominant и наоборот.Однако MCP2510
выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что
все это связано с протоколом.Где-то я его не дочитал.
*


Хм, я зачем этот весь огород, да еще на таких "крутых" транзисторах? 315/361

Если уж диф. схема не нужна то проще сделать на простом открытом коллекторе...

На какой скорости проводятся опыты?

Без драйвера работает? (Одна подтяжка к +5 , диод в цепи TX, катодом к ТХ, анод к RX, RX к подтяжке...)
Andy Mozzhevilov
не совсем понятен смысл 2 транзисторов в передатчике, поскольку диф-сигнала в линии они не создадут, проще уж применить схему просто с открытым коллектором.

Далее, нужно взять 2х лучевой скоп и посмотреть сигнал Tx и Rx на передающем конце. Приемный конец должен генерить доминантный ACK в соответствующем месте.
В общем нужно определить, принимает ли и подтверждает приемник, и дело только в передатчике, или приемник не принимает.
Возможно дело в правильности настройки CAN контроллера.
upc2
Хм, я зачем этот весь огород, да еще на таких "крутых" транзисторах? 315/361

Если уж диф. схема не нужна то проще сделать на простом открытом коллекторе...

На какой скорости проводятся опыты?

Без драйвера работает? (Одна подтяжка к +5 , диод в цепи TX, катодом к ТХ, анод к RX, RX к подтяжке...)

*

[/quote]

Драйвер всетаки нужен.Но это потом.Хочу соединить 2 компьютера.
Скорость можно задавать из приложения.Ни на одной не идет.
При начале передачи выдает ошибку линии.
Сейчас проверю ваше предложение.Может я уже спалил микросхемы.
upc2
Цитата(Andy Mozzhevilov @ Oct 13 2005, 14:02)
не совсем понятен смысл 2 транзисторов в передатчике, поскольку диф-сигнала в линии они не создадут, проще уж применить схему просто с открытым коллектором.

Далее, нужно взять 2х лучевой скоп и посмотреть сигнал Tx и Rx на передающем конце. Приемный конец должен генерить доминантный ACK в соответствующем месте.
В общем нужно определить, принимает ли и подтверждает приемник, и дело только в передатчике, или приемник не принимает.
Возможно дело в правильности настройки CAN контроллера.
*


Эту схему я скопировал с MCP2551 и 82250 .Уже около года не могу
приобрести эти микросхемы.Вот и взялся городить огород.Кончно будут и
транзисторы другие, и операционник на входе.Как только соединю 2
компьютера, так дело пойдет быстрее.Все сигналы соответствуют
стандарту.А , что значит правильность настройки CAN?В режиме зацикливания
все работает прекрасно.
Andy Mozzhevilov
Цитата(upc2 @ Oct 13 2005, 16:32)
стандарту.А , что значит правильность настройки CAN?

CAN контроллер же программируется. Это действо может содержвать ошибки.
Поэтому предположение, что если принимающий контроллер не отвечает (то есть не подтверждает прием кадра в поле ack), то возможно что-то с настройкой контроллера.
Если он отвечает, то возможно что-то со схемотехникой драйверов. Нужно посмотреть задержки распространения сигнала ack от приемника, через его драйверы, через драйверы передатчика и на вход rx передатчика. Задержка на распространение сигнала должна укладываться в определенные границы, которые зависят от скорости обмена и настройки can контроллера.

Цитата
В режиме зацикливания
все работает прекрасно.
*
spf
Цитата(upc2 @ Oct 13 2005, 16:32)
Эту схему я скопировал с MCP2551 и 82250 .Уже около года не могу
приобрести эти микросхемы.
*


Дык 82250 уже лучше и не ждать, выбери из TJA1050-TJA1054.
spf
Или примени драйвер 485-го интерфейса.

PS:
Не надо изобретать велосипед.

Нажмите для просмотра прикрепленного файла
upc2
Вы правы.В петлевом режиме контроллер сам формирует сигнал ACK для
передатчика.И поэтому ошибки "Посылка с ошибкой"в режиме зацикливания нет. Наверно дальше надо соединять два контроллера.Но все время есть
ошибка "Ошибка на линии". Это я анализирую регистр CANINTF.
Проверка на себя,как было предложено выше, не помогла.
spf
Вот так должно работать, на небольшом расстоянии между CAN-контроллерами. (При R=5К и скорости 125Кбит)

Код
          +5v
            |
----        R
   |        |
TX ----|<|--*
   |        |
RX ---------*  
   |        |
----        |
GND--|      |
     |      |
     |      |
       ...
     |      |
     |      |
GND--|      |
----        |
   |        |
TX ----|<|--*
   |        |
RX ---------  
   |
----


Необходимо включить и настроить один узел на прием ВСЕХ пакетов на определенной скорости.
Другим попытаться передать на той же скорости.

Не использовал MCP2510, настроек регистров не подскажу.
Может стоит поискать в инете примеры с исходниками, в которых используется применяемый контроллер?


PS:
Для связи между PC желательна не диф. схема, а схема с гальванической развязкой, иначе по общему проводу будут помехи(особенно если PC вклющены в разные фазы), которые могут приводить к ошибкам.

Для подавления помех можно попробовать зашунтировать сигнальную линию небольшой емкостью на каждом контроллере. (Это касается приведенной выше схемы).
Andy Mozzhevilov
Цитата(upc2 @ Oct 13 2005, 17:56)
Вы правы.В петлевом режиме контроллер сам формирует сигнал ACK для
передатчика.И поэтому ошибки "Посылка с ошибкой"в режиме зацикливания нет. Наверно дальше надо соединять два контроллера.

Так они еще не соединены, что ли? :-O
Я же первым вопросом это спросил.
Если контроллер на шине только 1, ему никто ничего не подтверждает, поэтому он и не может ничего передать.
upc2
Можно сказать , что два компьютера соединены по схеме которую я
привел.Линия и устройства питаются от отдельного источника.При передаче по осциллографу видно, что все правильно.
Ориентируюсь на AN228 с сайта Microchip.Управляю своей версией
Kit 2510.Использую их MCP2510.DLL. Вроде все работает.В петлевом
режиме все пишется и передается.Фильтры и маски настроены на прием всех сообщений.Но все время ошибка линии.Может на входе используется и третье состояние?Кто может сказать , что должно быть на выводе RX драйвера шины
сейчас попробую соединить напрямую по схеме spf.Компьютеры стоят рядом.
Andy Mozzhevilov
Цитата(upc2 @ Oct 14 2005, 13:35)
Можно сказать , что два компьютера соединены по схеме которую я
привел.Линия и устройства питаются от отдельного источника.При передаче по осциллографу видно, что все правильно.
Ориентируюсь на AN228 с сайта Microchip.Управляю своей версией
Kit 2510.Использую их MCP2510.DLL. Вроде все работает.В петлевом
режиме все пишется и передается.Фильтры и маски настроены на прием всех сообщений.Но все время ошибка линии.Может на входе используется и третье состояние?Кто может сказать , что должно быть на выводе RX драйвера шины
сейчас попробую соединить напрямую по схеме spf.Компьютеры стоят рядом.
*


Такое ощушение, что вы не слышите вопросов.
Второй CAN контроллер программируется? Или просто подключен к CAN шине?
Посмотрите, что у второго CAN контроллера на Tx, если там постоянная 1, то он не слышит приема, если он подтверждает прием пакета от первого CAN контроллера в поле ACK, то значить проблемы с линией.
Нужно локализоваться сначала в этом, а потом уже искать причину в драйверах или схеме соединения.
upc2
На обоих контроллерах стоят одинаковые приложения.Оба контроллера
программируются.Скорость передачи одинаковая.При начале передачи
одного на входе другого появляются импульсы.Приема данных не вижу.
Даже в режиме "только чтение" на втором не получаю данных.
Проверить осциллографом ack на втором Tx не догадался .Спасибо
Сейчас проверю.CANINTF сигнализирует две ошибки.Посылка с ошибкой.
Это связано с подтверждением ack.И ошибка линии.Как он выявляет эту
ошибку?
Andy Mozzhevilov
Цитата(upc2 @ Oct 14 2005, 14:09)
На обоих контроллерах стоят одинаковые приложения.Оба контроллера
программируются.Скорость передачи одинаковая.При начале передачи
одного на входе другого появляются импульсы.Приема данных не вижу.
Даже в режиме "только чтение" на втором не получаю данных.

Я не знаю, что означает этот режим для CAN.

Цитата
Проверить осциллографом ack на втором Tx не догадался .Спасибо

Я об этом выше писал.

Цитата
Сейчас проверю.CANINTF сигнализирует две ошибки.Посылка с ошибкой.
Это связано с подтверждением ack.И ошибка линии.Как он выявляет эту
ошибку?

Так это надо документацию на MCP смотреть, в каких случаях контроллер эту ошибку выставляет.

Еще совет, посмотрите 2 лучевым скопом сразу сигналы на Tx одного и Rx другого на предмет временнЫх задержек, завалов фронтов и т.п.. Что-там видно?
spf
Цитата(upc2 @ Oct 14 2005, 14:09)
Скорость передачи одинаковая.
*


Какая эта скорость? если не секрет...

Цитата
Приема данных не вижу.


Чем это пытаетесь определять?
Считыванием регистров или по сигналу прерывания?
Формирование сигнала прерывания разрешено?
upc2
Разобрался с ошибками.Регистр CANINTF указывал на регистр EFLG.
Тот указывал на ошибку "Передатчик в пассивном состоянии сч.ошибок >127"
Ошибка "Посылка с ошибками" указывала , что приемный буфер переполнен.
Что-то я запутался.Счетчик ошибок отключает передатчик.При передаче одной
посылки набегает столько ошибок?Наверно помехи.Сейчас буду разбираться.
Надо немного перепаять схемы.Это я смотрел на закоротку предложенную sfj.
spf
Цитата(upc2 @ Oct 14 2005, 15:55)
Что-то я запутался.Счетчик ошибок отключает передатчик.При передаче одной
посылки набегает столько ошибок?Наверно помехи.Сейчас буду разбираться.
*


Посылка передается до тех пор паке не будет передана без ошибок или не переполнится счетчик ошибок. Это по спецификации, да и в доке на контроллер должно быть описано.

Такая ситуация возникает когда на шине только один контроллер, остальные

выключены
неверно настроены
обрыв связи
у них неисправен выход TX, который долже формировать ask ...
Andy Mozzhevilov
Цитата(upc2 @ Oct 14 2005, 15:55)
Разобрался с ошибками.Регистр CANINTF указывал на регистр EFLG.
Тот указывал на ошибку "Передатчик в пассивном состоянии сч.ошибок >127"

Передатчик переходит в пассивное состояние, если при передаче зафиксировано больше 127 ошибок. Также передатчик будет переходить в пассивное состояние и там оставаться, если он не получил 127 подтверждений ACK от других CAN контроллеров на шине.
То есть однозначно у вас передатчик не слышит приемника, либо приемник вообще не принимает.

Цитата
Ошибка "Посылка с ошибками" указывала , что приемный буфер переполнен.

Это в каком контроллере, том же который передает?

Цитата
Что-то я запутался.Счетчик ошибок отключает передатчик.При передаче одной посылки набегает столько ошибок?Наверно помехи.

Нет, в CAN же аппаратное подтверждение приема пакетов. Поэтому единожды начав передавать сообщение CAN контроллер будет его пытаться передать, пока оно не будет подтверждено другими CAN контроллерами в сети.
Если других CAN контроллеров в сети нет, или они не работают, то передатчик попытается передать сообщение 128 раз, каждый раз добавляя ошибку передачи, и потом перейдет в пассивный режим. Как он будет в пассивном режиме работать, не помню, нужно спецификацию CAN смотреть, там эта ситуация описана.

Цитата
Сейчас буду разбираться.
Надо немного перепаять схемы.Это я смотрел на закоротку предложенную sfj.
*

Вы сначала убедитесь, что второй CAN контроллер у вас принимает пакеты и подтверждает их ACK. Третий раз уже советую это сделать.
upc2
Цитата(spf @ Oct 14 2005, 13:19)
Цитата(upc2 @ Oct 14 2005, 14:09)
Скорость передачи одинаковая.
*


Какая эта скорость? если не секрет...

Цитата
Приема данных не вижу.


Чем это пытаетесь определять?
Считыванием регистров или по сигналу прерывания?
Формирование сигнала прерывания разрешено?
*



Скорость 50 бит/с. Я в программе вижу состояние всех регистров MCP2510.
Если я разрешил прием всех посылок, то хочу увидеть появление данных
в буфере 0 приемного регистра.Или это не так?Это мой первый пуск CANа.
upc2
<<Это в каком контроллере, том же который передает? >>
Да это выдает каждое приложение.Кажется до меня начинает доходить.
Вы правы со счетчиком. Второй контроллер должен ответить.Значит
сообщение должно быть для него.Все дело в фильтрах и масках.
upc2
<<Вы сначала убедитесь, что второй CAN контроллер у вас принимает пакеты и подтверждает их ACK. Третий раз уже советую это сделать. >>
Сейчас этим занимаюсь.Перепаиваю схемы.
Andy Mozzhevilov
Цитата(upc2 @ Oct 14 2005, 16:21)
<<Это в каком контроллере, том же который передает? >>
Да это выдает каждое приложение.Кажется до меня начинает доходить.
Вы правы со счетчиком. Второй контроллер должен ответить.Значит
сообщение должно быть для него.Все дело в фильтрах и масках.
*

CAN контроллер должен подтверждать все сообщения. Маски здесь не при чем. Фильтры и маски - они только для того, чтобы приложения не загружать прерыванием на каждое сообщение из CAN. то есть можно настроить так, чтобы аппаратно прерывания генерились только на нужные сообщения, не более того.
У вас проблема явно ниже, сам CAN контроллер не принимает сообщения.
Ответьте на вопрос, у вас ACK на Tx есть на принимающем контроллере или нет?
Andy Mozzhevilov
Цитата(upc2 @ Oct 14 2005, 16:25)
<<Вы сначала убедитесь, что второй CAN контроллер у вас принимает пакеты и подтверждает их ACK. Третий раз уже советую это сделать. >>
Сейчас этим занимаюсь.Перепаиваю схемы.
*

Зачем там перепаивать, нужно скопом посмотреть на ноге Tx принимающего контроллера. Как только там увидите ack - значит CAN контроллер слышит шину. Пока там подтверждения не добьетесь, работать ничего не будет.
upc2
Andy Mozzhevilov

На 2 дня выпал из обсуждения.Спасибо за вашу настойчивость.
Посмотрел осциллографом и не увидел посылок.По сигналу
WriteCAN вижу появление одного импусьса.Вероятно ack, но
не вижу всей посылки.Раньше все это видел.Что-то намудрил
с программой.Сейчас разберусь.
upc2
Все заработало.
Моя схема схема драйвера шины имеет много недостатков.
1.На приемный транзистор наводятся большие шумы.
Поборол блокировочным конденсатором 0.33 мкФ включенным в базу.
2.У импульсов сильно завалены фронты.Можно было поработать с
транзисторами, но не стал.Купил на радиорынке 82С250.
Простая схема соединения предложенная spf не работает с MCP2510.
При начале передачи вывод Tx генерит непрерывную последовательность
импульсов.Без всякого протокола.Вероятно происходит завязка с Rx
входом.
С сигналом ack тоже проблематично.Если все нормально , то посылка так
быстро проскакивает ( хотя я снизил скорость до 10 Кбит/с) , что ничего не
разберешь.Если отключаешь второе устройство , то сигнала подтверждения
просто нет.
Тему можно закрыть.
spf
Цитата(upc2 @ Oct 20 2005, 10:23)
Все заработало.
*


Ну и славно...

И все же, рекомендую сделать гальваническую развязку.
Для надежности. Не рекомендую кузова(общий провод) двух PC соединять через свое устройство.
upc2
Цитата(spf @ Oct 20 2005, 08:35)
Цитата(upc2 @ Oct 20 2005, 10:23)
Все заработало.
*


Ну и славно...

И все же, рекомендую сделать гальваническую развязку.
Для надежности. Не рекомендую кузова(общий провод) двух PC соединять через свое устройство.
*



Спасибо за рекомендации и ссылки.Все полезно.У нас сейчас идет "атака " на CAN.Переориентировал заявку в коммерческом отделе на TJA1050.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.