Ir ao conteúdo
  • Cadastre-se
DL.Fernandes

Arduino Definindo Tempo de Amostragem 976us

Recommended Posts

Olá amigos,

 

Estou fazendo um projetinho com Arduino UNO e gostaria de uma ajuda. Através de um sensor de corrente, quero capturar cerca de 4096 amostras em 1s (não preciso de mais informações além do 1º s), mas não estou encontrando onde consigo mexer no tempo de amostragem do Arduino, para que ele me dê essa quantidade de informação.

 

Alguém tem alguma ideia ?

 

Acredito que para isso eu precise definir um Tempo de Amostragem (Ts) em torno de 976us, para conseguir uma Frequência de Amostragem (fs) de 1025 Hz +/-  ( fs = 1/ Ts ) .

 

Preciso desses valores para trabalhar com banda de 500 Hz, da qual consigo verificar freqûencias até a 7ª harmônica para uma alimentação de 60 Hz. 

 

Δ f = fs/N  = 1025/4096 = 0,25 Hz

 

f máx = ( N x Δf ) / 2   =  ( 4096 x 0,25 ) / 2   =  512,5 Hz

adicionado 18 minutos depois

O meu código segue abaixo, muito parecido com o do link citado. A diferença é que retirei os cálculos da Potência.

 

//Carrega as bibliotecas
#include "EmonLib.h" 
#include <LiquidCrystal.h>
 
EnergyMonitor emon1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
//tensão da rede eletrica
int rede = 127.0;
 
//Pino do sensor SCT
int pino_sct = 1;
 
void setup() 
{
  lcd.begin(16, 2);
  lcd.clear();
  Serial.begin(9600);   
  
  //Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29. 
  emon1.current(pino_sct, 30);
  
  //informações iniciais display
  lcd.setCursor(0,0);
  lcd.print("Corr.(A):");
} 
  
void loop() 
{ 

  //Calcula a corrente  
  double Irms = emon1.calcIrms(1480);
  //Mostra o valor da corrente
  
  Serial.print("Corrente: ");
  
  Serial.print(Irms); // Irms
  Serial.println();
  lcd.setCursor(10,0);
  lcd.print(Irms);

 
  delay(1000);
  
}

Depois que conseguir requisitar todos esses dados, vou pesquisar a respeito de como capturar os valor da amplitude e frequência, pois quero construir a forma de onda da corrente capturada (parecido com um osciloscópio) 😁

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na fofa linguagem arduína não vai rolar. sorry.

você precisa encher um buffer durante ou dentro destes estes 1s. Em c é relativamente simples

unsigned int buffer[4096];
void carrega_buffer()
{
unsigned int i;
for(i=0;i<4096;i++)
{
buffer[i]=adc_read(0);
delay(xxx);//pra ajuste de 1s
}
}

abç

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim no arduino é possível sim mas não posso te ajudar e nem quero deduzir como fazer (apesar que meio que posso). Mas o que te passei (em c) atende seu requisito...

1 hora atrás, DL.Fernandes disse:

capturar cerca de 4096 amostras em 1s

essencialmente:

buffer[4096] é uma matriz de 4096 elementos ou espaço de 4Kbytes (8 na verdade) na ram (nem sei se o arduino tem tudo isso) onde serão guardados os dados de um segundo.

 

1 hora atrás, DL.Fernandes disse:

construir a forma de onda da corrente capturada (parecido com um osciloscópio)

Acho que não precisa de tudo isso de byte. 20 já é muito.

 

Aguarde alguém da turminha do arduíno. (cara é sério...preciso parar de usar estes termos senão espanta quem quer ajudar kk)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DL.Fernandes ,

 

Bom, embora seja um zero à direita e à esquerda nessa linguagem do Arduino, vou tentar te ajudar.

Primeiro, se você pretende fazer 4096 amostras em 1 segundo, o que que você pretende fazer com essa informação ?

 

Se pretende armazenar elas, lembre-se de que o Atmega328P tem apenas 2K de memória Ram, mas a IDE utilizada usa bastante memória só para o funcionamento de seu programa. Vamos assumir que voce teria livre cerca de 1,8K , o que eu acho muito, mas vamos em frente ....

 

Suas amostragens serão em quantos bits ?  Porque se forem em mais de 8 bits, vai precisar de dois bytes de RAM para armazenar cada leitura obtida. Mas vamos supor que lhe bastam leituras em apenas 8 bits : Vai conseguir apenas armazenar cerca de 1800 leituras, em vez de 4096. Se for amostrar em mais bits, pior ainda, cabem apenas 900 leituras !

 

