Índice:

Osciloscópio de rastreamento duplo: 11 etapas (com imagens)
Osciloscópio de rastreamento duplo: 11 etapas (com imagens)

Vídeo: Osciloscópio de rastreamento duplo: 11 etapas (com imagens)

Vídeo: Osciloscópio de rastreamento duplo: 11 etapas (com imagens)
Vídeo: Osciloscópio Não Faz Diferença? Eletrônica Fácil 2024, Novembro
Anonim
Osciloscópio Dual Trace
Osciloscópio Dual Trace

Quando eu construí meu mini osciloscópio anterior, eu queria ver o quão bem eu poderia fazer meu menor microcontrolador ARM um STM32F030 (F030) funcionar, e ele fez um bom trabalho.

Em um dos comentários, foi sugerido que um "Blue Pill" com um STM32F103 (F103) poderia ser melhor, menor do que a placa de desenvolvimento com o F030 e possivelmente ainda mais barato. Mas para o mini osciloscópio eu não usei a placa de desenvolvimento, mas o F030 em uma placa SMD-DIP ainda menor, então lá um Blue Pill certamente não seria menor e eu duvido que seria mais barato também.

O código agora está disponível no Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Suprimentos

Lista de peças: - caixa de plástico - perfboard (placa protótipo dupla face 8x12cm) - Blue Pill - ST7735s display TFT - bateria de íon-lítio - HT7333 regulador de baixa queda de 3,3 V - MCP6L92 opamp duplo - placa TSSOP8 para DIP8 - cristal de 12 MHz (não necessário) - codificador giratório mais botão (2x) - interruptor de alimentação - terminais banana (4x) - placa do carregador de íons de lítio - vários resistores e capacitores - espaçadores de náilon, porcas e parafusos

Ferramentas:

- estação de solda - solda 0,7 mm - algum fio - cortador lateral - vidros e lupa - broca - multímetro - osciloscópio - STLink-V2

Programas:

- STM32IDE - STM32CubeMX - STLink Utility - Biblioteca LowLayer - biblioteca adaptada para ST7735s - Notepad ++ - Kicad

Etapa 1: modo intercalar ou simultâneo

Modo intercalado ou simultâneo
Modo intercalado ou simultâneo
Modo intercalado ou simultâneo
Modo intercalado ou simultâneo

Pílula azul

Mas a ideia estava lá, e eu sabia que o F103 tem dois ADCs! E se eu usasse esses dois ADCs juntos no modo "intercalar", algo que fiz antes com o STM32F407 (F407). A velocidade de amostragem dobraria. Isso, combinado com um microcontrolador mais rápido, seria um grande sucessor do mini osciloscópio.

Modo intercalado Estranhamente, os ADCs no F103 são menos avançados do que no F030 (e no F407), você não pode escolher a resolução. Mais importante é que você também não pode alterar o tempo entre os dois ADCs. Agora, quando você usa o modo de intercalação, geralmente deseja a amostragem o mais rápido possível com o menor tempo possível entre as amostras, mas com um osciloscópio é necessário alterar o tempo. Talvez ainda possa ser feito, não sou um projetista profissional de osciloscópios, mas abandonei o plano de usar o modo intercalar.

Modo simultâneo

Mas, tendo dois ADCs oferece muito mais opções, os dois ADCs também podem ser configurados para o modo "regular-simultâneo". Que tal um osciloscópio de traço duplo?

Tendo decidido tentar fazer um osciloscópio de traço duplo, eu também queria ter uma sensibilidade de entrada variável, uma opção que eu não tinha no mini osciloscópio. Isso significa um atenuador (e amplificador) nas entradas. E talvez eu quisesse ainda mais? Então fiz uma pequena lista de "agradáveis para ter".

LISTA DE DESEJOS

dois canais

sensibilidade variável em ambos os canais

acionando em ambos os canais

nível de disparo variável em ambos os canais

deslocamento variável

bateria única

caber na mesma caixa do mini-osciloscópio

Etapa 2: Prototipagem

Prototipagem
Prototipagem
Prototipagem
Prototipagem

