collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Gerador de onda triangular de resolução infinita com PSoC 4  (Lida 14354 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Tenho andado a experimentar o PSoC 4, que foi o ARM que mais me seduziu até agora. Fiz este projecto para avaliar a plataforma, que me parece bastante interessante. A maior surpresa foi o editor, o PSoC Creator, que tem "configuração visual" de todos os periféricos, entre outras funcionalidades interessantes. O IDE e o código gerado são completamente livres mesmo para uso comercial, ao contrário das ferramentas da maior parte dos outros fabricantes. Também existe suporte para o GCC (que é o que o Creator usa).
Isto foi feito na "prototyping board".

O projecto consiste num gerador de onda triangular de resolução infinita, é uma mistura de analógico com digital. Os únicos componentes externos são um condensador e uma resistência.

Com os valores de componentes e parametros que estão no projecto em anexo, a onda gerada tem uma frequência entre 10KHz e 245KHz nominais programável em passos de 1KHz, amplitude de 1Vpp e offset de 120mV.

As vantagens desta forma de gerar a onda são:

1) A onda é puramente analógica e portanto não precisa de um filtro como nos casos em que é usado um DAC.

2) Para gerar esta onda a 245KHz num sistema de DAC digital com 128 níveis de tensão (7bits) seriam necessários 31.36 Msps.

Fica a "foto" do esquema e o projecto em anexo.

« Última modificação: 03 de Maio de 2014, 01:54 por Njay »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #1 em: 02 de Maio de 2014, 02:27 »
Cá fica também uma imagem de osciloscópio da onda triangular gerada a 245KHz. A azula onda na saída do OPAMP buffer e a vermelho a onda no condensador.

Tive que separar a placa da mini-placa de USB para ter uma onda limpa. Quando a porta COM está aberta causa o que me parece ser crosstalk entre a saída do comparador de tensão e a saída do ampop buffer.

Uma cena engraçada que me aconteceu foi que quando liguei este projecto hoje verifiquei que a calibração que eu tinha feito anteriormente agora estava "fora", estando a dar 10KHz - 20KHz de diferença entre a onda e o programado na firmware. Depois de algum tempo aqui às voltas descobri que fiz a calibração com uma entrada do osciloscópio a medir a onda no condensador, e a ponta de prova altera o comportamento circuito! O condensador usado é de 330pF, um valor bastante pequeno, e o circuito nesta parte é muito sensível.
« Última modificação: 02 de Maio de 2014, 03:03 por Njay »

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 710
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #2 em: 02 de Maio de 2014, 03:58 »
Cá fica também uma imagem de osciloscópio da onda triangular gerada a 245KHz. A azula onda na saída do OPAMP buffer e a vermelho a onda no condensador.

Tive que separar a placa da mini-placa de USB para ter uma onda limpa. Quando a porta COM está aberta causa o que me parece ser crosstalk entre a saída do comparador de tensão e a saída do ampop buffer.

Uma cena engraçada que me aconteceu foi que quando liguei este projecto hoje verifiquei que a calibração que eu tinha feito anteriormente agora estava "fora", estando a dar 10KHz - 20KHz de diferença entre a onda e o programado na firmware. Depois de algum tempo aqui às voltas descobri que fiz a calibração com uma entrada do osciloscópio a medir a onda no condensador, e a ponta de prova altera o comportamento circuito! O condensador usado é de 330pF, um valor bastante pequeno, e o circuito nesta parte é muito sensível.

Obrigado Njay por partilhar.

Eu e Tiago temos sempre escrito aqui sobre as grandes possibilidades de desenvolvimento que os PSoCs oferecem. É tudo tão intuitivo no IDE PSoC Creator.

A carga e descarga do condensador gera a onda triangular. Sendo um condensador de pequeno valor a carga e a descarga são rápidas, sendo o corte feito na rampa um pouco antes da curva final, o suficiente para produzir uma onda triangular. A amplitude constante é conseguida pelo ampop. Será interessante exercício introduzir um filtro passa baixo de modo a extrair uma onda sinusoidal. Para quem esteja interessado na análise Fourier de onda triangular sugiro o segunte link do excelente "site" da Wolfram:

