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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Настройка скорости CAN АТ90CAN128, clock 14.7456 MHz for 125kbps
zuuuuk
сообщение Jul 28 2010, 15:44
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



Доброго времени суток.

я использую контроллер AT90CAN128. для соединения компа и платы использую USB-CAN.

Подскажите пожалуйста возможно ли организовать стандартную скорость
в сети CAN (125 кб/с 500 кб/с) при тактовой частоте контроллера 14.7456 MHz.

вот мои настройки для 125 кб/с
CANGSTA |= (1<<ENFG) ; // enable can
CANGCON |= (1<<1); //0x02;
CANGIE |= (1<<ENRX) | (1<<ENTX); //0x20;
CANIE2=0xFF;
CANIE1=0x00;
CANHPMOB=0x00;
CANTCON=0xf0;

CANBT1=0x0c;
CANBT2=0x4e;
CANBT3=0x58;
где то закралась ошибка. не могу найти где? буду признателен за помощ.

еще подскажите для чего необходим CAN timing. в доке написано
A programmable 16-bit timer is used for message stamping. для какой штамповки он нужен? я не понимаю

зарание благодарю.


Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Jul 29 2010, 03:56
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



Помогите подсчитать коэфициэнты для скорости 125 кб/с
CANBT1
CANBT2
CANBT3
частота контроллера 14.7456 MHz

ничего не выходит.
вроде все правильно но преобразователь USB-CAN начинает генерить как семасшедший.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jul 29 2010, 14:21
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(zuuuuk @ Jul 29 2010, 07:56) *
Помогите подсчитать коэфициэнты для скорости 125 кб/с
CANBT1
CANBT2
CANBT3
частота контроллера 14.7456 MHz

ничего не выходит.
вроде все правильно но преобразователь USB-CAN начинает генерить как семасшедший.

Вот:
Код
Тактовая частота 14745600. Связь 125000 (реально 126031)
.SET CBT1=0x10; писаемое в CANBT1 (делитель=9, частота 1.6384 МГц)
.SET CBT2=0x0A; писаемое в CANBT2 (Tsjw=1, Tprs=6)
.SET CBT3=0x25; писаемое в CANBT3 (Tphs2=3, Tphs1=3, SMP=1)
TQ=(SYN=1)+(Tprs=6)+(Tphs1=3)+(Tphs2=3)=13
Sampling Point=((SYN=1)+(Tprs=6)+(Tphs1=3))/(TQ=13)=76.92%

А поиском лень было воспользоваться?
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Jul 29 2010, 15:36
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



великое тебе спасибо..

поиск по форуму что ли?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jul 30 2010, 13:56
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(zuuuuk @ Jul 29 2010, 19:36) *
поиск по форуму что ли?

Да, по форуму. Обсуждалось и неоднократно.
Есть ещё вариант с делителем=7 и TQ=17. Там получается 123912 бод.

А вообще, здесь принято на вы обращатся...
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Jul 31 2010, 07:46
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



qaljoen, извиняюсь за вольное обращение.

к большому сожалению проблема оказалась не в скорости.
По включению платы она должна посылать пакет на компьютер.
затем при посылки пакета с компьютера, USB-CAN начинает генерировать много пакетов. (видимо ждет ответа ACK)
Прошу вас посмотрите мои настройки, что в них может быть не правильно. Один моб принимает с id 0 другой отправляет c id 0.

CANGSTA |= (1<<ENFG) ; // enable can
CANGCON |= (1<<1); //0x02;
CANGIE |= (1<<ENRX) | (1<<ENTX); //0x20;
CANIE2=0xFF;
CANIE1=0x00;
CANHPMOB=0x00;

//clock for 14.7456 MHz 125kbps

CANBT1=0x10;
CANBT2=0x0a;
CANBT3=0x25

//ID tag
CANPAGE=00;
CANIDT1=0x00;
CANIDT2=0x00;
CANIDT3=0;
CANIDT4 |= (1<<RTRTAG) ;
CANIDM1=0;
CANIDM2=0;
CANIDM3=0;
CANIDM4 |= (1<<RTRMSK) ;
CANCDMOB = 0;
CANCDMOB|=(1<<DLC0);
CANCDMOB|=(1<<CONMOB1) | (1<<RPLV) ;

// send messeg
CANPAGE=0x20;
CANIDT1=0x00;
CANIDT2=0x00;
CANIDT3=0;
CANIDT4=0;
CANCDMOB =0x0;
CANMSG=0x00;
CANCDMOB|=(1<<DLC0);
CANCDMOB|=(1<<CONMOB0); //send

While (1);
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Aug 3 2010, 09:26
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



я наверное слишком надоедлив на этом сайте.
но всетаки возможно кто то встречался с этой проблемой.

когда я посылаю с компьютера пакет по USB-CAN то он начинает генерировать много пакетов и программа пишет BUSHEAVY.
при остановки контроллера его регистр CANGSTA показывает Error Passive Mode.
какие могут быть причины такого поведения?

Сообщение отредактировал zuuuuk - Aug 3 2010, 09:31
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 3 2010, 10:01
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Видимо у вас в сети нет никого, кроме этого самого USB-CAN, поэтому никто ему ACK не отвечает, возникает ошибки Ack Error, счётчик ошибок инкрементируется, передатчик автоматически перепередаёт сообщение, и так до тех пор, пока не окажется в Error Passive.
Сеть CAN не может состоять из одного устройства, а остальные, как я понял, неправильно проинициализированы.
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Aug 3 2010, 11:01
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



я соединяю плату (AT90can128+драйвер sn65...) и компьютер USB_CAN. вот 2 узла на шине. плата настроена только на прием.
я так понимаю что компьютер не видет мою плату? (плата не овечает ACk)?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 3 2010, 11:29
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Нужно глянуть осциллографом на ноге TxCAN, у AT90CAN128 это 30-я нога. Есть ли там короткие нулевые импульсы шириной 1 бит? И доходят ли они до драйвера CAN?
А AT90CAN128 то проинициализировали так, как я написал?
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Aug 3 2010, 12:54
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



да там короткие нулевые биты длинной 15 мк секунд. доходят до драйвера CAN.
инициализация такая

// CAN Controller initialization
// CAN: On
CANGCON=0x02;
CANGIE=0x30;
CANGIE |= (1<<ENIT); //all interrupts
CANIE2=0x07;
CANIE1=0x00;
CANHPMOB=0x10;

CANBT1=0x10; //0x10
CANBT2=0x0a; //0x0A
CANBT3=0x25; //0x25

CANTCON=0x00;

#asm("sei"); //enable interrapt

//ID tag
CANPAGE=00;
CANIDT1=0;
CANIDT2=0;
CANIDT3=0;
CANIDT4=0;
CANIDM1=0;
CANIDM2=0;
CANIDM3=0;
CANIDM4=0;
CANCDMOB |= (1<<DLC3);
CANCDMOB|=(1<<CONMOB1);

// send messeg
CANPAGE=0x01;
CANIDT1=0x00;
CANIDT2=0x00;
CANIDT3=0;
CANIDT4=0;
CANCDMOB =(1<<DLC0);
CANMSG=0x55;
CANCDMOB|=(1<<DLC0);
CANCDMOB|=(1<<CONMOB0); //send



while (1)
{
};
Go to the top of the page
 
+Quote Post
KRS
сообщение Aug 3 2010, 14:03
Сообщение #12


Профессионал
*****

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



Цитата(zuuuuk @ Aug 3 2010, 16:54) *
// CAN Controller initialization
// CAN: On
CANGCON=0x02;

Так вы с самого начала неправильно инитите контроллер
Надо
Код
  CANGCON=0;
  while(CANGSTA & (1<<ENFG));
  .... нужная инициализация
  
  // запуск CAN
  CANGCON=(1<<ENASTB);
  while(!(CANGSTA & (1<<ENFG)));

Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 3 2010, 15:44
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(zuuuuk @ Aug 3 2010, 16:54) *
да там короткие нулевые биты длинной 15 мк секунд. доходят до драйвера CAN.

Значит, хоть CANGCON перед инициализацией и не был сброшен, похоже, скорость проинициализировалась правильно. 15 мк секунд это как раз 2 бита на скорости 125 кбод. Вроде должно работать. А терминальные резисторы имеются?
Цитата(KRS @ Aug 3 2010, 18:03) *
Код
  while(CANGSTA & (1<<ENFG));

Если речь идёт о инициализации после включения питания, то, на мой взгляд, это необязательно. После включения питания никакой передачи происходить не может, поэтому выключаться CAN контроллер будет мгновенно.
А вот добавить в инициализацию цикл сброса всех MOb обязательно нужно, т.к. после включения питания там м.б. что угодно.
Go to the top of the page
 
+Quote Post
zuuuuk
сообщение Aug 4 2010, 07:39
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 26-04-07
Пользователь №: 27 334



Цитата(galjoen @ Aug 3 2010, 19:44) *
15 мк секунд это как раз 2 бита на скорости 125 кбод.

там действительно идут импульсы. длинна одного нулевого импульсы 15 мк секунд.
только возникает вопрос. ACk должен быть 1 бит а не 2. и следовательно длинна нулевых имп. должна быть в 2 раза меньше. я неправ?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 4 2010, 13:20
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата
ACK FIELD
The ACK FIELD is two bits long and contains the ACK SLOT and the ACK DELIMITER.
In the ACK FIELD the transmitting station sends two ’recessive’ bits.
A RECEIVER which has received a valid message correctly, reports this to the
TRANSMITTER by sending a ’dominant’ bit during the ACK SLOT (it sends ’ACK’).


Цитата
BIT ERROR
A unit that is sending a bit on the bus also monitors the bus. A BIT ERROR has to
be detected at that bit time, when the bit value that is monitored is different from the
bit value that is sent. An exception is the sending of a ’recessive’ bit during the
stuffed bit stream of the ARBITRATION FIELD or during the ACK SLOT. Then no
BIT ERROR occurs when a ’dominant’ bit is monitored. A TRANSMITTER sending
a PASSIVE ERROR FLAG and detecting a ’dominant’ bit does not interpret this as
a BIT ERROR


Надо будет у себя глянуть сколько бит длина у ACK.
Go to the top of the page
 
+Quote Post

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

 


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


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