Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройка скорости
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
Санёк76
Приветствую

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

Для изменения сокорости передачи бита можно изменять временную кванту и длинну сегментов (в этих квантах).
Можно ли менять скорость измененением либо только ванты либо только длин сегментов от 125Кбит до 1Мбит при 16МГц тактовой частоты?
Достаточно ли 0,5 мкс, чтобы сигнал распространился по сети (витая пара, 2-3 метра)?
ldimitri
При 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М, хотя можешь и попробовать.
Санёк76
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).
ldimitri
Да, 1TQ достаточно. (до 30м на 125КБит/с точно, проверено, надежно)

По поводу BTLMODE:
Если у тебя PHSEG1 > 2TQ, то будет то же самое значение, что и PHSEG1. В любом другом случае будет 2TQ. (Выставляется автоматически)
т.е. PHSEG2 = max(PHSEG1, 2TQ)
KARLSON
Здравствуйте.
Пользуюсь 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 надо конфигурировать для автоматической настройки скорости? Как она происходит?
ldimitri
Добрый день!

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

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

А как измерить скорость на шине других устройств, их не мы делали. С другой стороны вероятность не точной скорости 250 кбит/с мала, я так думаю производители дигателей (в данном случае Ярославский завод) и машин, у которых примеряется стандарт J1936 должны точно соблюдать скорость.
Санёк76
спасибо, Idimitri))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.