Jump to content

    

Драйвер CAN

Создал драйвер для CAN.

Все уровни соответствуют стандарту.

Посчитал, что дифференциальный усилитель не обязателен.

Приемный транзистор четко переключается при переходе

из Recessive в Dominant и наоборот.Однако MCP2510

выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что

все это связано с протоколом.Где-то я его не дочитал.

drv.bmp

Share this post


Link to post
Share on other sites
Создал драйвер для CAN.

Все уровни соответствуют стандарту.

Посчитал, что дифференциальный усилитель не обязателен.

Приемный транзистор четко переключается при переходе

из Recessive в Dominant и наоборот.Однако MCP2510

выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что

все это связано с протоколом.Где-то я его не дочитал.

 

а сколько устройств сейчас на шине?

Share this post


Link to post
Share on other sites

Создал 2 примочки LPT. Вообщем соеденены 2 компьютера.

Share this post


Link to post
Share on other sites
Создал драйвер для CAN.

Все уровни соответствуют стандарту.

Посчитал, что дифференциальный усилитель не обязателен.

Приемный транзистор четко переключается при переходе

из Recessive в Dominant и наоборот.Однако MCP2510

выдает ошибку линии.В чем моя ошибка?Что я не так делаю?Думаю , что

все это связано с протоколом.Где-то я его не дочитал.

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

не совсем понятен смысл 2 транзисторов в передатчике, поскольку диф-сигнала в линии они не создадут, проще уж применить схему просто с открытым коллектором.

 

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

В общем нужно определить, принимает ли и подтверждает приемник, и дело только в передатчике, или приемник не принимает.

Возможно дело в правильности настройки CAN контроллера.

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

 

Драйвер всетаки нужен.Но это потом.Хочу соединить 2 компьютера.

Скорость можно задавать из приложения.Ни на одной не идет.

При начале передачи выдает ошибку линии.

Сейчас проверю ваше предложение.Может я уже спалил микросхемы.

Share this post


Link to post
Share on other sites
не совсем понятен смысл 2 транзисторов в передатчике, поскольку диф-сигнала в линии они не создадут, проще уж применить схему просто с открытым коллектором.

 

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

В общем нужно определить, принимает ли и подтверждает приемник, и дело только в передатчике, или приемник не принимает.

Возможно дело в правильности настройки CAN контроллера.

 

Эту схему я скопировал с MCP2551 и 82250 .Уже около года не могу

приобрести эти микросхемы.Вот и взялся городить огород.Кончно будут и

транзисторы другие, и операционник на входе.Как только соединю 2

компьютера, так дело пойдет быстрее.Все сигналы соответствуют

стандарту.А , что значит правильность настройки CAN?В режиме зацикливания

все работает прекрасно.

Share this post


Link to post
Share on other sites
стандарту.А , что значит правильность настройки CAN?

CAN контроллер же программируется. Это действо может содержвать ошибки.

Поэтому предположение, что если принимающий контроллер не отвечает (то есть не подтверждает прием кадра в поле ack), то возможно что-то с настройкой контроллера.

Если он отвечает, то возможно что-то со схемотехникой драйверов. Нужно посмотреть задержки распространения сигнала ack от приемника, через его драйверы, через драйверы передатчика и на вход rx передатчика. Задержка на распространение сигнала должна укладываться в определенные границы, которые зависят от скорости обмена и настройки can контроллера.

 

В режиме зацикливания

все работает прекрасно.

Share this post


Link to post
Share on other sites
Эту схему я скопировал с MCP2551 и 82250 .Уже около года не могу

приобрести эти микросхемы.

 

Дык 82250 уже лучше и не ждать, выбери из TJA1050-TJA1054.

Share this post


Link to post
Share on other sites

Или примени драйвер 485-го интерфейса.

 

PS:

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

 

post-8051-1129205329_thumb.jpg

Share this post


Link to post
Share on other sites

Вы правы.В петлевом режиме контроллер сам формирует сигнал ACK для

передатчика.И поэтому ошибки "Посылка с ошибкой"в режиме зацикливания нет. Наверно дальше надо соединять два контроллера.Но все время есть

ошибка "Ошибка на линии". Это я анализирую регистр CANINTF.

Проверка на себя,как было предложено выше, не помогла.

Share this post


Link to post
Share on other sites

Вот так должно работать, на небольшом расстоянии между CAN-контроллерами. (При R=5К и скорости 125Кбит)

 

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

 

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

Другим попытаться передать на той же скорости.

 

Не использовал MCP2510, настроек регистров не подскажу.

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

 

 

PS:

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

 

Для подавления помех можно попробовать зашунтировать сигнальную линию небольшой емкостью на каждом контроллере. (Это касается приведенной выше схемы).

Share this post


Link to post
Share on other sites
Вы правы.В петлевом режиме контроллер сам формирует сигнал ACK для

передатчика.И поэтому ошибки "Посылка с ошибкой"в режиме зацикливания нет. Наверно дальше надо соединять два контроллера.

Так они еще не соединены, что ли? :-O

Я же первым вопросом это спросил.

Если контроллер на шине только 1, ему никто ничего не подтверждает, поэтому он и не может ничего передать.

Share this post


Link to post
Share on other sites

Можно сказать , что два компьютера соединены по схеме которую я

привел.Линия и устройства питаются от отдельного источника.При передаче по осциллографу видно, что все правильно.

Ориентируюсь на AN228 с сайта Microchip.Управляю своей версией

Kit 2510.Использую их MCP2510.DLL. Вроде все работает.В петлевом

режиме все пишется и передается.Фильтры и маски настроены на прием всех сообщений.Но все время ошибка линии.Может на входе используется и третье состояние?Кто может сказать , что должно быть на выводе RX драйвера шины

сейчас попробую соединить напрямую по схеме spf.Компьютеры стоят рядом.

lpt_can.bmp

Share this post


Link to post
Share on other sites
Можно сказать , что два компьютера соединены по схеме которую я

привел.Линия и устройства питаются от отдельного источника.При передаче по осциллографу видно, что все правильно.

Ориентируюсь на AN228 с сайта Microchip.Управляю своей версией

Kit 2510.Использую их MCP2510.DLL. Вроде все работает.В петлевом

режиме все пишется и передается.Фильтры и маски настроены на прием всех сообщений.Но все время ошибка линии.Может на входе используется и третье состояние?Кто может сказать , что должно быть на выводе RX драйвера шины

сейчас попробую соединить напрямую по схеме spf.Компьютеры стоят рядом.

 

Такое ощушение, что вы не слышите вопросов.

Второй CAN контроллер программируется? Или просто подключен к CAN шине?

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

Нужно локализоваться сначала в этом, а потом уже искать причину в драйверах или схеме соединения.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this