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

 
 
> Настройка скорости
Санёк76
сообщение Mar 12 2011, 21:11
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 6-03-11
Пользователь №: 63 428



Приветствую

для организации CAN шины между AVR-контроллерами я использую связку MCP2510 + MCP2551.

Для изменения сокорости передачи бита можно изменять временную кванту и длинну сегментов (в этих квантах).
Можно ли менять скорость измененением либо только ванты либо только длин сегментов от 125Кбит до 1Мбит при 16МГц тактовой частоты?
Достаточно ли 0,5 мкс, чтобы сигнал распространился по сети (витая пара, 2-3 метра)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
ldimitri
сообщение Mar 16 2011, 10:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 13-11-08
Пользователь №: 41 594



При 16Мгц кварце на MCP2510 скорость можно менять только изменением BRP в регистре CNF1 (как я и делаю на протяжении долгого времени), не трогая длину сегментов.

Достаточно добавить в код следующие строчки:

#define FOSC 16000000
#define NTQ 8
#define BRP_VAL(BITRATE) ((FOSC /(2*NTQ*BITRATE))-1)


Тогда следующий код сконфигурирует MCP2510 на работу по CAN со скоростью 125КБит/с:

__mcp_write(CNF1, BRP_VAL(125000));
__mcp_write(CNF2, 0x90);
__mcp_write(CNF3, 0x02);


где __mcp_write - функция записи в регистр некоторого значения

Данный вариант отлично работает для скоростей 25К, 50К, 125К, 250К, 500К, 1М.

0,5мкс - это 1TQ? Да, достаточно.
0,5мкс - это 1 бит? Гарантий нет, т.к. при такой длине бита скорость обмена - 2М, а для CAN максимально заявленная скорость 1М, хотя можешь и попробовать.
Go to the top of the page
 
+Quote Post
Санёк76
сообщение Mar 17 2011, 17:11
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 6-03-11
Пользователь №: 63 428



0,5мкс - я имел в виду 1TQ..просто достаточным ли будет сегмент распространения (Propagation segment) длиной в одну такую TQ?

и ещё кое что:
чему равна длинна Phase segment 2, если в бит BTLMODE регистра CNF2 установить в 0?В документации на MCP2510 про это нашёл только это:

If the BTLMODE bit is set to a ‘0’ then the length of phase segment 2 is the greater of phase segment 1 and the information processing time (which is fixed at 2 TQ for the MCP2510).
Go to the top of the page
 
+Quote Post
ldimitri
сообщение Mar 18 2011, 08:16
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 13-11-08
Пользователь №: 41 594



Да, 1TQ достаточно. (до 30м на 125КБит/с точно, проверено, надежно)

По поводу BTLMODE:
Если у тебя PHSEG1 > 2TQ, то будет то же самое значение, что и PHSEG1. В любом другом случае будет 2TQ. (Выставляется автоматически)
т.е. PHSEG2 = max(PHSEG1, 2TQ)
Go to the top of the page
 
+Quote Post
KARLSON
сообщение Mar 18 2011, 12:29
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Здравствуйте.
Пользуюсь MCP2515.
Скажите, при переполнении счётчика ошибок приёма и передачи MCP переходит в режим bus-off. Судя по даташиту, сбросить регистры 1С(кол-во ошибок передачи) и 1D (чтения) нельзя. В разделе 6 сказано, что только в регистре 2D (ERROR FLAG) можно сбросить BIT6, BIT7.

bit7 RX1OVR: Receive Buffer 1 Overflow Flag bit
- Set when a valid message is received for RXB1 and CANINTF.RX1IF = 1

bit6 RX0OVR: Receive Buffer 0 Overflow Flag bit
- Set when a valid message is received for RXB0 and CANINTF.RX1IF = 1

Что они означают?
И вообще, что делать если какой либо счётчик превысил значение 127 или предупреждающие 96?

Поясните пожалуйста про 3 регистра CNF1 (адрес 2A), CNF2 (29), CNF3 (28). Как эту скорость настроить?
У меня кварц 8МГц, частота шины 250 кбит/с, стандарт J1939.

