реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прием CAN2.0B на скоростях 250 и 500kbit/s, Подскажите если кто сталкивался
idle1
сообщение Sep 23 2009, 15:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Вот, возникла задача написать прием и передачу в CAN шину на контроллере тини2313. На первый взгляд ничего сложного, протокол документирован и понятен, НО есть но! Это времена, к примеру на 500кбит/с один бит передается за 2мкс, а на 250 за 4мкс, т.е имеем максимум 40 циклов на обработку одного бита, при этом еще нужно выкинуть мусор из сигнала. Я использовал контроллер на частоте 20Мгц.
Я пробывал уже следующие варианты: И чтение с задержкой в 2 и 4мкс соответственно -> вывод из-за длительности посылки, примерно в 100-150 бит, время уплывает, а так же ещё из-за ветвлений (1-2 цикла в один бит -> ~0.10мкс), провал!
Второй вариант со счетчиком при изменении с 1 на 0 и с 0 на 1 с последующей записью времени для анализа и расчета кол-ва бит, провал по непонятной мне причине, это загадочное отставание счетчика и непредсказуемость его показаний, при расчетной погрешности в 1.1мкс (цикл ожидания), наблюдаются отставания в две и даже 3мкс! Для связи с CAN шиной использую MCP2551 микрочипа.
Может кто писал что подобное? Если не трудно отзовитесь! Контроллер сменить немогу *TAUP*. Может у кого есть алгоритм?
Go to the top of the page
 
+Quote Post
Aner
сообщение Sep 23 2009, 18:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



... сочувствую, мы сменили контроллер, нормально не получилось.
Go to the top of the page
 
+Quote Post
idle1
сообщение Sep 23 2009, 19:55
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Цитата(Aner @ Sep 23 2009, 22:44) *
... сочувствую, мы сменили контроллер, нормально не получилось.

А на что сменили? Если формфактор такой же (питание(10-20), кварц(4-5), UART(2-3)), может и мне подойдет..
У меня идея родилась через прерывание сделать, может пройдет, завтра попробую.
Go to the top of the page
 
+Quote Post
Aner
сообщение Sep 23 2009, 20:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



... на AT90CAN128-16AU, плату тоже пришлсь переразводить. Все же не зря внутренняя CAN инжина там реализована.
Сейчас и этот чип не очень, обработку данных требуется делать, большую.
Смотрю на ST32F102...7, цены привлекательные, да и нормальный ARM там уже.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 24 2009, 09:20
Сообщение #5


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(idle1 @ Sep 23 2009, 14:39) *
Вот, возникла задача написать прием и передачу в CAN шину на контроллере тини2313. Может кто писал что подобное? Если не трудно отзовитесь! Может у кого есть алгоритм?

Расхождение может проявляться как за счёт ветвлений в программе (или ошибок), так и за счёт разбега частот передатчика и приёмника. В кане аппаратно осуществляется постоянная подстройка частоты путём выкусывания и вставки 1..4 квантов времени (кратных 1/25..1/8 длительности бита) в среднем на каждом втором бите, сомневаюсь, что вы сможете это сделать программно за 40МЦ.

Я бы вам посоветовал поставить отдельный САН контроллер, например МСР2510, и не мучаться, поскольку задача совершенно неблагодарная в смысле затрат времени и отдачи.

С другой стороны, технически - интересная задача для проверки своего потенциала и знания протокола кана. Так что давайте ваш код, будем посмотреть (:-). Кстати, есть ещё один вариант решения задачи - с помощью последовательного интерфейса, если интересуетесь, расскажу подробнее.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 24 2009, 09:57
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я выравнивал ветвления. Прерывание само сожрёт 10-11 тактов, что из 40 - уже очень прилично. При такой задаче я бы прерывания не делал. Подстройку сделать можно, правда, конечно всё это будет несопоставимо с аппаратной реализацией.

Короче в общем мысль такая, что реализовать то можно, вот только контроллер при этом будет задействован донемогу. то есть он сможет обслуживать при этом ну очень простые задачи и очень медленные процессы. Обычно в CAN системе бродит туча сообщений, а ваших там очень мало, но обработать то требуется всё (при таком подходе).

