Biblioteca DAC para FRDM-KL25Z

Periodic Interrupt Timer
Este post faz parte da série Bibliotecas de Software para FRDM-KL25Z

Olá caro leitor, este é mais um artigo da série Bibliotecas de Software para a FRDM-KL25Z. Neste artigo será feita uma breve introdução sobre conversor digital analógico, apresentar a biblioteca DAC de software para a utilização deste periférico e um exemplo de aplicação.

Introdução

Um sistema de Processamento de Sinais Digitais (PDS), de maneira bem simples, pode ser dividido em três blocos, são eles: aquisição do sinal e conversão, processamento digital do sinal e reconstrução do sinal.

Diagrama de bloco Processamento Digital de Sinal - Biblioteca DAC
Diagrama de bloco Processamento Digital de Sinal

Aquisição de sinal é a primeira etapa de um processamento digital de sinais, responsável por traduzir o sinal analógico que varia continuamente em uma série de níveis discretos. Essa etapa é composta por filtros e conversor analógico-digital (ADC).

O segundo item é a etapa de processamento digital, é neste bloco que serão realizadas todas as operações tais como: remoções de interferências indesejadas; aumento ou redução de amplitude ou da frequência; entre outras operações. De acordo com a aplicação, essa tarefa pode ser realizada por um DSP – Digital Signal Processor (Processador de Sinais Digitais), microprocessador ou microcontrolador.

O último item de um sistema de processamento digital de sinais é a parte responsável pela a reconstrução do sinal. Essa etapa fica a cargo de um Conversor Digital-Analógico (DAC). O DAC transforma uma série de códigos digitais, que representa um sinal analógico.

Para mais informações a respeito de processamento digital de sinais, recomendo a série de artigos Processamento Digital de Sinais – DSP produzidos pelo Henrique Puhlmann.

DAC – Característica e Desempenho

As principais características de conversor digital-analógico incluem resolução, precisão e linearidade. Resolução de DAC é expressa pela a equação abaixo:

Cálculo de resolução do DAC

Onde n é número de bits. Também pode-se obter a percentagem, expresso pela equação:

Cálculo porcentual do DAC

Precisão é deduzida da comparação da saída real com a saída esperada.

Linearidade ou erro linear é um desvio a partir de uma reta ideal de saída de DAC. Um exemplo é o erro de Offset, o qual corresponde ao valor de tensão de saída quando o valor de entrada é zero.

DAC da Freedom Board KL25Z

O microcontrolador MKL25Z128VLK4 possui um conversor digital-analógico de 12 bits. O sinal do DAC pode ser configurado para um pino externo ou para um comparador analógico. Também pode ser utilizado em conjunto com o DMA (Direct Memory Access).

Diagrama de bloco DAC da FRDM-KL25Z
Diagrama de bloco DAC da FRDM-KL25Z

O primeiro item a ser configurado é habilitar o Clock ao periférico. Essa operação é feita utilizando o registrador System Clock Gating Control Register 6 (SIM_SCGC6). Para habilitar o Clock deve-se utilizar a macro SIM_SCGC6_DAC0_MASK.

Detalhes do Registrador System Clock Gating Control Register 6 (SIM_SCGC6)
Detalhes do Registrador System Clock Gating Control Register 6 (SIM_SCGC6)
Bit do registrador SIM_SCGC6 responsável por habilitar o Clock ao DAC
Bit do registrador SIM_SCGC6 responsável por habilitar o Clock ao DAC

O segundo registrador que devemos configurar é DAC Status Register (DACx_SR).

Registrador DAC Control Register (DACx_C0)
Registrador DAC Control Register (DACx_C0)

O terceiro registrador a ser configurado é DAC Control Register (DACx_C0).

Escrevendo no DAC

Para realizar a escrita no conversor digital-analógico devemos utilizar dois registadores, são eles: DAC Data Low Register (DACx_DATnL) e DAC Data High Register (DACx_DATnH). O primeiro é destinado para escrever os 8 bits menos significativos e o segundo registrador é para escrever os 4 bits mais significativos.

Registrador DAC Data Low (DACx_DATnL)
Registrador DAC Data Low (DACx_DATnL)
Registrador DAC Data High (DACx_DATnH)
Registrador DAC Data High (DACx_DATnH)

Biblioteca de Software DAC

Demonstrarei a seguir a biblioteca de software com as configurações mínimas para utilizar o conversor digital-analógico, apresentando a função de inicialização e de escrita.

Nota I: O pino destinado para conversor digital-analógico é PTE30.

Pino de saída externa do DAC
Pino de saída externa do DAC

Nota II: O sinal do proveniente do conversor digital-analógico também pode ser direcionado para outro periférico do microcontrolador.

Função de inicialização do DAC e Escrita 

Arquivo dac.c

/*
 * dac.c
 *  Created on: 17/10/2017
 *      Author: Evandro Teixeira
 */
#include "dac.h"

/****************************************************************************************
*
*****************************************************************************************/
void dac_Init(void)
{
	// DAC0 clock enabled
	SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK;

	// Clear status register
	DAC0_SR = 0x00;

	// The DAC system is enabled
	DAC0_C0 = DAC_C0_DACEN_MASK ;
}
/****************************************************************************************
*
*****************************************************************************************/
bool dac_Output(uint16_t value)
{
	uint8_t msb = 0;
	uint8_t lsb = 0;

    if(value < 4096)
    {
    	msb = (uint8_t)(value >> 8);
    	lsb = (uint8_t)(value);

    	DAC0_DAT0L = lsb;
    	DAC0_DAT0H = msb;

    	return true;
    }
    else return false;
}
/****************************************************************************************/

Arquivo dac.h

/*
 * dac.h
 *
 *  Created on: 17/10/2017
 *      Author: evandro
 */

#ifndef SOURCES_DAC_H_
#define SOURCES_DAC_H_

#include "MKL25Z4.h"
#include "stdbool.h"

void dac_Init(void);
bool dac_Output(uint16_t value);


#endif /* SOURCES_DAC_H_ */

Aplicação

A aplicação com conversor digital-analógico consiste em gerar sinal analógico que se assemelhe ao sinal cardíaco.

main.c

/*
 * main.c
 *
 *  Created on: 17/10/2017
 *      Author: evandro
 */
#include "MKL25Z4.h"
#include "stdbool.h"
#include "dac.h"

const uint16_t vetor[29] =
{403,404,450,500,700,900,1100,1000,900,700,500,409,450,500,1500,
3000,4095,3000,1200,500,100,0,100,450,500,500,500,550,500};
uint32_t i = 0;
uint8_t index = 0;

int main(void)
{
    /* Write your code here */
    /* This for loop should be replaced. By default this loop allows a single stepping. */

	dac_Init();
	for (;;)
    {
		dac_Output(vetor[index++]);
		if(index >= 29)
			index = 0;
        for(i=0;i<100000;i++);
    }
    /* Never leave main */
    return 0;
}
Representação do sinal analógico
Representação do sinal analógico

Conclusão

Neste artigo foi apresentada mais uma biblioteca de software para a Freedom Board KL25Z utilizando o periférico DAC – Conversor Digital Analógico. O arquivos aqui apresentado estão disponíveis neste Github.

Referências

Sistemas Digitais Fundamentos E Aplicações 9ª Edição, THOMAS L. FLOYD – Capitulo 13.

Reference Manuals KL25Z

Github – Library-FRDM-KL25Z

Bibliotecas de Software para FRDM-KL25Z

PIT – Periodic Interrupt Timer para FRDM-KL25Z Biblioteca de Software de DMA para FRDM-KL25Z
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
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Roitter Konrad
Roitter Konrad
09/12/2018 15:17

Por favor, poderia me explicar mais detalhadamente a parte do código, mbs = (uint_t) (valeu>>8)

Home » Software » Biblioteca DAC para FRDM-KL25Z

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: