Skip to content

Latest commit

 

History

History
258 lines (249 loc) · 14.8 KB

README.md

File metadata and controls

258 lines (249 loc) · 14.8 KB

Sistema de comunicação serial com Raspberry PI, FPGA Cyclone IV e Sensor DHT11

Este projeto consiste na implementação de um protótipo de sistema para medição de temperatura e umidade através do sensor DHT11. O produto implementa comunicação serial entre o SBC Raspberry Pi Zero, de onde partem as solicitações de medição e a FPGA Cyclone IV, que atua como plataforma para ativação e leitura do sensor.

O sistema é composto por duas partes principais:

  • Raspberry Pi Zero: Módulo responsável pela requisição de medição, usando Linguagem C e Assembly na implementação da UART desenvolvida ainda no Problema 1;

  • FPGA: Implementação em Verilog da UART para comunicação serial e dos módulos de ativação e comunicação com o sensor.

Como executar

Para executar, é necessário dispor de todos os itens listados na seção de recursos.

Siga as etapas a seguir:

Realize o download do projeto

$ git clone https://github.com/amandassa/sensor-via-uart.git

Compilando o projeto na Raspberry Pi Zero

$ cd /sensor-via-uart/Problema 2/sbc

Tranfira os seguintes arquivos para o Raspberry PI Zero:


Execute os seguintes comandos:

$ make

$ sudo ./pbl2

Compilando o projeto na FPGA

$ cd /sensor-via-uart/Problema 2/fpga

Crie um projeto no Altera Quartus Prime Lite Edition 21, especificamente para a família EP4CE30F23 e importe os seguintes arquivos:


Assegure-se de que o arquivo "uart0.v" está definido como top-level do projeto para compilação. Com o projeto compilado, configure os seguintes pinos:

Node Name Direction Location
DHT_DATA Output PIN_H17
clk_50mhz Output PIN_T1
in Input PIN_E13
out Output PIN_E13

Carregue o projeto na FPGA com a ferramenta Programmer do Quartus Lite.

Assegure-se de que os componentes estão devidamente conectados para a comunicação serial: O TX (out) de um módulo deve estar ligado ao RX (in) do outro, assim como o ground (GND) dos módulos que devem estar conectados, como mostra o diagrama. Além disso, o sensor também deve estar devidamente conectado com o pino referente a DHT_DATA do módulo verilog.


Imagem 01 - Diagrama ilustrativo da conexão adequada do circuito.

Funcionamento do sensor (DHT11)

Especificação

O sensor DHT11 possui 4 pinos:

  1. VCC
  2. DATA
  3. NULL
  4. GND

O 2º pino, o pino de dados caracteriza-se como entrada e saída, pois, este recebe as requisições e realiza o envio dos dados ao MCU (Micro-computer Unite).


Imagem 02 - Especificação do DHT11. Fonte: Datasheet

Comunicação

Para iniciar a comunicação, o MCU deve enviar ao sensor um sinal em nível de tensão baixo por 80ms, depois em nível alto por 18us. Como resposta, o sensor enviará sinal baixo por 80us seguido de alto por mais 80us. Em seguida, o sensor envia sinal baixo por mais 50us e inicia a transmissão dos 40 bits de mensagem contendo a medição do ambiente e o checksum.

