Bibliotecas para ADC da FRDM-KL25Z

Biblioteca de GPIO

Olá caro leitor, este é segundo artigo da série Bibliotecas de Software para FRDM-KL25Z, onde apresentamos as bibliotecas para ADC da FRDM-KL25Z (Freedom Board KL25Z).

Como já foi dito no artigo anterior, essa biblioteca é parte de um conjunto de bibliotecas para outra biblioteca que estou desenvolvendo, para utilizar a FRDM-KL25Z em conjunto com o KiT de Automação Open Hardware.

No primeiro artigo foram apresentadas as funções de acesso aos pinos GPIO (General Purpose Input/Output). E neste segundo vamos apresentar as funções de leitura dos canais do Conversor Analógico Digital (ADC). 

As bibliotecas apresentadas são compatíveis com o Kinetis Design Studio IDE e CodeWarrior IDE. Também são facilmente portáveis para as demais placas Freedom Board. Essa biblioteca foi desenvolvida com base na série de artigos sobre o Desenvolvimento de sistemas embarcados com a KL05Z, escrita pelo Rodrigo Almeida.

Conversor Analógico Digital

O microcontrolador presente na Freedom Board FRDM-KL25Z possui conversor analógico digital de 16 bits por Aproximação Sucessiva (SAR ADC) e 14 canais. O ADC suporta tanto gatilhos de software quanto de hardware.

Inicializando o ADC

A seguir serão apresentadas as configurações mínimas para realizar a leitura do conversor analógico digital.

Configurando o CLOCK

O primeiro passo a ser dado é configurar o clock para o periféricos ADC. Para realizar operação deve configurar o registrador SIM_SCGC6 (System Clock Gating Control Register 6). Essa operação deve ser feita utilizando a macro SIM_SCGC5_ADC0_MASK.

Bibliotecas para ADC da FRDM-KL25Z: Registrador SIM_SCGC6
Registrador SIM_SCGC6

A seguir o código fonte demonstrando essa operação: 

Configurando o ADC

Para configurar o modo de operação do ADC deve-se usar o registrador ADC0_CFG1. Nesse registrador vamos configurar os seguintes itens: resolução da conversão, a fonte de clock e divisor do Clock.

Registrador ADC0_CFG1
Registrador ADC0_CFG1

Para configurar a resolução da conversão do ADC, são destinados dois bits do registrador ADC0_CFG1. São os bits 2 e 3 (item MODE do registrador). A seguir a tabela com as opções resoluções do conversor analógico digital.

Essa configuração dever ser feita utilizando a macro ADC_CFG1_MODE( n ). A variável n é o valor descrito na tabela.

Seleção do modo de conversão do ADC.
Seleção do modo de conversão do ADC.

Configurando a fonte de clock

Para configurar a fonte de Clock, são reservados os dois primeiros bits do registrador ADC0_CFG1 (1 – 0 ADICLOK). Essa configuração dever ser feita utilizando a macro ADC_CFG1_ADICLK( n ). A variável n é o valor descrito na tabela.

Seleção do clock de entrada.
Seleção do clock de entrada.

Divisor do Clock

O último item a ser configurado é o divisor interno do Clock do ADC. Este também é configurado em dois bits do registrador ADC0_CFG1, é o item ADIV. Essa configuração dever ser feita utilizando a macro ADC_CFG1_ADIV( n ). A variável n é o valor descrito na tabela.

Seleção do divisor do clock.
Seleção do divisor do clock.

A seguir o código fonte header: 

Código fonte da função de inicialização adc_init()

Lendo o ADC

Uma vez criada a função para inicializar o conversor analógico digital, agora devemos criar a função  para realizar a leitura dos canais ADC.

A seguir o código fonte da função para realizar a leitura do canal ADC: 

A função adc_read recebe como parâmetro o número do canal a ser lido e retorna o resultado da conversão.

Na primeira linha temos o registrador ADC0_SC1A, que é responsável iniciar a conversão. Esse registador recebe o resultado da operação “and” entre o número do canal a ser lido e a macro “ADC_SC1_ADCH_MASK”. Essa operação tem como objetivo escrever nos bits ADCH do registrador.

Registrador ADC0_SCIA
Registrador ADC0_SCIA

Na segunda linha verifica-se se a conversão está em andamento. Nesta etapa vamos checar o registrador ADC0_SC2, especificamente o bit ADACT. Para realizar esta tarefa deve-se utilizar a macro ADC_SC2_ADACT_MASK.

Registrador ADC0_SC2
Registrador ADC0_SC2

Na terceira linha fica aguardando o termino da conversão. Essa etapa verifica o bit COCO do registrador ADC0_SC1A. Para essa etapa deve utilizar a macro ADC_SC1_COCO_MASK.

E por fim, na ultima linha é retornado o conteúdo do registrador ADC0_RA, que contém o resultado da conversão.

Exemplo de Aplicação 

O projeto que demostra o usa da biblioteca ADC é bem simples. O seu algoritmo é:

  • Realiza a leitura do canal ADC_5 (PTB1);
  • Se o valor do resultado da conversão for maior do 50000, acende o led vermelho e apaga o led verde;
  • Caso o valor seja menor, apaga o led vermelho e acende o led verde.

A seguir o código fonte do projeto: 

Conclusão 

Neste artigo foi apresentada a biblioteca do conversor analógico digital para a Freedom Board KL25Z e projeto para demonstrar a utilização da biblioteca.

Nos próximos artigos vamos apresentar outras bibliotecas (DAC, Timer, UART e entre outras) para serem utilizadas com esse hardware.

E por fim fica o meu convite para você leitor a contribuir com o desenvolvimento dessa biblioteca. Seja simplesmente testando ou colocando a mão na massa, melhorando as funções existentes ou até criando novas. A biblioteca se encontra no meu GitHub.

Referências 

FRDM-KL25Z
Reference Manual
Diretório do GitHub
https://en.wikipedia.org/wiki/Successive_approximation_ADC
https://community.nxp.com/docs/DOC-102951

Outros artigos da série

<< Biblioteca de GPIO para a placa FRDM-KL25ZBiblioteca SPI para a placa FRDM-KL25Z >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services