Configuração da taxa de transmissão do barramento CAN - veja STM32F103 como exemplo

Configuração da taxa de transmissão do barramento CAN - veja STM32F103 como exemplo

 

Configuração da taxa de transmissão

O primeiro é o significado de vários substantivos.A composição de um bit no CAN é a seguinte. Observe que a localização do ponto de amostragem está no meio de PBS1 e PBS2. Com base nesse tempo de bit, a taxa de transmissão pode ser calculada.

Unidade de tempo mínimo (Tq, Time Quantum)

Segmento de sincronização (SS, segmento de sincronização) 1Tq

Segmento de Tempo de Propagação (PTS, Segmento de Tempo de Propagação) 1-8Tq

Segmento de Buffer de Fase 1 (PBS1, Segmento de Buffer de Fase1) 1-8Tq

Segmento de Buffer de Fase 2 (PBS2, Segmento de Buffer de Fase2) 2-8Tq

Largura de compensação de ressincronização (SJW, largura de salto de ressincronização) 1-4Tq

Baud Rate Prescaler (BRP, Baud Rate Prescaler)

Explicação da taxa de transmissão CAN no manual de referência chinês

O STM32 mescla o segmento de tempo de propagação e o segmento de buffer de fase 1 para formar um novo segmento de tempo 1.

O registro de temporização do bit CAN (CAN_BTR) é usado para definir parâmetros como TS1, TS2, BRP, SJW, etc., e determina diretamente a taxa de transmissão do CAN.

SJW[1:0] largura de compensação de ressincronização;

ts1[3:0] período de tempo 1;

ts2[2:0] período de tempo 2;

BRP[9:0] divisor de taxa de transmissão;

Sim, não há configuração do segmento de sincronização SS, porque SS é sempre igual a 1 .

Além disso, também precisamos definir a frequência do relógio de APB1, STM32F1 é geralmente 36MHz (oscilador de cristal externo de 8M).

Fórmula de cálculo da taxa de transmissão CAN (registro)

A função específica da largura de compensação de ressincronização (SJW) é aumentar ou diminuir o desvio permitido da taxa de transmissão CAN, ou seja, seu tamanho não tem grande relação com o valor da taxa de transmissão, e é um tipo auxiliar, que pode ser entendido como o ajuste de precisão da taxa de transmissão. Deve-se observar aqui que esse valor deve ser projetado o maior possível para atender ao requisito de mais de 3% no teste de tolerância de largura de bits.

A fórmula é trjw=tq*(sjw+1), o que significa que para ressincronização, este parâmetro define o limite superior de quantas unidades de tempo o hardware CAN pode estender ou encurtar em cada bit. Ao escrever um programa, esse sjw geralmente é definido como 0. Muitas informações sobre essa largura de compensação de ressincronização são muito vagas, aqui vou dar um exemplo para ajudar você a entender. A função de biblioteca é usada aqui primeiro. A primeira imagem abaixo é o resultado da taxa de transmissão detectado pelo analisador USBCAN para CAN_SJW_4tq. Existem 5 taxas de transmissão que podem realizar a comunicação CAN. A segunda imagem abaixo é o resultado da taxa de transmissão detectado pelo analisador USBCAN para CAN_SJW_1tq. Neste momento, apenas 3 taxas de transmissão podem realizar a comunicação CAN. Ou seja, o desempenho de tolerância a falhas torna-se menor. Se esse valor deve ser maior ou menor será estudado no futuro.

No caso de CAN_SJW_4tq, o segmento de taxa de transmissão efetiva é relativamente grande

No caso de CAN_SJW_1tq, o segmento de taxa de transmissão efetiva é relativamente pequeno

registro CAN_BTR

Vamos dar um exemplo, se SJW é 0, TS1 é 8, TS2 é 7 e BRP é 3, então a taxa de transmissão deve ser 36M/[(1+9+8)*4]=500kbps.

Configuração da taxa de amostragem

Além da taxa de transmissão, também devemos considerar uma fórmula chamada taxa de amostragem . Esta fórmula é a seguinte. De fato, podemos ver que a taxa de amostragem representa a posição relativa do ponto de amostragem em todo o bit. Para o exemplo acima, a taxa de amostragem é (1+8+1)/(1+8+1+7+1)=55,6%, que é baixa.

Quando a taxa de transmissão é superior a 800kbps, a taxa de amostragem recomendada é de 75%; quando a taxa de transmissão é de 500k-800kbps, a taxa de amostragem recomendada é de cerca de 80%; quando a taxa de transmissão não é superior a 500kbps, a taxa de amostragem recomendada é de 87,5%. Pontos de amostragem que se desviam muito desse padrão podem causar problemas de consistência.

O valor que precisa ser definido na função da biblioteca