http://mathworld.wolfram.com/FourierSeriesTriangleWave.html
« Última modificação: 02 de Maio de 2014, 05:07 por Tayeb »

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 710
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #3 em: 02 de Maio de 2014, 04:17 »
E para uma melhor explicação do que está envolvido no exemplo de Njay, e para quem gosta de Multisim, aqui está um link no "site" da NI que mostra como se faz a simulação:

http://www.ni.com/white-paper/12784/en/

E aqui está imagem da montagem:



A eletrónica é fascinante. Não há mistérios nela. Tudo se pode explicar se quisermos compreender o que se passa. Com um simples exercício em que analisamos a curva de carga e descarga de condensador (que é uma das primeiras coisas que se faz em trabalhos laboratoriais de electrónica), podemos gerar uma forma de onda.

« Última modificação: 02 de Maio de 2014, 05:09 por Tayeb »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #4 em: 03 de Maio de 2014, 02:07 »
É fascinante mesmo, e é preciso construir e medir para a percebermos "realmente".

Já tinha conhecimento dos PSoC há uns anos, mas quando os vi na altura só havia o modelo com o core 8051 e não me seduziu. Agora com cores ARM e placas de prototipagem/desenvolvimento baratas, bom software gratuito e interfaces "open", está basicamente irresistível, heheh.

Tenho apenas uma correcção à explicação do funcionamento. No meu projecto o ampop não controla a amplitude, serve apenas de buffer. A amplitude é controlado pelo valor do IDAC de 7 bits (à direita). O comparador de tensão compara a tensão no condensador com o valor do DAC e gera uma interrupção quando é atingida. Aí o IDAC da esquerda é "invertido" (passa de sink para source e vice-versa) e o IDAC da direita (limites) é "invertido" também (alterna entre o limite superior e o limite inferior). Isto pode parecer complicado mas na verdade é bastante simples, só é mais complicado de colocar em palavras.

Se a frequência chegasse pelo menos a 1MHz, ainda faria o gerador de funções "completo", mas só com 245KHz não me seria muito útil.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #5 em: 03 de Maio de 2014, 09:12 »
Esses dois IDAC, OPAMP e COMP estao dentro do chip?

Podiam dar outros exemplos praticos em que as funcionalidades / caracteristicas dos PSoC se aplicacam?

Para este gerador de onda, so vejo uma aplicacao: sintetizador (musica) analogico!

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 710
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #6 em: 03 de Maio de 2014, 10:17 »
É fascinante mesmo, e é preciso construir e medir para a percebermos "realmente".

Já tinha conhecimento dos PSoC há uns anos, mas quando os vi na altura só havia o modelo com o core 8051 e não me seduziu. Agora com cores ARM e placas de prototipagem/desenvolvimento baratas, bom software gratuito e interfaces "open", está basicamente irresistível, heheh.

Tenho apenas uma correcção à explicação do funcionamento. No meu projecto o ampop não controla a amplitude, serve apenas de buffer. A amplitude é controlado pelo valor do IDAC de 7 bits (à direita). O comparador de tensão compara a tensão no condensador com o valor do DAC e gera uma interrupção quando é atingida. Aí o IDAC da esquerda é "invertido" (passa de sink para source e vice-versa) e o IDAC da direita (limites) é "invertido" também (alterna entre o limite superior e o limite inferior). Isto pode parecer complicado mas na verdade é bastante simples, só é mais complicado de colocar em palavras.

Se a frequência chegasse pelo menos a 1MHz, ainda faria o gerador de funções "completo", mas só com 245KHz não me seria muito útil.

Obrigado Njay. Tem toda a razão.

Na linguagem simples que utilizei escrevi sobre "corte" que é de facto feito por comparador. Tem razão não é fácil de explicar. Com Multisim podemos simular e visualizar o que se passa e até puxar para os limites o nosso projecto antes de o montar.

Espero ver aqui mais de suas contribuições com PSoC.

Offline Tayeb

  • Mini Robot
  • *
  • Mensagens: 710
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #7 em: 03 de Maio de 2014, 10:24 »
Esses dois IDAC, OPAMP e COMP estao dentro do chip?

Podiam dar outros exemplos praticos em que as funcionalidades / caracteristicas dos PSoC se aplicacam?

Para este gerador de onda, so vejo uma aplicacao: sintetizador (musica) analogico!

Sim os componentes existem fisicamente dentro do PSoC. O interface gráfico de PSoC Creator  serve para ligar os componentes e de parametrizá-los. Existe um compilador para escrevermos o código para o microcontrolador incluido. Eu escrevi vários tutoriais e publiquei o meu trabalho aqui neste sub-forum. Também publiquei link de Element14 sobre a placa que Njay utilizou.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #8 em: 03 de Maio de 2014, 13:42 »
É verdade Mário, aquelas peças estão dentro do chip (um PSoC 4) como disse o Tayeb. E ainda estão lá outras que não usei, mais um ampop e mais um comparador de tensão, um adc de 12 bits, máquinas de PWM e de comunicações série, e ainda uma espécie de "mini fpga".

Isto é um microcontrolador ARM Cortex M0 (48MHz) como os outros, mas tem uma série de periféricos mais interessantes do que aqueles que estamos habituados a ver, periféricos digitais e analógicos. Outras familias (PSoC3, PSoC5LP) têm mais ou mais extensos periféricos, e cores ARM mais potentes.
A ferramenta de desenvolvimento (PSoC Creator) é fenomenal, gratuita e sem limitações; quem estiver à vontade com os conceitos tipicos de microcontroladores nem precisa de olhar para a datasheet para fazer qualquer coisa nisto. Quando pegas num componente e o metes na folha de esquema, ele passa a gerar uma série de funções C para lidar com esse componente. Abres o menu local do rato em cima do componente e há uma entrada "Datasheet", clicas e abre-te um PDF só com a documentação desse componente (hw e sw), assim como da API para lidar com ele. No mesmo menu local encontras a opção "Configure" que te abre uma janela gráfica para configurar o componente (por exemplo no caso de maquinas PWM ele até te mostra um gráfico da onda final, gráfico que se vai alterando de acordo com os parâmetros que vais alterando. Só experimentando.

Na imagem do esquema no 1º post, os componentes e ligações a azul (no lado esquerdo) são externos ao chip. Os quadradinhos representam pinos do chip. Nota que este esquema é desenhado no próprio PSoC Creator. Isto é fixe porque ficas com o projecto bem documentado.
Não precisas de usar as APIs que ele gera para os componentes (podes até dizer-lhe para não gerar), mas é fixe para começar porque não precisas de ir ver os registos. No ISR deste projecto eu acabei por substituir as chamadas à API pelas escritas directas nos registos, porque precisava de velocidade. Mas até isso foi fácil porque grosso modo só tive que ir copiar "o miolo" das funções que o gajo criou. Também é fixe para ver rapidamente como se fazem certas coisas. Ah, outra funcionalidade fixe que eles tem é outra entrada no menu local do rato que podes usar para procurar um projecto que use o componente; o gajo mostra-te logo ali na janela de resultados de procura o esquema e o código.
« Última modificação: 03 de Maio de 2014, 13:47 por Njay »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #9 em: 07 de Julho de 2014, 15:16 »
Entretanto voltei a pensar neste assunto da geração de onda triangular no PSoC4 e consegui chegar a 1MHz, desta vez utilizando apenas o hw, sem intervenção nenhuma do CPU. A amplitude fica em ~0.48V mas é suficiente para um gerador "core"; para tornar isto num "gerador de funções" mais útil seria sempre preciso meter à saída um amplificador com controlo de ganho de offset (além de gerar outras formas de onda). Mais logo já meto o novo esquema.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #10 em: 09 de Julho de 2014, 10:41 »
Cá está o esquema do gerador de onda triangular todo em hw até 1MHz (na verdade até faz mais, mas a amplitude começa a ser muito reduzida):



Já não precisa da resistência externa e agora há um sinal quadrado de sincronismo (TClk) que no método antigo não dava para usar.
O IDAC de 7 bits (em baixo) está sempre ligado ao condensador e a fornecer corrente. O IDAC de 8 bits tá sempre a sugar corrente, e sempre ao dobro do IDAC de 7bits. Ambos estão ligados ao condensador e o SSMux permite ligar e desligar a saída do IDAC de 8 bits ao condensador. Ou seja, para carregar o condensador desliga-se o IDAC de 8 e fica o IDAC de 7 a carregar, para descarregar liga-se (SSMux) o IDAC de 8bit que vai absorver a corrente do IDAC de 7 e ainda descarregar o condensador - como o IDAC7 fornece X mas o IDAC8 retira 2X, ainda há X a sair do condensador. Há um clock ligado (através de um flip-flop "toggle", é uma obrigatoriedade do hw) ao SSMux que controla o tempo que o condensador passa a carregar/descarregar.

E a onda gerada a 1MHz é assim:

« Última modificação: 10 de Julho de 2014, 11:16 por Njay »

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #11 em: 09 de Julho de 2014, 12:47 »
Algumas coisas ainda nao percebi e que me leva a nao concordar totalmente com a classificacao "resolucao infinita".
Os valores da IDAC sao variados para gerar a onda?
Porque o valor do condensador 330pF?
Como tiraste a resistencia do anterior desenho, o que faz agora essa tensao? apenas o condensador?

Mesmo que consideres a onda analogica, ela tera caracteristicas de "resolucao" analogica relacionadas com as electrical caracteristicas da IDAC, o mesmo do OPAMP (mas suponho que isso esteja na datasheet individualmente, claro que o calculo do conjunto é diferente e o resultado sera um valor degradado IDACs * OPAMP), deste modo, como nao ha componentes ideais, tambem nao havera resolucao infinita.

Por outro lado, caso consideres o sinal analogico, a variacao da frequencia do sinal (niveis da IDAC) vai ser digital (== steps de determinada resolucao relacionada com os bits da IDAC)

Desafio: seria possivel modular a onda em amplitude?

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #12 em: 09 de Julho de 2014, 13:48 »
Digo que é "resolução infinita" porque se fizeres "zoom" na rampa ela é sempre uma rampa "linear", enquanto que com síntese digital (DDS) tens sempre escadinhas, por pequenas que sejam.

Os valores dos IDACs controlam a corrente de carga/descarga do condensador, logo definem a "velocidade" com que carrega/descarrega, com que a rampa sobe/desce. É preciso "conjugá-los" com a frequência do clock do SSMux embora a frequência da onda seja definida apenas por esse clock; por exemplo para valores baixos de frequência, a corrente dos IDACs tem que ser mais baixa para o condensador carregar/descarregar mais devagar, caso contrário ele pode fazer excursões de tensão demasiado grandes (e inclusivé saturar em cima ou em baixo) e saires da zona "linear" da exponencial (ficas com "arcos" a subir e descer em vez de rectas).

O controlo de frequência é discreto (digital) sim, mas as rampas são super analógicas ;) . O clock no SSMux é que define a frequência, não o IDAC; na verdade o IDAC influência, mas o controlo directo é pelo clock. O controlo de amplitude tem que ser feito por hw externo, e é o que faria sentido por exemplo num gerador de funções, para se poderem obter amplitudes e offsets fora da gama 0..5V.

Se o valor do condensador fosse maior, ia demorar demasiado tempo a carregar/descarregar com a corrente disponível nos IDACs (máx. ~300uA) e se fosse muito pequeno ia carregar/descarregar demasiado depressa, isto, claro, tendo em conta a gama de frequência envolvida. Calculo que possas fazer uma conta para ter uma estimativa inicial para o condensador (sabes a corrente máxima disponível, sabes que para "trabalhar" na zona "linear" da exponencial são os 1ºs poucos %, ...), mas foi mais rápido e fácil apontar inicialmente para o valor arbitrário de 10nF e depois ajustar até me agradar ;)

Tens algum controlo de amplitude mexendo nos IDACs, mas é limitado às frequências mais baixas, e esse controlo vem com mexidas no offset. Se houvesse um 3º IDAC no chip penso que seria possível. Bom, como ainda há um AMPOP livre, talvez com PWM + um filtro RC... qui çá.
« Última modificação: 10 de Julho de 2014, 11:18 por Njay »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #13 em: 10 de Julho de 2014, 10:45 »
Já foi para o Pocket para ler isto assim que tiver um tempinho :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerador de onda triangular de resolução infinita com PSoC 4
« Responder #14 em: 12 de Julho de 2014, 00:38 »
Projecto interessante, não dá para gerar tambem uma onda quadrada e uma sinusoidal?
Uma pergunta(estupida provavelmente), mas ao usares uma fonte de corrente a carga e descarga do condensador não vai ser sempre linear(desde que a voltagem necessária não exceda a voltagem máxima que esses IDAC são capazes de prover?)

Dado que já deste os primeiros passos com os PSoC4, podes indicar uma literatura decente para eu começar a brincar com o meu tambem?
Avr fanboy