LusoRobótica - Robótica em Português

Sistemas específicos => PSoC => Tópico iniciado por: Njay em 29 de Abril de 2014, 11:58

Título: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 29 de Abril de 2014, 11:58
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.

(https://lusorobotica.com/index.php?action=dlattach;topic=7272.0;attach=2691;image)
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Tayeb 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 (http://mathworld.wolfram.com/FourierSeriesTriangleWave.html)
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Tayeb 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/ (http://www.ni.com/white-paper/12784/en/)

E aqui está imagem da montagem:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.ni.com%2Fcms%2Fimages%2Fdevzone%2Ftut%2FFigure_1_20110510100511.PNG&hash=6cd22b4dd027f609c5f6e5211bff966f50573121)

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.

Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: KammutierSpule 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!
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Tayeb 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Tayeb 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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):

(https://lusorobotica.com/index.php?action=dlattach;topic=7272.0;attach=2795)

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:

(https://lusorobotica.com/index.php?action=dlattach;topic=7272.0;attach=2797)
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: KammutierSpule 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?
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay 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 çá.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: metRo_ em 10 de Julho de 2014, 10:45
Já foi para o Pocket para ler isto assim que tiver um tempinho :)
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: senso 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?
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 12 de Julho de 2014, 01:26
Citação de: senso
Projecto interessante, não dá para gerar tambem uma onda quadrada e uma sinusoidal?
Quadrada? Claro. Sinusóidal? Dá por "deformação" da onda triangular (sine shapper), mas tem que ser com hw externo. É tecnicamente dificil fazer um gerador de onda triangular ou sinusoidal de frequência variável e que atinja frequências altas - nesse aspecto os geradores digitais vieram revolucionar o campo.

Citação de: senso
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?)
Não entendi a tua pergunta. Se carregares um condensador com corrente constante (que é o que está o IDAC a fazer), a tensão sobe linearmente, pelo menos até atingires o limite de tensão do IDAC sim, como estavas a dizer. Ok, acho que já percebi o que querias dizer. Eu vi situações em que as rampas ficavam curvadas, mas não reparei se estava a sair da zona utilizável do IDAC (penso que estes do PSoC 4 fazem até uma queda de diodo do rail positivo, tá na datasheet).

Citação de: senso
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?
Fácil fácil. Começas por dar uma olhada nas 1ªs 8 páginas da PSoC 4 4200 Family Datasheet para ficares com uma ideia do que está à disposição, depois se quiseres mais detalhes sobre o que é suportado por cada sub-sistema podes dar uma olhada na PSoC® 4 Architecture TRM
(Technical Reference Manual)
. Também podes saltar logo da datasheet para o PSoC Creator 3, exploras um bocado aquilo e rapidamente ficas ambientado; aí quando queres saber algum detalhe sobre o hw é só usar a opção "Datasheet" do menu local ou consultares o Architecture TRM, mas como o PSoC Creator gera uma API para todos os blocos de hw que metes no esquema torna-se fácil fazer qq coisa sem consultar o TRM. Na página do prototyping kit há um doc que te ajuda a usar o kit e tá lá um projecto exemplo. Eu começo um projecto sempre a partir desse projecto exemplo, que assim já tem lá o bootloader e não preciso de configurar à pata. Depois há umas app notes sobre alguns assuntos que pode valer a pena dar uma olhada.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: senso em 12 de Julho de 2014, 01:43
Pois, é tão fácil que eu acho estranho, não á includes, nem configurações, nem sequer se diz ao IDE qual é o chip especifico, provavelmente nessa parte estou a saltar algum passo, mas é efectivamente um mundo á parte/frente da experiencia ARM, em que está tudo separado em meia duzia de datasheets e N modelos de CMSIS e bibliotecas de periféricos.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 12 de Julho de 2014, 11:50
Eu uso o projecto exemplo por isso nunca tive que dizer qual é o chip mas acho que já vi essa opção por lá.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 01 de Junho de 2015, 01:39
É quando se cria um projecto no IDE que há a opção de se escolher o chip.
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: senso em 01 de Junho de 2015, 02:23
Já lá tinha chegado  ;D
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 01 de Junho de 2015, 03:26
Eu sei :), mas assim fica cá registado ;) .
Título: Re: Gerador de onda triangular de resolução infinita com PSoC 4
Enviado por: Njay em 03 de Junho de 2015, 01:51
Podes escolher o device também no menu local em cima do "Project", há uma entrada com o apropriado nome "Device Selector" :)