Como de costume, comecei esses projetos em uma placa de ensaio. (Ver foto) E antes de soldar tudo na perfboard procuro saber se e como vai caber na caixa do projeto escolhido. Se encaixa, mas apenas por enquanto. Algumas partes estão escondidas sob a tela, outras sob a Pílula Azul. E, novamente, assim como para a maioria dos meus projetos, este é um projeto único e não vou projetar um PCB para ele.

Etapa 3: Atenuadores

Atenuadores
Atenuadores

Em osciloscópios regulares, os atenuadores de entrada são circuitos que alteram a atenuação e a amplificação comutando resistores de entrada e saída com pequenos relés de sinal. Embora eu tenha alguns desses relés, sei que eles não mudarão a menos de 4 Volts, o que significa que só funcionarão com uma bateria de íon de lítio totalmente carregada (4,2 V). Então, eu precisava de outra maneira de trocar esses resistores. Claro que eu poderia apenas instalar interruptores mecânicos, mas isso certamente não caberia mais na caixa do projeto em mente, talvez eu pudesse tentar um potenciômetro digital melhor novamente (o que tenho é muito barulhento).

Então pensei em "interruptores analógicos", com os quais eu mesmo posso fazer um potenciômetro digital. Na minha coleção de peças encontrei o CD4066 com quatro interruptores analógicos. A ideia é fazer o resistor de feedback de uma variável opamp, alternando os resistores de entrada e saída em paralelo ao resistor de feedback.

Funciona muito bem, mas com apenas 4 interruptores no 4066 e 2 canais não foi possível fazer mais do que três níveis de sensibilidade. Escolhi 500mV, 1V e 2V por divisão, pois esses são os níveis de tensão que mais uso. A tela é dividida em 6 divisões, de modo que os intervalos de -1,5 V a + 1,5 V, -3 V a + 3 V e -6 V a 6 V.

Com o "aterramento virtual" você pode mover essas faixas para cima e para baixo, de forma que até 0v a + 12V seja possível.

Etapa 4: Terreno Virtual

Terreno Virtual
Terreno Virtual
Terreno Virtual
Terreno Virtual

Como o osciloscópio usa um único barramento de alimentação (3,3 V), os opamps precisam de um nível de solo virtual ou não funcionarão. Este nível de terra virtual é feito com PWM em um canal de saída do TIM4, o ciclo de trabalho muda de apenas alguns por cento para quase cem por cento. Um filtro passa-baixa com um resistor de 1k e um capacitor de 10uF transforma isso em uma tensão de (quase) 0V a (quase) 3,3V. A frequência da onda quadrada é pouco abaixo de 100 kHz, então o filtro passa-baixa simples é bom o suficiente.

Um pouco mais tarde, na construção deste osciloscópio, percebi que não é possível ter dois deslocamentos separados para os canais. Isso se deve ao fato de que, com uma única fonte de alimentação, o nível de terra de entrada deve ser separado do nível de terra real dos opamps. Portanto, os dois canais se movem da mesma maneira que você altera a configuração GND.

Etapa 5: codificadores rotativos e depuração

Codificadores rotativos e depuração
Codificadores rotativos e depuração
Codificadores rotativos e depuração
Codificadores rotativos e depuração

No mini osciloscópio, usei apenas um codificador rotativo para todas as funções. Isso tornaria um osciloscópio duplo muito difícil de usar, portanto, preciso de dois. Um codificador para os atenuadores e nível de solo virtual e o outro codificador para a base de tempo e o acionamento. Infelizmente, assim como em meu outro projeto, esses codificadores rotativos são muito "barulhentos". Eles são tão ruins que simplesmente não funcionam com temporizadores no "modo codificador", a forma padrão de lê-los. Tive que fazer um mecanismo de debouncing com timer TIM2, verificando os codificadores a cada 100us. Este temporizador, por sua vez, é iniciado (apenas) quando há alguma atividade nos codificadores, isso é verificado com a funcionalidade EXTI nas portas de entrada. Agora os codificadores funcionam bem.

E como você pode ver, ter um display também pode ser muito útil para exibir informações de depuração.

Etapa 6: exibição e base de tempo

Display e base de tempo
Display e base de tempo

O display tem resolução de 160 x 128 pixels então são necessários 160 samples para uma tela cheia, consegui acelerar os ADCs para fazer 1,6 milhões de samples por segundo e isso, com o microcontrolador muito overclockado (mais sobre isso depois), dá uma base de tempo mínima de 20us por divisão (100us por tela). Assim, uma forma de onda de 10kHz preencherá toda a tela.