Acabamos de dizer que a taxa de transmissão do CAN no microcontrolador STM32 é determinada principalmente por 4 parâmetros. Eles são a unidade de tempo de salto de ressincronização (tsjw), a unidade de tempo do segmento de tempo 1 (tbs1), a unidade de tempo do segmento de tempo 2 (tbs2) e o divisor de taxa de transmissão (brp). Correspondendo às funções da biblioteca do microcontrolador , elas correspondem a quatro parâmetros, como CAN_SJW, CAN_BS1 (ou seja, tbs1+1), CAN_BS2 (ou seja, tbs2+1) e CAN_Prescaler. Só precisa completar a configuração desses 4 parâmetros na função da biblioteca. Por exemplo, defina CAN_SJW=1tq, CAN_BS1=6tq, CAN_BS2=1tq, CANPrescaler=9, então a taxa de transmissão=36M/[(1+6+1)*9]=500Kbps.

Taxa de amostragem = (1+6)/(1+6+1)=87,5%. Deve-se observar que CAN_SJW não participa do cálculo de nenhuma fórmula . A posição da fórmula da taxa de transmissão é o segmento SS, portanto é 1.

Aqui eu recomendo um software de cálculo de taxa de transmissão STM32-CAN muito bom, can_config.exe, se necessário, deixe uma mensagem. Mas neste software, a afirmação de que CAN_SJW participa do cálculo da taxa de transmissão mencionada na fórmula está errada e precisa ser corrigida.

Notas de Projeto de Hardware

Ao projetar hardware, preste atenção à seleção de chips transceptores.Se o sistema for alimentado por 5V, você pode escolher NXP's 82C251, TJA1050, MCP2551, etc., e se você usar fonte de alimentação de 3,3V, você pode escolher VD230. O pino 8 de alguns chips tem função de despertar, então você precisa ler o datasheet detalhadamente. O CAN_TX do pino MCU deve ser conectado ao TXD do transceptor, e o CAN_RX do MCU deve ser conectado ao RXD do transceptor. A figura abaixo ilustra o fluxo do sinal. Para MCU, CAN_TX é uma saída , para MCU, CAN_RX é uma entrada .

outro

Largura do salto de sincronização (SJW) : O valor de SJW afeta diretamente a faixa ajustável do segmento do buffer de fase durante a ressincronização. O valor de SJW pode ser selecionado entre 1 e 4. Escolhemos 3 e 4 para fazer o barramento obter uma tolerância de taxa de transmissão mais ampla;

Tempos de amostragem : divididos em amostragem única e amostragem tripla. Embora a amostragem tripla tenha sido originalmente projetada para filtrar falhas no barramento, o uso de amostragem tripla geralmente afeta o salto do SJW, então geralmente usamos amostragem única em aplicações práticas.

sugestão

As regras de seleção da taxa de transmissão são sugeridas da seguinte forma:

  1. TSEG2 >= SJW;
  2. BRP (prescaler de taxa de transmissão) deve ser o menor possível e SJW (largura de salto síncrono) deve ser o maior possível;
  3. SMP (ponto de amostragem) é selecionado entre 75% e 85%.
  4. Pegue uma única amostra.

Anexo: O tamanho do relógio do sistema definido pela placa de desenvolvimento da série pontual átomo STM32F1

SYSCLK (relógio do sistema) = 72MHz

Relógio do barramento AHB (usando SYSCLK) = 72MHz

Relógio do barramento APB1 (PCLK1) = 36MHz CAN, USB, I2C, etc.

Relógio do barramento APB2 (PCLK2) = 72MHz

Relógio PLL = 72MHz

Leitura adicional:

1. Cálculo da taxa de transmissão - barramento e interface - Electronic Engineering World Network

2. http://blog.chinaunix.net/uid-

  • arão

    aaron 2019-12-07

    A pesquisa do autor é muito aprofundada, obrigado por compartilhar! Todas as outras peças são aprovadas, mas há objeções ao valor de SJW. Tomar um valor grande de SJW certamente aumentará a tolerância da precisão do relógio, mas também fará com que a posição do ponto de amostragem mude muito. Não há problema com a transmissão de curta distância, mas a transmissão de longa distância tem um grande atraso e mover o ponto de amostragem para frente pode causar erros de amostragem. Acho que SJW não deve exceder 1/8 de largura de bit, e a precisão da taxa de transmissão é controlada em 1% pelo oscilador de cristal, não SJW, afinal, SJW é apenas uma "medida corretiva".

    ​2​ Responder​ Não gostei​ Reportar

  • arão

    aaron respondeu a aaron 07/12/2019

    Em segundo lugar, a correção SJW é determinada julgando se o segmento SS (1 base de tempo) está sincronizado. Enquanto houver um desvio, a correção de aumento e diminuição das 4 bases de tempo realmente colocará o controlador em um estado de aumento e diminuição repetidos. Portanto, o SJW deve ser uma correção sistemática, depois de uma correção, pode persistir por muito tempo, e basta fazer apenas o suficiente.

Acho que você gosta

Origin blog.csdn.net/m0_38012497/article/details/121923813#comments_27320576
Recomendado
Clasificación