Конечно CAN128 - дорогая микруха, но сейчас альтернатив уже полно. Это и LPC и ST32 и AT91SAM7. Да, совсем забыл. Есть PICи очень недорогие с CAN. В том числе малоногие. Правда там с CAN не удобно работать, но всё равно.
Go to the top of the page
 
+Quote Post
idle1
сообщение Sep 24 2009, 10:43
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Если бы была возможность, то я бы не задумываясь перешел на специализированный контроллер. Но задача заключается именно под 2313 sad.gif . Сейчас иду по методу накопления данных и последующей небольшой обработки. Коррекцию времени делаю (пытаюсь делать smile.gif ) через прерывание по нисходящему фронту (Вход CAN с MCP2551 подключил к PD3(INT1)). Большой обработки в МК не будет, нужно только передать данные и получить, обработкой занимается другое ус-во. Ветвления я так же выравнивал, но там есть засада, переход по TRUE или по ELSE отличается на 1 цикл (0,05мкс)
Go to the top of the page
 
+Quote Post
idle1
сообщение Sep 24 2009, 12:40
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Может кто знает какой МК с CAN где 2-3 - UART; 4-5 - Кварц; 10-20 - Питание; ???
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Sep 24 2009, 20:05
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Может покажусь старомодным, но..
У вас идет счет на такты и Вы пытаетесь все это сделать на С?? Не проще ли на ассемблере? там такты легко выравнвать.
Go to the top of the page
 
+Quote Post
idle1
сообщение Oct 12 2009, 22:05
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Цитата(Александр Куличок @ Sep 25 2009, 00:05) *
Может покажусь старомодным, но..
У вас идет счет на такты и Вы пытаетесь все это сделать на С?? Не проще ли на ассемблере? там такты легко выравнвать.

Да на С, через AVR Studio в качестве отладчика не сложней! И CAN я уже под 2313 дописал smile.gif

Сообщение отредактировал idle1 - Oct 12 2009, 22:09
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 13 2009, 09:21
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Какой компилятор?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 13 2009, 12:37
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(=GM= @ Sep 24 2009, 12:20) *
Кстати, есть ещё один вариант решения задачи - с помощью последовательного интерфейса, если интересуетесь, расскажу подробнее.

Рааскажите, плз. Меня очень интересует дешевый CAN-bus из-за бюджетности проекта. Совместимость собственно с CAN не требуется, требуется неразрушающая коллизия.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
idle1
сообщение Oct 13 2009, 18:22
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 25-02-09
Из: Россия, Москва
Пользователь №: 45 367



Цитата(SasaVitebsk @ Oct 13 2009, 13:21) *
Какой компилятор?

В качестве компилятора использовал IAR 5.20. Отладку передавал в AVR Studio.

Цитата(Dog Pawlowa @ Oct 13 2009, 16:37) *
Рааскажите, плз. Меня очень интересует дешевый CAN-bus из-за бюджетности проекта. Совместимость собственно с CAN не требуется, требуется неразрушающая коллизия.

Коллизии у меня к сожалению не отслеживаются, мне требовался всего лишь проходной интерфейс. Всей обработкой занимается стороннее ус-во.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 13 2009, 20:15
Сообщение #14


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Dog Pawlowa @ Oct 13 2009, 11:37) *
Меня очень интересует дешевый CAN-bus из-за бюджетности проекта. Совместимость собственно с CAN не требуется, требуется неразрушающая коллизия

Ну если вгрубе, то просто подаёте данные с кана в сдвиговый регистр ведомого спи. Синхронизацию формируете сами таймером с стс модой или с помощью чм-фм шима и проводом подаёте на склк. Ну и время от времени корректируете период синхро. Для приёма байта на обозначенных скоростях требуется порядка 320-640 тактов, всё это время - ваше, успеете и битстаффинг выкусить, и цкс посчитать, и адресата проверить, и даже на си.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01485 секунд с 7
ELECTRONIX ©2004-2016