Pelo que eu lí, suponho que você quer fazer uma DFT, e vai querer dividir em barras de frequência para calcular os harmônicos, certo ?

 

Já fêz o cálculo de quanta memória será necessária para poder concluir os seus cálculos ?

 

Esqueça a ideia de utlilizar uma memória externa tipo I2c, ela é muito lenta para poder transferir as suas leituras para ela antes de perder a próxima amostragem.

 

O que pode ser feito é utilizar um Arduino Mega2560, e utilizar uma memória estática SRAM externa, no modo paralelo mesmo, com uma SRAM de 32K você consegue fazer isso tranquilamente.

 

Supondo que isso seja resolvido, vamos continuar :

 

A IDE do Arduino vai ser o seu maior inferno, pois ela não permitirá você configurar a temporização para atender a sua conversão, mas claro que pode ser feita, desde que você configure "na mão" os registradores necessários para fazer a conversão, na taxa que você precisa, na quantidade de bits que você precisa, habilitando a interrupção ao final de cada conversão efetuada. Ah, e claro, uma boa rotina de interrupção, que vai guardando os dados até chegar a quantidade necessária, sendo que neste momento sinalizará ao programa principal que o buffer está cheio, e esse programa irá desabilitar a interrupção e irá prosseguir na montanha de cálculo ....

 

Aguardo seus comentários ...

 

 

adicionado 8 minutos depois

@Isadora Ferraz ,

 

2 horas atrás, Isadora Ferraz disse:

Aguarde alguém da turminha do arduíno. (cara é sério...preciso parar de usar estes termos senão espanta quem quer ajudar kk) 

 

Eu acho que isso espanta mesmo....,  porque tem coisas feitas pela "turminha do Arduíno" que é de tirar o chapéu ... lembre-se de que conseguiram emular um Apple ][ num simples Arduíno Uno, coisa que é impossível para mais de 99,9999 %  dos verdadeiros profissionais, por causa da temporização necessária para gerar o vídeo no Apple .... 

 

Mas concordo que quando o post começa com "Galera" ou "Galerinha" , eu também torço o nariz ....

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aphawk Obrigado pela ajuda, vamos lá:
 

12 horas atrás, aphawk disse:

Bom, embora seja um zero à direita e à esquerda nessa linguagem do Arduino, vou tentar te ajudar.

Primeiro, se você pretende fazer 4096 amostras em 1 segundo, o que que você pretende fazer com essa informação ?

Com essas informações, eu importo para o excel (ou matlab) e crio o gráfico da onda da corrente. 

 

12 horas atrás, aphawk disse:

Suas amostragens serão em quantos bits ?  Porque se forem em mais de 8 bits, vai precisar de dois bytes de RAM para armazenar cada leitura obtida. Mas vamos supor que lhe bastam leituras em apenas 8 bits : Vai conseguir apenas armazenar cerca de 1800 leituras, em vez de 4096. Se for amostrar em mais bits, pior ainda, cabem apenas 900 leituras !

 

Pelo que eu lí, suponho que você quer fazer uma DFT, e vai querer dividir em barras de frequência para calcular os harmônicos, certo ?

 

Já fêz o cálculo de quanta memória será necessária para poder concluir os seus cálculos ?

 

- Puts, não sei quantos bits são minhas amostras. A ideia a princípio era salvar esses dados em um microSD e exportar manualmente.

- Sim, farei a FFT em cima do gráfico, porém isso no computador, não no Arduino. 

- Também não sei em relação à memória.. 

 

12 horas atrás, aphawk disse:

A IDE do Arduino vai ser o seu maior inferno, pois ela não permitirá você configurar a temporização para atender a sua conversão, mas claro que pode ser feita, desde que você configure "na mão" os registradores necessários para fazer a conversão, na taxa que você precisa, na quantidade de bits que você precisa, habilitando a interrupção ao final de cada conversão efetuada. Ah, e claro, uma boa rotina de interrupção, que vai guardando os dados até chegar a quantidade necessária, sendo que neste momento sinalizará ao programa principal que o buffer está cheio, e esse programa irá desabilitar a interrupção e irá prosseguir na montanha de cálculo ....

 

E está sendo, rs .. afim de evitar isso, no site "https://www.embarcados.com.br/arduino-taxa-de-amostragem-conversor-ad/?fbclid=IwAR2mb9gkXkAq8zZt5SnxAgMSP3EbQKnGfXvgIdh2g-p6qEGwcnyfJs6aS_A" que explica sobre taxa de amostragem do ADC do Arduino UNO, ele comenda como configurar o preescaler do ADC para  variar o tempo de leitura, chegando ATÉ 20us , o que dá uma taxa de amostragem de 50.000 amostras/s !! (1/20us)

 

Pensei que se eu fosse por esse caminho e conseguisse uma taxa que me informe perto dos 4k amostras/s, seria bom. Não preciso que todos esses dados sejam mostrados no "Monitor Serial" da IDE, mas que fossem gravados, pelo menos, no microSD rsrs.. isso eu não sei se é possível

 

 

Fiz umas adaptações do meu código com o do site que configura o preescaler e cheguei nisso:

 

// Variáveia para armazenar os resultados
unsigned long tempo_inicio;
unsigned long tempo_fim;

// constante para configuração do prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

//Carrega as bibliotecas
#include "EmonLib.h" 
#include <LiquidCrystal.h>
 
EnergyMonitor emon1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//tensão da rede eletrica
int rede = 127.0;
 
//Pino do sensor SCT
int pino_sct = 1;

void setup() {
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);

// configura o preescaler do ADC
ADCSRA &= ~PS_128;//limpa configuração da biblioteca do arduino

// valores possiveis de prescaler só deixar a linha com prescaler desejado
// PS_16, PS_32, PS_64 or PS_128
ADCSRA |= PS_128; // 64 prescaler
//ADCSRA |= PS_64; // 64 prescaler
//ADCSRA |= PS_32; // 32 prescaler
//ADCSRA |= PS_16; // 16 prescaler

 //Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29. 
  emon1.current(pino_sct, 30);

  //informações iniciais display
  lcd.setCursor(0,0);
  lcd.print("Corr.(A):");
  
}

