Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройки CAN для ATmega128CAN
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Vladimir-K
Необходимо подобрать значения регистров CANBT1-3 для контроллера, работающего на частоте 14,7456 МГц
KRS
Цитата(Vladimir-K @ Feb 13 2008, 13:52) *
Необходимо подобрать значения регистров CANBT1-3 для контроллера, работающего на частоте 14,7456 МГц

А какая скорость CAN нужна?
Но для стандартных гемор будет с такой частотой.
Vladimir-K
Цитата(KRS @ Feb 13 2008, 13:55) *
А какая скорость CAN нужна?
Но для стандартных гемор будет с такой частотой.

Нужно подобрать значения для 125 кб/с, 500 кб/с и 1 Мб/с. А гемор и так уже есть - иначе бы не спрашивал :-)
galjoen
Цитата(Vladimir-K @ Feb 13 2008, 13:52) *
Необходимо подобрать значения регистров CANBT1-3 для контроллера, работающего на частоте 14,7456 МГц

У меня именно такая-же ситуация. Я даже программку накатал. Она 14745600 на заданную частоту (100000, 125000 и т.д.) делит, а затем то, что получилось последовательно делит на числа от 8 до 25. И наиболее точно разделившееся выдаёт. В смысле, если всё это снова помножить, у кого наименьшее отклонение от заданного получится. А от 8 до 25 это кол-во TQ в бите. Иногда 12..25 ставлю. Вобщем эксперементирую... Но ошибки совсем небольшие получаются. Работать всё точно будет.
А в свете всего вышесказанного у меня вопрос. Вы какой SJW (Synchronization Jump Widht) ставите?
В примерах он всегда почему-то =1 (минимальный). А в нашем случае (частота не совсем точно совпадает) думаю его надо-бы побольше ставить. Или от этого что-то ухудшится? Как раз хотел этот вопрос в разделе CAN задать. Сам-то я в CAN-е новичок.
Vladimir-K
Цитата(galjoen @ Feb 13 2008, 14:35) *
У меня именно такая-же ситуация. Я даже программку накатал. Она 14745600 на заданную частоту (100000, 125000 и т.д.) делит, а затем то, что получилось последовательно делит на числа от 8 до 25. И наиболее точно разделившееся выдаёт. В смысле, если всё это снова помножить, у кого наименьшее отклонение от заданного получится. А от 8 до 25 это кол-во TQ в бите. Иногда 12..25 ставлю. Вобщем эксперементирую... Но ошибки совсем небольшие получаются. Работать всё точно будет.
А в свете всего вышесказанного у меня вопрос. Вы какой SJW (Synchronization Jump Widht) ставите?
В примерах он всегда почему-то =1 (минимальный). А в нашем случае (частота не совсем точно совпадает) думаю его надо-бы побольше ставить. Или от этого что-то ухудшится? Как раз хотел этот вопрос в разделе CAN задать. Сам-то я в CAN-е новичок.

Так какие значения Ваша программа выдает для указанных частот?
Со значением SJW экспериментировал, но его влияние на безошибочность передачи до конца не определил.
KRS
Посомтрите этот документ от Боша. Может он вам поможет.
galjoen
Цитата(Vladimir-K @ Feb 13 2008, 15:00) *
Так какие значения Ваша программа выдает для указанных частот?

Для 125000 оптимально - делитель=9, кол-во TQ=13, ошибка =-0.81%. Следующая по оптимальности комбинация 7 - 17, ошибка =+0.88%. И т.д.

А вообще рекомендую свою программку составить - понадобится если другие кварцы будут. Я вообще хочу чтобы это в самом AT90CAN128 вычислялось. У меня там RTC кварц есть 32756 Гц. Я частоту процессора вычисляю - кварцы-то разные могут быть (для автобауда у RS485 так сделал). Потом оптимальный делитель + кол-во TQ вычислю. Делитель сразу установлю, а остальное по таблице в зав-ти от TQ. Для значений TQ от 8 до 25 это всего 17 таблиц. В этих таблицах - что в остальные регистры писать при соответствующем TQ.

Только я сейчас работой завален. А переход на CAN это моя инициатива - хобби такое. Так щас что чуть разгребусь - тогда CAN-ом и займусь. И думаю мы с вами ещё там (в разделе CAN) встретимся.
Vladimir-K
Цитата(KRS @ Feb 13 2008, 15:49) *
Посомтрите этот документ от Боша. Может он вам поможет.

Спасибо, полезная дока

Цитата(galjoen @ Feb 13 2008, 16:02) *
И думаю мы с вами ещё там (в разделе CAN) встретимся.

Обязательно :-) А значения Ваши в ближайшее время проверю. Спасибо :-)
A.D.
http://electronix.ru/forum/index.php?showt...p;hl=AT90CAN128
тут есть пример
galjoen
Цитата(A.D. @ Feb 14 2008, 09:52) *

