|
|
  |
Настройки CAN для ATmega128CAN, Необходимо подобрать значения регистров CANBT1-3 для кварца 14,7456 МГ |
|
|
|
Feb 13 2008, 10:52
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-02-08
Пользователь №: 35 003

|
Необходимо подобрать значения регистров CANBT1-3 для контроллера, работающего на частоте 14,7456 МГц
|
|
|
|
|
Feb 13 2008, 11:00
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-02-08
Пользователь №: 35 003

|
Цитата(KRS @ Feb 13 2008, 13:55)  А какая скорость CAN нужна? Но для стандартных гемор будет с такой частотой. Нужно подобрать значения для 125 кб/с, 500 кб/с и 1 Мб/с. А гемор и так уже есть - иначе бы не спрашивал :-)
Сообщение отредактировал Vladimir-K - Feb 13 2008, 11:10
|
|
|
|
|
Feb 13 2008, 11:35
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(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-е новичок.
|
|
|
|
|
Feb 13 2008, 12:00
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-02-08
Пользователь №: 35 003

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

|
Цитата(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) встретимся.
|
|
|
|
|
Feb 13 2008, 14:51
|
Группа: Новичок
Сообщений: 4
Регистрация: 13-02-08
Пользователь №: 35 003

|
Цитата(KRS @ Feb 13 2008, 15:49)  Посомтрите этот документ от Боша. Может он вам поможет. Спасибо, полезная дока Цитата(galjoen @ Feb 13 2008, 16:02)  И думаю мы с вами ещё там (в разделе CAN) встретимся. Обязательно :-) А значения Ваши в ближайшее время проверю. Спасибо :-)
Сообщение отредактировал Vladimir-K - Feb 13 2008, 14:53
|
|
|
|
|
Feb 14 2008, 06:52
|
Группа: Новичок
Сообщений: 2
Регистрация: 5-01-08
Пользователь №: 33 833

|
|
|
|
|
|
Feb 14 2008, 08:29
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(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 лучше.
|
|
|
|
|
Feb 14 2008, 12:28
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(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 ввести. Потом на них отклонение от частоты помножать. И уже из этих произведений лучшее выбирать. А ещё вопрос не по теме: Сегодня меня в "свои" перевели. А вроде ничего не изменилось. Я что-то настроить должен? Если насчёт "своих" глупость написал - не пинайте. Будем считать, что это у меня от радости.
|
|
|
|
|
Feb 18 2008, 14:31
|
Группа: Новичок
Сообщений: 2
Регистрация: 5-01-08
Пользователь №: 33 833

|
Цитата Оттуда для 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), что там является делителем.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|