ldimitri, Вы дали пример:
#define FOSC 8000000 (моя частота кварца)
#define NTQ 8 (а это что означает?)
#define BRP_VAL(BITRATE) ((FOSC /(2*NTQ*BITRATE))-1) (BITRATE это скорость? в кбит/с ?)

Такой код сконфигурирует MCP2510 на работу по CAN со скоростью 250КБит/с: ?

__mcp_write(CNF1, BRP_VAL(125000));
__mcp_write(CNF2, 0x90);
__mcp_write(CNF3, 0x02);

А MCP надо конфигурировать для автоматической настройки скорости? Как она происходит?

Сообщение отредактировал KARLSON - Mar 18 2011, 12:47


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
ldimitri
сообщение Mar 18 2011, 14:08
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 13-11-08
Пользователь №: 41 594



Добрый день!

RX0OVF - бит переполнения приемного буфера 0. Если вы не прочитали сообщение из буфера прежде чем пришло следующее (или при чтении забыли сбросить флаг прерывания RX0IF) - устанавливается в 1.
RX1OVF - аналогично, но для приемного буфера 1.


Если счетчик ошибок увеличивается :
Рекомендация 1 - Проверить каналы передачи данных. Самая распространенная проблема. Могут быть перепутаны выводы, могут не стоять терминаторы (на коротких линия отсутствие терминаторов незаметно, хотя и были прецеденты).
Рекомендация 2 - Проверить, все ли устройства работают на одинаковой скорости. Если нет - исправить. Если да - исключать устройства из шины по одному (пускать кабель в обход устройства) и смотреть, из-за какого устройства был весь сыр-бор.

Если MCP перешел в режим bus-off - переинициализируйте его с нуля. Если такое происходит постоянно - вероятно у вас не все в порядке с каналом передачи.


TQ - единичный временной отрезок. Каждый бит на шине формируется из некоторого количества этих временных отрезков (NTQ), обычно 8 - 20. Количество выбирается произвольно (обычно 8, 10, 16, 20 - зависит от того, на какое число частота кварца хорошо делится).
Время этого отрезка определяется временем передачи одного бита, деленным на общее количество TQ.

Бит на шине состоит из 4 сегментов: сегмент синхронизации, сегмент распространения, фазовый сегмент 1, фазовый сегмент 2.
Сумма длин всех этих сегментов должна равняться NTQ.
Все сегменты, кроме сегмента синхронизации можно установить программно - в регистрах CNF2 и CNF3 (см. даташит )

Для скорости 250К время передачи одного бита 1 / 250000 = 0.000004с (4мкс).
Для того, чтобы длина 1 бита на шине соответствовала этому времени, необходимо установить делитель(BRP) в регистре CNF1.
Этот делитель вычисляется по формуле:
BRP = (( FOSC / ( 2 * NTQ * BITRATE )) - 1),
где
NTQ - количество TQ,
BITRATE - скорость в бит/с ( в вашем случае 250000)
FOSC - вы и так поняли wink.gif


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

Для конфигурации на скорость 250КБит/с:
__mcp_write(CNF1, BRP_VAL(250000));
__mcp_write(CNF2, 0x90);
__mcp_write(CNF3, 0x02);

И напоследок ссылочка: Статья о битовой синхронизации. Там на русском языке описывается вся необходимая информация для того, чтобы вы в любое время дня и ночи смогли настроить контроллер на нужную вам скорость. sm.gif

Go to the top of the page
 
+Quote Post
KARLSON
сообщение Mar 18 2011, 20:21
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



ldimitri, ну просто БОЛЬШОЕ СПАСИБО. С меня причитается beer.gif a14.gif

А как измерить скорость на шине других устройств, их не мы делали. С другой стороны вероятность не точной скорости 250 кбит/с мала, я так думаю производители дигателей (в данном случае Ярославский завод) и машин, у которых примеряется стандарт J1936 должны точно соблюдать скорость.


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
Санёк76
сообщение Mar 19 2011, 09:57
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 6-03-11
Пользователь №: 63 428



спасибо, Idimitri))
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 21:10
Рейтинг@Mail.ru


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