void loop(){
//leitura
tempo_inicio = micros(); //marca tempo de inicio de leitura

 //Calcula a corrente  
    double Irms = emon1.calcIrms(1480);
    
    tempo_fim=micros();//le tempo no fim da conversão
    
    Serial.print("Tempo leitura: ");
    Serial.print(tempo_fim - tempo_inicio);
    Serial.println(" us");
  
    //Mostra o valor da corrente
    Serial.print("Corrente: ");
  
    Serial.print(Irms); // Irms
    Serial.println(" A");
    Serial.println();

    lcd.setCursor(10,0);
    lcd.print(Irms);
    
  Serial.println();

}

O problema está nos dados mostrados no Monitor Serial:

 

Capturar.PNG.b6c92ece3e1b85703ea4740852f0ae56.PNG

 

Os valores da corrente estão ok, porém esse "Tempo leitura" que está estranho.. se esse valor estiver correto, estou coletando apenas 3 ~ 4 amostras/s ? (1/269000us)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DL.Fernandes ,

 

Bom, tá parecendo bem mais simples do que eu pensei kkkk mas isso por causa de você não estar AINDA tentando armazenar dados no cartão SD !

 

Me diz uma coisa, existe a possibilidade de enviar todas as leituras em tempo real para o Excel ?

 

Porque a princípio podemos configurar um baud rate de 115k ( talvez mais ainda, tipo 250K ) , e assim conseguiremos fazer o sampling na velocidade que você pretende. Mas vai precisar de alguma engenhosidade por causa das interrupções e tempos envolvidos...

 

 

Me desculpe a minha curiosidade , esse seu projeto usa essa library Emonlib, que pelo que eu me lembro, quando ví o projeto original dela, era usada para fazer os cálculos de corrente, tensão e potência através de sensores comuns, certo ?

 

Ela foi escrita para se adequar a um determinado Sampling Rate . Não sei se ela suporta uma mudança de amostragem tão brusca, porque ela envolve cálculos de ponto flutuante, e isso consome bastante tempo do processador ....

 

A boa notícia é que você não precisa dela !

 

Nada te impede de você fazer o sampling das corrente e calcular o valor RMS dela, a cada ciclo do 60 Hz, enviar esses dados pela serial, perdendo o próximo ciclo de 60 Hz, e refazer tudo de novo e assim por diante !

 

Assim não envolve nada além do seu Arduíno Uno.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 horas atrás, aphawk disse:

configurar a temporização para atender a sua conversão, mas claro que pode ser feita, desde que você configure "na mão" os registradores necessários para fazer a conversão, na taxa que você precisa, na quantidade de bits que você precisa, habilitando a interrupção ao final de cada conversão efetuada.

Paulão esquece o garoto e fala comigo (kk). Sobre o acima. Nunca usei interrupt pra conversão ad. Mas achei curiosa a opção. Seria algo como a cada conversão completa o mc se autointerrompe pra fazer uma nova conversão? Meio que tudo por hw? Achei bem legal isso pois preciso medir um sinal - um pulso parabólico - de 150uS e portanto tem que ser o mais rápido possível. Mas pra formar a onda e mostrar num display, preciso duns 15 valores ou +.

Outra: Preciso também medir uma senoide duns 75Khz. Uns 2..3 ciclos tá bão. Acho que tem que ser mais rápido ainda. Tenho alguns atmega só não sei quanto Ksamples/s ou Msamples/s me libera

 

Voltando ao amigo...

Só pra eu entender, a função emon1.calcIrms(1480) já te solta o valor da corrente? Mastigadamente? bacana (sqn). O que a função micros() retorna? Que tipo de dado? Um long e suas contas come bastante recurso do mc sabia? E que tipo de dado a função serialprint acha que está carregando consigo? Só por curiosidade mesmo. Se não souber responder, pode ser porque eu não soube perguntar...

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, aphawk disse:

Bom, tá parecendo bem mais simples do que eu pensei kkkk mas isso por causa de você não estar AINDA tentando armazenar dados no cartão SD !

 

@aphawk Eu tentei montar minha própria shield pro arduino, com um adaptador de cartão SD mas não deu muito certo rs

Vou comprar uma a shield SD pro arduino mesmo e tentar

 

1 hora atrás, aphawk disse:

Me diz uma coisa, existe a possibilidade de enviar todas as leituras em tempo real para o Excel ?

 

Eu não sei, se for possível seria legal, mas não seria obrigatório. Estou tentando salvar os dados no microSD (em txt ou cvs) e inserir no computador pois não sei como transferir em tempo real p o computador rs.. até vi algumas coisas, mas usava programas para isso, ai já não seria interessante

 

1 hora atrás, aphawk disse:

Me desculpe a minha curiosidade , esse seu projeto usa essa library Emonlib, que pelo que eu me lembro, quando ví o projeto original dela, era usada para fazer os cálculos de corrente, tensão e potência através de sensores comuns, certo ?

 

Ela foi escrita para se adequar a um determinado Sampling Rate . Não sei se ela suporta uma mudança de amostragem tão brusca, porque ela envolve cálculos de ponto flutuante, e isso consome bastante tempo do processador ....

 

A boa notícia é que você não precisa dela !

 

Nada te impede de você fazer o sampling das corrente e calcular o valor RMS dela, a cada ciclo do 60 Hz, enviar esses dados pela serial, perdendo o próximo ciclo de 60 Hz, e refazer tudo de novo e assim por diante !

 

Assim não envolve nada além do seu Arduíno Uno.

  Estou usando ela pois acreditava ser obrigatório para utilizar o SCT, mas sim, ela é utilizada para os cálculos da potências e corrente. 

 

Não entendi muito bem como fazer da forma da qual você me explicou, mas vou pesquisar um pouco mais.

 

1 hora atrás, Isadora Ferraz disse:

Voltando ao amigo...

Só pra eu entender, a função emon1.calcIrms(1480) já te solta o valor da corrente? Mastigadamente? bacana (sqn). O que a função micros() retorna? Que tipo de dado? Um long e suas contas come bastante recurso do mc sabia? E que tipo de dado a função serialprint acha que está carregando consigo? Só por curiosidade mesmo. Se não souber responder, pode ser porque eu não soube perguntar...

 

 

@Isadora Ferraz pelo que entendi, a função emon1.calcIrms(1480) retorna o valor da corrente sim. Os 1480 diz respeito a quantidade de amostras. Em um site vi o pessoal comentando o seguinte: 

 

Citação

 O esboço lê aproximadamente 106 amostras de corrente em cada ciclo da rede a 50 Hz. 1480 amostras, portanto, trabalham em 14 ciclos de alimentação. Isso lhe dará uma boa média de leitura. Você pode alterar o número, mas deve chegar o mais próximo possível de ter um número inteiro de ciclos principais, caso contrário, se você tiver apenas uma parte de um ciclo no final, você introduzirá um erro.

 