Оттуда для 14745600: case f125kbps: { CANBT1 = 0x0C; CANBT2 = 0x0E; CANBT3 = 0x36; break; } //123.913kbps
Это значит делитель =7 - (CANBT1 = 0x0C), TQ=17 - (Tprs=8)+(Tphs2=5)+(Tphs1=4)=17. Вторая по точности настройки частоты комбинация. Если-бы сделать так: делитель=9, а TQ=13 - 126030.77 kbps получается. И ещё у неё SMP=0. То есть 1 выборка, а не 3. И Tsjw=1. Я в CAN-е новичок, поэтому мне интересно - это неточность, или из-за каких-то определённых соображений так сделано?
KRS
Цитата(galjoen @ Feb 14 2008, 10:42) *
Вторая по точности настройки частоты комбинация. Если-бы сделать так: делитель=9, а TQ=13 - 126030.77 kbps получается.

Да так получается лучше. Тут главное выбрать соотношение Tprs Tphs1 Tphs2 правильно.
Например для 69% sample point Tprs = 6 Tphs1 = 3 Tphs2 = 3


Цитата(galjoen @ Feb 14 2008, 10:42) *
Оттуда для 14745600: case f125kbps: { CANBT1 = 0x0C; CANBT2 = 0x0E; CANBT3 = 0x36; break; } //123.913kbps
Это значит делитель =7 - (CANBT1 = 0x0C), TQ=17 - (Tprs=8)+(Tphs2=5)+(Tphs1=4)=17.

Здесь Tphs2 = 4, правда TQ все равно 17 вы забыли SYN прибавить
А sample поинт получается 70%
Так что способ с TQ = 13 лучше.
galjoen
Цитата(KRS @ Feb 14 2008, 11:29) *
Да так получается лучше. Тут главное выбрать соотношение Tprs Tphs1 Tphs2 правильно.
Например для 69% sample point Tprs = 6 Tphs1 = 3 Tphs2 = 3
Так что способ с TQ = 13 лучше.

А вы для всех возможных TQ (от 8 до 25) оптимальные соотношения Tprs Tphs1 Tphs2 случайно не вычисляли? Или м.б. есть такие TQ, для которых это оптимально сделать не получается?
Цитата(galjoen @ Feb 13 2008, 16:02) *
Я вообще хочу чтобы это в самом AT90CAN128 вычислялось. У меня там RTC кварц есть 32756 Гц. Я частоту процессора вычисляю - кварцы-то разные могут быть (для автобауда у RS485 так сделал). Потом оптимальный делитель + кол-во TQ вычислю. Делитель сразу установлю, а остальное по таблице в зав-ти от TQ. Для значений TQ от 8 до 25 это всего 17 таблиц. В этих таблицах - что в остальные регистры писать при соответствующем TQ.

Я вот об этом. Если какие-то TQ "плохие". Это усложнится. Но всё равно сделать можно будет. Весовые коэфф-ты для TQ ввести. Потом на них отклонение от частоты помножать. И уже из этих произведений лучшее выбирать.

А ещё вопрос не по теме: Сегодня меня в "свои" перевели. А вроде ничего не изменилось. Я что-то настроить должен? Если насчёт "своих" глупость написал - не пинайте. Будем считать, что это у меня от радости.
KRS
Цитата(galjoen @ Feb 14 2008, 15:28) *
А вы для всех возможных TQ (от 8 до 25) оптимальные соотношения Tprs Tphs1 Tphs2 случайно не вычисляли? Или м.б. есть такие TQ, для которых это оптимально сделать не получается?

А у меня все время под стандартные попадало (которые в таблице есть), а так во многих других контроллерах (NXP SJA1000 например)настроек на 1 меньше TQ = 1 + TSEG1 + TSEG2. Вообще чем больше TQ тем больше возможностей установить пропорцию для sample point.
A.D.
Цитата
Оттуда для 14745600: case f125kbps: { CANBT1 = 0x0C; CANBT2 = 0x0E; CANBT3 = 0x36; break; } //123.913kbps Это значит делитель =7 - (CANBT1 = 0x0C), TQ=17 - (Tprs=8)+(Tphs2=5)+(Tphs1=4)=17. Вторая по точности настройки частоты комбинация. Если-бы сделать так: делитель=9, а TQ=13 - 126030.77 kbps получается. И ещё у неё SMP=0. То есть 1 выборка, а не 3. И Tsjw=1. Я в CAN-е новичок, поэтому мне интересно - это неточность, или из-за каких-то определённых соображений так сделано?


Доброе время суток, если вас не затруднит, пояснить для новичка, что понимается под "делитель=9", просто запутался в формулах (CANBT1-3) из даташита( AT90CAN128), что там является делителем.
KRS
Цитата(A.D. @ Feb 18 2008, 17:31) *
Доброе время суток, если вас не затруднит, пояснить для новичка, что понимается под "делитель=9", просто запутался в формулах (CANBT1-3) из даташита( AT90CAN128), что там является делителем.

Делитель - это на сколько системная частота делится для получения TQ, он находится полностью в регистре CANBT1

CANBT1 = (divisor - 1) * 2;
соответсвенно если частота 16 мгц прескалер 8 time quanta TQ будет равно 0.5 микросекунды, а CANBT1 = 0x0E;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.