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.
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:

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

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).

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.

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

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.


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.

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;
}

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.






Por favor, poderia me explicar mais detalhadamente a parte do código, mbs = (uint_t) (valeu>>8)
Olá Roitter Konrad, Desculpa pela demora em responder.
Essa é operação para o deslocamento de Bit.
Neste exemplo em especial, estou deslocando os 8 bits mais significado da variável “value” para salvar na variável “msb”, que é uma variável de 8 bits.
Eu sugiro que você veja o artigo do Fabio Souza:
https://embarcados.com.br/bits-em-linguagem-c/