Já a função "micros()" retorna o número de microssegundos passados desde que o Arduino começou a executar o programa. Só utilizei para ter uma noção do tempo.. não preciso dessa parte do programa na "versão final"

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
34 minutos atrás, DL.Fernandes disse:

Vou comprar uma a shield SD pro arduino mesmo e tentar

 

Calma .... a menos que você tenha uso para isso em outro projeto, porque vai te consumir muita RAM só para manter um FAT !

 

34 minutos atrás, DL.Fernandes disse:

Eu não sei, se for possível seria legal, mas não seria obrigatório. Estou tentando salvar os dados no microSD (em txt ou cvs) e inserir no computador pois não sei como transferir em tempo real p o computador rs.. até vi algumas coisas, mas usava programas para isso, ai já não seria interessante

 

Existe uma dll para o Windows que permite ao Excel receber os dados via serial !

Mais fácil do que isso só melzinho na boca ...

Inclusive faz alguns meses eu passei o link do tutorial sobre isso.

Relaxa porque isso é fácil ...

 

Faz mais de um ano, eu respondí um post para um cara que queria medir o fator de potência com um Arduíno, ao final acabei postando um projetinho inteiro no Proteus, junto com o programa em Basic.

 

A ideia é voce amostrar a senóide de 60 Hz 32 vezes , e usar o famoso método de soma dos quadrados ( veja a teoria de cálculo do valor RMS, fica bem simples de se calcular em tempo real. Mas eu também expliquei isso em um post antigo sobre um sensor de corrente do tipo ACS712 , procure aqui no Fórum ok ?

 

A tensão voce calcula pelo mesmo princípio se quiser, ou simplifique, usando u simples transformador , retificando em ponte completa, filtrando com um capacitor e resistor adequado, usando um divisor resistivo para poder medir pelo conversor A/D , e obterá o valor de pico, que basta dividir por raiz de 2 ( acho né ... kkk idade é fogo ! ) e obterá o valor RMS.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, aphawk disse:

 

Calma .... a menos que você tenha uso para isso em outro projeto, porque v ai te consumir muita RAM só para manter um FAT !

 

 

Existe uma dll para o Windows que permite ao E

Vou pesquisar sobre. Sabe se tem um nome específico ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DL.Fernandes ,

 

Eu estava editando o post e você respondeu kkk !

 

Veja o artigo aqui :

https://www.embarcados.com.br/aquisicao-de-dados-excel-e-arduino/

 

Ah, achei o post sobre o ACS712 e o projeto do medidor de fator de potencia, completo com fonte e arquivo de simulação ... acho que basta uma lida para você entender o sistema ok ? Segue :

 

E sobre o cálculo do valor RMS :

 

 

 

Já deve uma cerveja para a @Isadora Ferraz , e duas para mim ..... já vi que até o final de seu projeto vou tornar-me um ébrio kkkkk !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
54 minutos atrás, aphawk disse:

Eu estava editando o post e você respondeu kkk !

 

Veja o artigo aqui :

https://www.embarcados.com.br/aquisicao-de-dados-excel-e-arduino/

 

 @aphawk Infelizmente não estou conseguindo entrar no site que foi postado o arquivo (do Roberto Valgolio).. na sua máquina, você consegue acessar o site ?

 

56 minutos atrás, aphawk disse:

Ah, achei o post sobre o ACS712 e o projeto do medidor de fator de pot~encia, completo com fonte e arquivo de simulação ... acho que basta uma lida para você entender o sistema ok ? Segue :

 

 

 Estou dando uma lida. Realmente, já vi essa relação dos 1920Hz (32x60) e dos 3840Hz (64x60). Tem uma tese que encontrei que uma pessoa fez isso, capturando 128 amostras, com frequencia natural 60hz, e frequencia de amostragem em 1920Hz. Ela fez o que queria fazer, aplicar FFT sobre os dados, porém foi utilizado, além do arduino, um kit da Freescale ..

 

aa.PNG.6ec2d8b3fcfb5848589fd56d177c822d.PNG

Uma dúvida, tanto no projeto que você postou no Proteus, quanto em outros lugares que vi, o pessoal utiliza 2 Op-Amp (já vi utilizarem o LPV358 - caso acima - ou o LM358) e, em alguns casos, um filtro anti-aliasing (filtro passa baixa). Você acha necessário no meu caso ?

 

Acho que esses Amp serviam como ccto condicionador, nao é ? Pois o SCT 100A gera um sinal de corrente que precisa ser condicionado para tensão para entrar na porta do arduino, é isso ? 

 

 

1 hora atrás, aphawk disse:

Já deve uma cerveja para a @Isadora Ferraz , e duas para mim ..... já vi que até o final de seu projeto vou tornar-me um ébrio kkkkk !

 

Paulo

Opa, vamos pro bar.. só assim para relaxar depois de mexer com eletrônica kkkk 😆

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei uma outra tese que um rapaz fez algo próximo do que gostaria de fazer, porém utilizando um Arduino Mega (tenho o UNO) e o sensor invasivo Efeito Hall ACS712-5 (utilizo o SCT013 30A).

 

Ele também utilizou 3 Op-Amp no ccto dele (LM324) e no código do arduino utilizou TIMERs. 

 

http://www.eletrica.ufpr.br/dokuwiki/arquivostccs/355.pdfbbb.PNG.e71e25b737181cc56730ca92c6446660.PNG

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DL.Fernandes ,

 

Bom, todos os links que coloquei estou acessando normalmente, neste

momento estou respondendo no meu Iphone ....

 

Você está se preocupando muito com a frequência de amostragem ... ela é determinada pela nossa quantidade de amostras que queremos em período da frequência da rede : se quiser uma precisão maior, pode aumentar a quantidade, por exemplo em vez de 32,

use 64 amostras, que no periodo equivalente a uma senóide de 60 Hz determina a frequência de 64 * 60 = 3840 Hz.

 

Esquece FFT, pois nao estamos procurando nada de harmônicas, para o uso residencial podemos focar que a frequência muito predominante é a de 60

Hz.

 

Precisa ver se o seu transformador de corrente já tem o resistor embutido, ou não. O uso desse circuito condicionador é simplesmente um amplificador seguido de um filtro passa baixa para evitar o efeito de aliases. 

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, aphawk disse:

Esquece FFT, pois nao estamos procurando nada de harmônicas, para o uso residencial podemos focar que a frequência muito predominante é a de 60Hz.

 

Precisa ver se o seu transformador de corrente já tem o resistor embutido, ou não. O uso desse circuito condicionador é simplesmente um amplificador seguido de um filtro passa baixa para evitar o efeito de aliases. 

Queria medir a corrente de um motor, por isso a preocupação em freq de amostragem

 

Sobre o TC, tem sim um resistor embutido! De 62 ohms, segundo datasheet

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DL.Fernandes ,

 

Pode fazer 64 amostragens a cada ciclo de 60 Hz que já terá uma boa medida.

 

Se quiser uma medida mais precisa, pode ir aumentando a quantidade de amostragens, seu limite é dado pelo

tempo mínimo de conversão do A/D e da pequna rotina de interrupção que devera pegar a medida, calcular o seu quadrado e ir totalizando até a última leitura feita.

 

Para chegar ao extremo pode fazer essa interrupção diretamente em Assembly, usando na prática o clock máximo do conversor A/D de 250 Khz, que

no caso do Arduino vai te dar um tempo de conversão de 52 microsegundos . Uma rotina de interrupção em Assembly fazendo a multiplicação e o tratamento genérico consumirá mais uns 8 microsegundos, vamos deixar como 9 por segurança, e teremos um tempo total de 52+9 = 61 microsegundos, e poderemos chegar a um sampling de cerca de 16.000 amostragens por segundo, o que daria cerca de 16.000 / 60 = 266 amostras a cada ciclo de 60 Hz !

Para simplificar a temporização necessária, pode usar o multiplo de 2 mais próximo, que é 256 amostras a cada ciclo de 60 Hz,  o que vai te dar a máxima resolução possível com o Arduino .

Veja que estou usando um valor acima do máximo recomendado pelo Datasheet, mas muita gente afirma que os Avrs da familia Atmega fazem isso sem nenhum problema na conversão ( e eu mesmo já usei e testei com sucesso ).

 

Agora, se fizer essa rotina de interrupção apenas usando a IDE do Arduíno, não sei qual é o limite... eu usaria o valor de 128 amostras como mais seguro, o que também já te dá uma boa resolução!

 

Quanto ao seu TC, ele então já lhe dá uma saída de tensão AC , tipo voce terá na saída dele algo tipo X milivolts para

cada Ampére na entrada.

Agora, lembre-se que o conversor A/D só mede tensão DC , então vai ter de usar mais alguns amp ops para isso ok ?

 

Paulo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×