Skocz do zawartości

Jak ustawic parametry szybkości przy transmisji CAN


Pomocna odpowiedź

Napisano

Cześć.

Czy może mi ktoś z Was wytłumaczyć jak ustawić parametry transmisji CAN

Dla prędkości 100kb/s wygląda to tak:

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;    
     CAN_InitStructure.CAN_BS1=CAN_BS1_7tq;    
     CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;   
     CAN_InitStructure.CAN_Prescaler=24;       
     CAN_Init(CAN1, &CAN_InitStructure);

dla prędkości 200kbs jest coś takiego:

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;    
     CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;    
     CAN_InitStructure.CAN_BS2=CAN_BS2_6tq;   
     CAN_InitStructure.CAN_Prescaler=15;       
     CAN_Init(CAN1, &CAN_InitStructure);

A jak ustawić dla prędkości 50kbs? Zewnętrzny kwarc 25MHz rdzeń taktowany 72MHz

Nie wiem co tam wpisać w te pola oraz skąd to się bierze?

Tutaj masz całkiem dobry artykuł opowiadający o samym CANie oraz o jego konfiguracji w STMie. Jeżeli przyjmiesz najbardziej powszechne wartości, czyli:

SYNC_SEG                          = 1
PROP_SEG + PHASE_SEG1       = BS1 = 10
PHASE_SEG2                  = BS2 = 7

To możesz obliczyć sobie preskaler według (zakładjąc, że częstotliwość PCLK1 jest równa standardowej częstotliwości 36MHz):

div = 36 000 000 / prędkość * (BS1 + BS2 + 1) = 36 000 000 / (50 000 * 18) = 40
... najbardziej powszechne wartości ...

Są to parametry ustawiane według uznania i doświadczenia programisty. Na przykład jeśli masz krótką magistralę i dużo node'ów to dla oszczędności energii możesz ustawić mniejsze wartości BS1 i BS2 (wtedy będziesz mógł ustawić większy dzielnik częstotliwości). Z moich niewielkich doświadczeń te wartości nie mają większego znaczenia dopóki nie ustawiasz im jakichś granicznych wartości.

Chciałem się jeszcze zapytać o samo podłączenie do linii CAN. Jeśli mam działającą sieć np komunikacja pomiędzy dwoma modułami i podpinam się do tego z osobnym modułem który zasilany jest z odrębnego źródła to czy ja muszę podpiąć też GND? Nie mogę nic na ten temat znaleźć a jedyne co mi się udało to że GND jest opcjonalna, ale w jakim sensie to już nie.

Faktycznie, CAN jest siecią różnicową, co mogłoby wykluczać konieczność podłączenia masy, jednak tego nie próbowałem i nie wiem. Może ktoś bardziej doświadczony się wypowie.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...