Isso é apenas duas vezes mais rápido do que o mini osciloscópio que fiz antes. Bem, agora é com dois canais:-).

Como disse, a tela tem 160 pixels de largura, então apenas 160 valores são necessários por tela. Mas todos os buffers contêm 320 amostras. Portanto, o DMA armazena 320 valores antes de disparar uma interrupção completa de transmissão (TC). Isso ocorre porque o acionamento é feito no software. A amostragem começa em um momento aleatório, então é muito improvável que o primeiro valor no buffer seja o local onde o ponto de disparo deveria estar.

Portanto, o ponto de disparo é encontrado lendo o trace_x_buffer, se o valor estiver no valor de disparo desejado e se o valor anterior estiver logo abaixo dele, o ponto de disparo é encontrado. Isso funciona muito bem, mas você precisa de um buffer maior do que o tamanho real da tela.

Este também é o motivo pelo qual a taxa de atualização nas configurações da base de tempo inferior é mais lenta do que você poderia esperar. Quando você usa a configuração de 200ms / div, uma tela cheia de dados leva 1 segundo, mas como o dobro da quantidade de conversões é feito, isso leva 2 segundos. Nas configurações de base de tempo mais rápidas, você não notará muito.

TIM3 é usado para gerar a base de tempo. Ele aciona os ADCs com a velocidade exigida pela configuração de base de tempo selecionada. Seu clock de TIM3 é de 120MHz (veja OVERCLOCKING), o número máximo ao qual conta (ARR) determina quanto transborda ou, em linguagem ST se atualiza. Via TRGO, esses pulsos de atualização acionam os ADCs. A frequência mais baixa que ele gera é 160 Hz, a mais alta é 1,6 MHz.

Etapa 7: ADCs e DMA

ADCs e DMA
ADCs e DMA

Os dois ADCs convertem a tensão em suas entradas ao mesmo tempo, eles armazenam esses dois valores de 12 bits em uma única variável de 32 bits. Portanto, o DMA tem apenas uma variável por (dupla) conversão para transferir.

Para usar esses valores, é necessário dividi-los em dois valores para que possam ser usados para exibir os dois traços. Como dito, os ADCs no F103 não podem ser configurados para outras resoluções além de 12 bits. Eles estão sempre no modo de 12 bits e, portanto, as conversões sempre levam o mesmo número de pulsos de clock. Ainda assim, com o overclock dos ADCs, 1,6 MSamples por segundo pode ser feito (veja Extra: Overclocking).

A referência dos ADCs é o Vdd, o trilho de 3,3V. Para converter isso para valores mais convenientes (por divisão), calculei os valores dos atenuadores, porque não tenho os valores exatos do resistor que saem desses cálculos, algumas correções são feitas no software.

Neste projeto eu uso DMA em "modo regular". Neste modo, o DMA para de transferir dados (dos ADCs para a memória) quando o número de palavras (ou meias palavras ou bytes) é transferido. No outro modo possível, "modo circular", o DMA se reinicializa e continua transferindo dados sem interrupção. Isso não funcionou com o F103, é tão rápido que sobrescreve os dados no adc_buffer antes que o resto do programa possa lê-los. Portanto, agora o processo é o seguinte:

- configurar DMA para o número de dados a serem transferidos e habilitar DMA

- iniciar o acionamento dos ADCs, estes irão solicitar transferências DMA após cada (dupla) conversão

- depois que o número definido de conversões é transferido, o DMA para

- imediatamente também pare o acionamento dos ADCs

- faça toda a manipulação necessária nos dados da memória

- mostrar traços na tela

- inicie o processo novamente

Etapa 8: Interface do usuário

Interface de usuário
Interface de usuário

Uma tela de 160 por 128 pixels não é muito grande e quero usá-la o máximo possível. Portanto, não há nenhuma parte reservada para as configurações de correntes. Nas últimas linhas, a sensibilidade vertical, base de tempo, nível de disparo e canal de disparo são exibidos, mas quando os sinais forem grandes o suficiente, eles aparecerão na mesma área. A opção que está ativa é mostrada em amarelo, o resto é mostrado em branco.