A partir desse momento a resposta do sensor é enviada como um databus contendo sinais em nível lógico alto que podem ser interpretados de acordo com sua duração:

  • 0, se alto por cerca de 28us
  • 1, se alto por cerca de 70us
  • Os bits de mensagem a serem decodificados são enviados pelo sensor alternando entre sinais de nível lógico baixo com duração de 50us. Após o envio, o sensor volta ao modo de espera e aguarda uma nova requisição.


    Imagem 03 - Processo de comunicação. Fonte: Datasheet

    Breve descrição da implementação

    Módulo Raspberry PI Zero

    Neste módulo, a implementação do protocolo UART para Raspberry PI desenvolvida em Assembly foi utilizada como uma biblioteca C para estabelecer a comunicação RS-232 do SBC. As funções utilizadas foram:

  • uartConfig(): Configura a UART do SBC definindo os parâmetros de baud rate, stop bits, ativação e verificação da fila de transmissão.
  • uartPut(): Envia o byte de mensagem pela via serial. Caso receba mais que 8 bits de mensagem, apenas os 8 menos significativos vão compor a mensagem enviada.
  • uartGet(): Recebe o byte de mensagem lendo o registrador DATA_REGISTER.
  • Essas funções são invocadas no programa C que faz a leitura das solicitações via terminal.

    Módulo FPGA

    UART

    Para implementação da UART na FPGA foram desenvolvidos os módulos transmitter e receiver baseados em máquina de estados finitos de Mealy, ambas compostas pelos três estados:

  • START:
  • Estado inicial e de espera, permanece nele até que seja recebido sinal de "enable" que indique início do recebimento de dados (serial, no caso de RX ou paralelo, no caso de TX). Enquanto a entrada de EN não é recebida, este estado mantém o sinal de saída no TX em nível alto, que é o sinal de bus IDLE da comunicação.

  • DATA:
  • Estado de recebimento de dados. No RX, como o recebimento é serial os dados são armazenados em um buffer para serem transmitidos por um barramento. Já em TX os dados são recebidos em paralelo e serializados por um envio sob iteração.

  • STOP:
  • Estado de fim da recepção e transmissão de dados. No RX, os sinais armazenados no buffer são transmitidos pelo barramento de saída e em TX é feita a reinicialização do contador de iteração. Ao fim deste estado ambos os módulos TX e RX voltam para START.

    Decodificador

    O módulo decodificador de requisições possui as funções de:

  • Receber do RX a solicitação de medição
  • Ativar o módulo do sensor e receber sua resposta
  • Ativar e transmitir para TX o sinal de resposta referente à medição solicitada
  • Para isso, foram implementados quatro estados:

  • START: Estado inicial. Permanece nele até que seja recebido sinal de enable. Caso ativado, ativa o módulo do sensor.
  • WAIT_DHT11: Estado de espera da sincronização do sensor. Permanece nele até que a mensagem do sensor seja recebida.
  • DATA: Estado de leitura de dados do sensor. Neste estado, a seção de mensagem do sensor requisitada é direcionada para a saída. Os bits de 0 a 7 da mensagem correspondem ao valor inteiro da medição de umidade. Os bits 16 a 23 correspondem ao inteiro da temperatura. Os últimos 8 bits são checksum.
  • STOP: Neste estado, o módulo do sensor é desativado e TX é ativado, permitindo que os dados sejam enviados para o SBC.
  • Controle do sensor

    Este módulo é responsável por estabelecer a comunicação com o sensor DHT11 e encaminhar sua resposta. O módulo foi implementado como uma máquina mealy de 12 estados. Este processo segue os passos necessários para realizar a leitura seguindo o protocolo de funcionamento do sensor:

  • Enviar o sinal de sincronização e aguardar a resposta da sincronização do sensor
  • Assim que a sincronização é completada, ocorre a decodificação de bits de mensagem de acordo com o período de tempo em que o sinal de resposta permanece em alto.
  • Quando os 40 bits estão prontos no buffer, o barramento com a resposta é liberado para o módulo seguinte.
  • Testes


    Imagem 04 - Montagem do circuito.


    Imagem 05 - 40 bits de resposta do DHT11

    Conclusões

    O produto-solução proposto implementa comunicação serial RS-232 entre um SBC (Raspberry Pi Zero) e a FPGA Cyclone IV. Com os módulos de controle desenvolvidos, é possível realizar requisições de medição de temperatura e umidade por meio do sensor DHT11, que é ativado e responde adequadamente aos comandos do sistema. No entanto, o retorno da leitura vinda da FPGA para o SBC ainda apresenta falhas. Por meio de testes foi possível identificar que a comunicação entre os componentes é interrompida a partir da integração do módulo do sensor. Possíveis ajustes futuros devem incluir a correção do problema entre os módulos de resposta do sensor e o TX da FPGA, para que seja possível receber adequadamente os 8 bits de mensagem solicitados e retorná-los no terminal de interação com o usuário.

    Anexos


    Imagem 06 - Placa Raspberry Pi Zero. Fonte: Embarcados


    Imagem 07 - Kit de Desenvolvimento Altera FPGA Mercurio IV. Fonte: IFSC