FAVORITAR
Faça login para como favoritoFechar

Leitura dos Eixos X, Y e Z do acelerômetro LIS3DH com a Franzininho C0 via SPI

Introdução

Neste artigo, você aprenderá a configurar a Franzininho C0 para trabalhar com protocolo de comunicação SPI e realizar leituras do acelerômetro LIS3DH.

Materiais necessários: 

  • 1 Franzininho C0
  • 1 Módulo LIS3DH 

Esquema de montagem:

  • PA6 – SD0 (MISO)
  • PA1 – SCL (SCK)
  • PA2 – SDA (MOSI)
  • P4 – CS

Protocolo SPI

SPI é um protocolo de comunicação serial síncrono , full -duplex , baseado em mestre-escravo. Foi implementado pela primeira vez em 1970 pela Motorola. 

O protocolo de comunicação SPI (Serial Peripheral Interface) utiliza quatro fios principais: SCK (Clock Serial), MISO (Master-In Slave-Out), MOSI (Master-Out Slave-In) e CS (Chip Select). Diferente do protocolo I2C, que utiliza endereços para comunicação entre dispositivos, o SPI utiliza o pino CS para selecionar o escravo com o qual o mestre deseja se comunicar. Quando o mestre precisa iniciar uma comunicação com um escravo específico, ele ativa o pino CS desse escravo, levando-o para o nível lógico baixo (0). Isso estabelece o canal de comunicação exclusivo entre o mestre e o escravo selecionado.

Além disso, é preciso configurar corretamente os parâmetros CPOL (Clock Polarity) e CPHA (Clock Phase). O CPOL define o estado inativo do clock, enquanto o CPHA determina em qual borda do clock os dados serão amostrados, garantindo que a sincronização dos sinais entre mestre e escravo.

Seminário Linux Embarcado 2024: Evento Presencial em São Paulo

Participe do Seminário Linux Embarcado 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.

Inscreva-se

Para mais informações detalhadas deste protocolo recomendo a leitura de https://embarcados.com.br/spi-parte-1/  e https://embarcados.com.br/comunicacao-spi-parte-2/

LIS3DH 

O LIS3DH é um acelerômetro linear de três eixos, de alta performance e ultra baixa potência, com interface digital I²C/SPI. Oferece modos de ultra baixa potência, funções inteligentes e escalas selecionáveis de ±2g/±4g/±8g/±16g, medindo acelerações de 1 Hz a 5,3 kHz. Possui auto-teste, geradores de interrupção configuráveis, e um buffer FIFO de 32 níveis para otimizar a eficiência.

Características:

  • Tensão de alimentação: 1,71 V a 3,6 V
  • Consumo em ultra baixa potência: até 2 μA
  • Escala selecionável: ±2g/±4g/±8g/±16g
  • Interface comunicação I²C/SPI
  • Saída de dados de 16 bits
  • 2 geradores de interrupção programável (queda livre e movimento)
  • Detecção de orientação 6D/4D, queda livre e movimento
  • Sensor de temperatura e auto-teste embutidos
  • FIFO de 32 níveis, alta resistência a choques (até 10000 g)

Aplicações:

  • Funções por movimento, detecção de queda livre
  • Pedômetros, orientação de display
  • Dispositivos para jogos e realidade virtual
  • Economia de energia inteligente para portáteis
  • Reconhecimento e registro de impactos, monitoramento de vibrações

Acesse o datasheet em: https://www.st.com/resource/en/datasheet/lis3dh.pdf 

Configuração CubeMX

  1. Abra STM32Cube, crie um novo projeto e selecione o microcontrolador “STM32C011F6P6”. 
  1. Vá para a página de configurações de relógio e em HCLK digite 48 MHz para a frequência de saída desejada do sistema. Depois volte para a página de configuração dos pinos, selecione “Trace and Debug” e  habilite “Serial Wire.
  1. Para a configuração do SPI, neste exemplo, vá em “Connectivity’ > “SPI”, habilite o modo “FullDuplex Master” e  mude o “Clock Parameter” > “Prescaler (Baud Rate)” para 32. Os demais parâmetros de configuração não será necessário modificar. 
  1. Perceba que ao habilitar o SPI, o CubeMx ativa automaticamente os pinos de SCK, MOSI e MISO. O pino de CS é necessário configurar manualmente, para isso, selecione o PA4 como “GPIO_Output”.
  1. Para configurar a UART, selecione o pino PA10 como “USART1_RX” e PA9 como “USART1_TX”. Em “Connectivity” selecione a opção “USART1” e em Mode escolha o “Asynchronous”. As demais configurações deixe padrão. 
  1. Por fim, gere o código em “Project” > “Generate Code”.