Etapa 9: construção e possíveis melhorias

Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias
Construindo e Possíveis Melhorias

Estou muito feliz com este projeto. Funciona bem e faz o trabalho, mas poderia ser melhor.

A caixa do projeto é muito pequena para caber tudo confortavelmente, o que resulta na necessidade de colocar componentes sob a Pílula Azul. Para tornar isso possível, o Blue Pill não poderia ser soldado diretamente à "placa-mãe". E porque isso tornava tudo muito alto, tive que remover muitas partes do Blue Pill, como os jumpers para selecionar BOOT0 e BOOT1 (coisas que eu nunca uso de qualquer maneira) e tive até que mover o cristal de cima para baixo de o pcb.

Tornei a vida mais difícil usando conectores banana em vez de conectores BNC ou SMA, isso significava que uma grande parte do perfboard era uma "área proibida", para deixar isso claro para mim mesmo, coloquei fita adesiva sobre ele para me prevenir de colocar peças nele.

Outro problema de colocar tudo em uma caixa de projeto tão pequena é que os circuitos analógico e digital estão muito próximos. Você pode ver que há bastante ruído visível em ambos os rastros. Isso eu nem tinha na placa de ensaio! Ao mover as linhas de energia para circuitos analógicos e digitais o mais longe possível, uma pequena melhoria foi feita, mas não o suficiente para o meu gosto. Reduzir todos os valores do resistor nos circuitos analógicos ainda mais do que eu (a resistência de entrada é 100kOhm em vez de 1MOhm) não ajudou. Eu suspeito que o acionamento na configuração de base de tempo mais rápida (20us / div), que não é ótimo, também vai melhorar com menos ruído nos sinais.

Se você fizer este projeto em um pcb "real", com todas as partes smd e camadas separadas para analógico, digital e power (são 4 camadas!), Provavelmente funcionará muito bem. Vai ser bem menor, não vai usar o Blue Pill completo, mas apenas o F103 e isso vai permitir abastecê-lo com um Vdda analógico separado (limpo) para os ADCs.

Como toque final, decidi borrifar a caixa preta, é uma mudança de todas as caixas bege que ela tem.

Etapa 10: O código e um breve vídeo

Etapa 11: EXTRA: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

Assim como fiz com o F03, eu queria ver como um F103 pode ter overclock. As especificações deste microcontrolador afirmam que a velocidade máxima do clock não deve ultrapassar 72MHz (que é claro já é mais rápido que o F030) mas eu tinha lido em vários blogs que fazer overclock era fácil, então por que não?

O Blue Pill é fornecido com um cristal de 8 MHz, o PLL multiplica isso com um fator de 9 a 72 MHz. O PLL pode ser aumentado até 16, dando um clock de 128MHz. Isso não foi nenhum problema para o meu Blue Pill, na verdade, todos os meus Blue Pills funcionam sem problemas em 128MHz.

Mas agora eu queria descobrir qual é o verdadeiro limite. Então, removi o cristal de 8 MHz e substituí-o por um de 12MHz. Novamente aumentei o multiplicador PLL até que o microcontrolador finalmente desistiu. Isso foi em 168 MHz! Em 156 MHz ainda funcionou bem. Deixei-o rodando nessa velocidade por horas e nunca o vi bater. Neste osciloscópio eu me conformei com 120MHz, uma velocidade que pode ser selecionada com um cristal de 12MHz e PLL em 10, bem como com um cristal de 8 MHz e o PLL em 15. (veja SystemClock_Config em main.c)

Os ADCs agora também funcionam mais rápido, eu os tenho funcionando a 30 MHz (em vez de 14), eles ainda estavam funcionando bem em 60 MHz, o STMicroelectronics faz um bom hardware!

A STMicroelectronics coloca esses limites na folha de dados por um bom motivo, eles garantem que o microcontrolador funciona nos 72MHz especificados em todas as condições.

Mas como eu não uso o microcontrolador a -40 Celsius, +85 Celsius, em apenas 2,0 Volt ou 3,6 Volt acho que é seguro fazer um overclock dele. NÃO faça isso quando tiver a intenção de vender um dispositivo com seus microcontroladores, você nunca sabe onde eles serão usados.

Recomendado: