Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Como gerar uma forma de onda de alta precisão usando um DAC e um PCB personalizado

Neste artigo, nós ' Desenvolverei firmware que servirá como base para geração de sinal de alta precisão e alta velocidade.
Recentemente, projetei um gerador de forma de onda arbitrária (AWG) PCB que é construído em torno de um microcontrolador C8051F360 e um TxDAC da Analog Devices.



Esses dois ICs se comunicam por meio de uma interface paralela que me permite gerar sinais analógicos de alta frequência, buscando a taxa máxima na qual o microcontrolador pode mover dados para o DAC.

Neste artigo, não vou sair do meu caminho para explicar aspectos do design de hardware, porque discuti extensivamente o esquema e o layout em uma série de artigos técnicos preparatórios. Três desses artigos se concentram em uma parte específica do esquema (ou seja, o microcontrolador, o DAC e os circuitos de saída do DAC) e o quarto cobre o layout.


O objetivo


O objetivo deste projeto é criar a estrutura de firmware que nos permitirá mover convenientemente os dados digitais do microcontrolador para o DAC, e então converter esses dados em um sinal analógico. Esta placa AWG tem potencial para algumas funcionalidades interessantes, mas a etapa mais importante é estabelecer uma interface confiável, extensível e de alta precisão entre o MCU e o DAC. Verificaremos essa interface gerando uma forma de onda de rampa e realizando algumas análises de osciloscópio.


Os requisitos

Sincronização de alta precisão


Muitas aplicações de microcontroladores têm pouca ou nenhuma necessidade de temporização altamente precisa. É por isso que muitas vezes podemos criar dispositivos de sucesso em que a única fonte de relógio é o oscilador interno de baixa precisão do MCU. Mas o AWG é diferente. Queremos gerar sinais que sejam tão consistentes quanto possível com as formas de onda matemáticas idealizadas que servem como material de origem, e isso significa que precisamos de frequências de sinal previsíveis e uma taxa de amostragem DAC consistente.


Uso eficiente do processador


Embora este PCB em particular seja quase totalmente dedicado à geração de formas de onda, precisamos garantir que essa estrutura de firmware mais hardware possa ser prontamente incorporada em outros aplicativos. Consequentemente, queremos que nosso firmware seja capaz de gerar formas de onda estáveis ​​e de alta precisão, mas sem deixar o processador completamente indisponível para outras tarefas.


Velocidade máxima


Vivemos em um mundo de alta frequência e este AWG será de pouca utilidade se atingir no máximo 1 kHz. Com toda a justiça, este é um design simples e de baixo custo, e não podemos esperar que ele crie formas de onda DQPSK de 915 MHz prontas para transmissão em banda ISM. Mas queremos obter o máximo possível de largura de banda desse dispositivo, e isso é ainda mais desafiador quando lembramos que a frequência de amostragem é significativamente mais alta do que a frequência do sinal real. Apesar do teorema de Nyquist-Shannon, eu quero pelo menos cinco amostras por ciclo, e dez é minha preferência. Portanto, mesmo que consigamos empurrar a taxa de amostragem para 10 MHz, nossas formas de onda cairão na faixa de 1–2 MHz.

O design de hardware já reflete a importância da otimização para velocidade:eu escolhi um microcontrolador que opera em frequências de núcleo de até 100 MHz e implementei um barramento paralelo que minimiza a sobrecarga necessária para mover dados da memória do MCU para os pinos de entrada DAC.


Taxa de amostragem


A placa AWG possui uma fonte de clock de alto desempenho (um oscilador MEMS com estabilidade geral de frequência de ± 50 ppm). O firmware precisa usar essa base de tempo para criar um sinal de relógio estável que conduza o circuito de atualização do DAC. Quando quero sinais de temporização de alta qualidade, sempre recorro ao hardware e, neste caso, estou usando a matriz de contadores programáveis ​​(PCA) para gerar um relógio de 500 kHz a partir do oscilador externo de 10 MHz.

Usei o programa Silicon Labs Config2 para minha configuração de hardware, porque o C8051F360 não é compatível com a ferramenta de configuração incorporada ao Simplicity Studio. Aqui está a configuração geral para o módulo PCA:



O PCA está ativado e a base de tempo é o relógio do sistema. Neste ponto, a frequência do relógio do sistema é a mesma que a frequência do oscilador externo (10 MHz), mas mais tarde usaremos o loop de fase bloqueada do microcontrolador para obter uma frequência central mais alta. O sinal de relógio do DAC é gerado pelo módulo PCA 0 configurado para o modo de "saída de frequência":



Vamos dar uma olhada no clock da taxa de amostragem. Meu escopo MDO3104 da Tektronix tem alguns recursos de medição bastante avançados que nos ajudarão a avaliar sua qualidade.



Conforme confirmado pelas medições exibidas na parte inferior da captura do osciloscópio, a frequência é exatamente a esperada (500 kHz) e também temos um ciclo de trabalho perfeito de 50%; além disso, as estatísticas “Min” e “Max” indicam que a frequência e o ciclo de trabalho são estáveis ​​ao longo do tempo.

Uma adição particularmente útil a esta funcionalidade de medição é o desvio padrão (“Std Dev”). O desvio padrão indica o quanto os valores tendem a se desviar da média e, nesta situação, é uma maneira rápida e fácil de avaliar imperfeições na frequência e ciclo de trabalho do sinal de relógio. Ambos os desvios padrão são muito baixos:13,54 Hz é 0,0027% da frequência nominal e 2,117 × 10 –3 é apenas 0,0042% do ciclo de trabalho típico.

Podemos levar essa análise um passo adiante, observando o histograma de uma das bordas do relógio. Se definirmos o escopo para disparar na borda descendente e, em seguida, aumentar o zoom na borda ascendente, a posição da borda ascendente mudará de acordo com o jitter do sinal. Podemos então adicionar um histograma de forma de onda horizontal para rastrear esse jitter e revelar sua distribuição. Neste caso, porém, não há muito para ver, porque o jitter é muito baixo.


A interrupção externa


Agora temos uma onda quadrada que controla os circuitos de saída do DAC; a próxima tarefa é sincronizar as atualizações de dados do MCU com esta onda quadrada. Faremos isso anexando uma interrupção externa ao pino PCA que emite o sinal de clock. O DAC retém os dados de entrada no aumento extremidade do relógio, então queremos atualizar os sinais de dados na queda Beira. Essa técnica de borda oposta é a maneira fundamental de garantir que os dados digitais sejam atualizados e estabilizados antes que o dispositivo de entrada receba a transição de clock ativa.

Portanto, habilitei a interrupção externa 0 (denotada / INT0), conectei-a ao pino de saída do sinal de clock (P0.7) e tornei-a sensível à borda descendente.













Você provavelmente está acostumado a usar uma interrupção externa para monitorar uma entrada sinal, mas, neste caso, ele pode sincronizar eventos de firmware com a mesma eficácia com um sinal gerado pelo próprio microcontrolador. Esta é realmente uma estratégia particularmente útil quando você está lidando com uma tarefa de tempo crítico, porque a interrupção externa 0 é a interrupção de maior prioridade e porque seu sinalizador de interrupção pendente é apagado automaticamente pelo hardware (o que elimina qualquer tempo necessário para limpar o sinalizador usando uma declaração de firmware).


O ISR


A ação principal ocorre na rotina de serviço de interrupção / INT0. O próximo byte de dados DAC é recuperado da memória (ou gerado diretamente pelo microcontrolador) e então direcionado para P2; Usei uma declaração #define para tornar “DAC_WORD” uma alternativa para “P2”:

SI_INTERRUPT (INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

A variável crítica no esforço para maximizar a taxa de atualização do DAC é a quantidade de tempo necessária para executar as instruções no ISR. (Neste exemplo, temos apenas uma instrução, mas nem sempre será o caso.) O ISR deve ser chamado uma vez para cada borda ativa do relógio DAC, e não podemos chamar o ISR antes de terminar a execução. Então, quando tentamos empurrar nossa largura de banda ao máximo, precisaremos fazer o que pudermos para minimizar o tempo de execução do ISR e, em seguida, definiremos nossa frequência de relógio DAC de acordo.

A única instrução mostrada acima (DAC_WORD–) cria uma forma de onda de rampa, porque o valor DAC diminui linearmente para zero e então passa para 255 e começa a diminuir novamente. Aqui está a saída do DAC:



Você deve ter notado que as seções de rampa analógica aumentam em direção à tensão máxima, enquanto os valores DAC diminuem em direção a zero. Isso ocorre porque o amplificador de saída do DAC usa uma configuração de inversão.

Vamos dar uma olhada em uma última captura de escopo antes de terminar.

Leia mais informações….

Como gerar uma forma de onda de alta precisão usando um DAC e um PCB personalizado

Processo de manufatura

  1. Sensor de temperatura Python e Raspberry Pi
  2. Como verificar e calibrar um sensor de umidade
  3. Como gerar uma forma de onda de alta precisão usando um DAC e um PCB personalizado
  4. Faça você mesmo voltímetro usando Arduino e Smartphone
  5. Rádio FM usando Arduino e RDA8057M
  6. Como fazer uma bússola usando Arduino e IDE de processamento
  7. Como escolher uma empresa de fabricação de protótipos de PCB
  8. Como a fabricação de PCB é tão precisa?
  9. Erros comuns de fabricação de PCB e como corrigi-los
  10. Placas de circuito impresso e como elas funcionam?