Implementação Código

  1. Inicialmente, criaremos dois arquivos novos. Em “Inc” crie “lis3dh.h” e em “Src” crie “lis3dh.c”. 
  1. Após criar esses novos arquivos, acesse o arquivo lis3dh.h. Neste arquivo, vamos adicionar algumas definições (#define) dos registradores do acelerômetro LIS3DH, assim como os protótipos das funções que implementaremos em lis3dh.c.
  1. Acesse o arquivo lis3dh.c, inclua as bibliotecas necessárias e faça referência às interfaces SPI e UART que foram configuradas previamente.
  1. Ainda em lis3dh.c, criaremos as funções de leitura e escrita na SPI. Em ambas as funções, é necessário ativar e desativar o CS (Chip Select) entre as leituras ou escritas SPI, conforme explicado ao longo do artigo.
  1. Mantenha-se em lis3dh.c, adicione a função de inicialização do acelerômetro, nela vamos configurar os registradores LIS3DH_CTRL_REG1 e LIS3DH_CTRL_REG4. No LIS3DH_CTRL_REG1, ajustamos a taxa de dados e habilitamos os eixos. No LIS3DH_CTRL_REG4, configuramos o modo de comunicação (3 ou 4 fios), a escala e a resolução, conforme mostrado nas tabelas abaixo.

valor configurado no código: 0x57 = 01010111

valor configurado no código: 0xC8 = 11001000

  1. Por fim, no arquivo lis3dh.c, adicione a função de leitura de dados. Esta função lerá os valores de cada eixo do acelerômetro (vertical e horizontal) e os armazenará no array fornecido. A função faz a leitura dos registradores de saída de dados do acelerômetro e combina os bytes alto e baixo para formar os valores de 16 bits de cada eixo.
  1. Veja na imagem abaixo o código como todo do arquivo lis3dh.c
  1. Entre no arquivo main.c, faça a inclusão das seguintes bibliotecas e variáveis.
  1. Depois, modifique a função principal int main de main.c com o seguinte:

Neste código, estamos inicializando o acelerômetro LIS3DH. No loop principal, lemos os valores brutos do acelerômetro, os convertendo em valores em miligramas (mg) e, em seguida, imprimimos essas informações pela interface serial. Abaixo temos a tabela de conversão que explica o motivo pelo qual foi utilizado 16384 na conversão da aceleração sabendo que a sensibilidade foi configurada em 2g. 

  1. A imagem abaixo mostra o código main.c modificado.

Gravação

Ao finalizar o código, partiremos para gravação. Nessa etapa você pode utilizar o ST-Link seguindo as conexões da imagem abaixo e clicando em “run” no STM32CubeIde.

Ou você pode optar por utilizar um cabo usb e gravar conforme explicado no seguinte tutorial: gravar-franzininho-c0-via-stm32cubeprogrammer

Funcionamento

Conclusão

Neste artigo, demonstramos como configurar e utilizar o acelerômetro LIS3DH com a Franzininho C0 via SPI. Detalhamos a configuração do SPI e a implementação do código para inicializar o acelerômetro, ler os valores dos eixos X, Y e Z, e converter esses valores para unidades de miligravidade (mg). 

Outros artigos da série

<< Controle de LED com Botão usando Azure RTOS na Franzininho C0Medição de ângulo com acelerômetro LIS3DH e Franzininho C0 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Leitura dos Eixos X, Y e Z do acelerômetro LIS3DH com a Franzininho C0 via SPI

EM DESTAQUE

WEBINARS

LEIA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste:


Seminário de
Sistemas Embarcados e IoT 2024
 
Data: 25/06 | Local: Hotel Holiday Inn Anhembi, São Paulo-SP
 
GARANTA SEU INGRESSO

 
close-link