Medindo rotação de motores com osciloscópio

Medindo rotação de motores com osciloscópio

Osciloscópios são instrumentos de medição de sinais elétricos cujos resultados são apresentados como gráficos em dois eixos. Os eixos mais comuns são o de diferença de potencial (eixo vertical) e o eixo da frequência (eixo horizontal). Com o objetivo de medir a rotação de um motor, pode-se fazer o uso de diversos instrumentos de medição, entre eles o osciloscópio. Como comparação, o instrumento de medição mais comum usado em trabalho de instalações elétricas prediais, o multímetro, tem excelente aplicação quando os sinais analisados na medição tem alteração gradual. Todavia, caso a alteração seja dinâmica, ou a variável de interesse seja a própria alteração (crescimento da curva de tensão em um capacitor por exemplo) o osciloscópio se torna um equipamento bem mais interessante que o multímetro.

kit arduino robótica educacional

O osciloscópio

Os osciloscópios são capazes de fornecer valores de amplitude, frequência, largura do impulso, além da forma e do padrão do sinal que está sendo medido. A medida é obtida através de um processo semelhante ao que ocorre no caso dos multímetros, ou seja, são utilizados apenas dois cabos no local onde desejamos obter uma resposta. A vantagem sobre o multímetro é que o tempo de amostragem do osciloscópio é muito superior.

Figura 1: Exemplo de osciloscópio

Neste tutorial, apresento uma forma de utilizar o osciloscópio para medir a rotação de um motor elétrico, utilizando da ideia da taxa de amostragem e frequência de impulsos. Para esse uso é necessário introduzir o conceito de um componente que será utilizado, o sensor hall.

O sensor hall

Um sensor Hall ou sensor de efeito hall é um transdutor, isto é, um dispositivo utilizado em sistemas de medição que recebe um estímulo e responde com um sinal de tensão. No caso do sensor hall, esse estímulo é a presença de um campo magnético. Sensores Hall podem ser tanto analógicos, sendo capazes de enviar diferentes sinais de tensão para diferentes intensidades de campos magnéticos, quanto digitais, que enviam sinal lógico (alto ou baixo) na presença ou não do campo magnético. Por exemplo, um sensor hall digital alimentado com 5 Volts envia constantemente sinal lógico baixo 0 Volts em sua saída, na presença de um campo magnético que  ative o transdutor o sinal passa a ser alto até que o campo não seja mais sentido pelo dispositivo.

Mãos à obra - Medido a rotação com um osciloscópio

A fim de medir a rotação de um motor elétrico, um ímã é fixado em seu rotor. Um sensor hall digital é posicionado de modo que quando o ímã gira, seja possível captar o campo magnético através do sensor. Ademais, o sinal de saída do sensor de efeito hall é  ligado à ponta de prova do osciloscópio. O motor em funcionamento faz com que o ímã fixo no eixo do rotor acompanhe o movimento de rotação do motor e passe a girar também. O movimento do imã provoca uma reação no sensor com certa frequência e esse valor de frequência nos permite calcular a velocidade do motor.

Componentes necessários

  • Osciloscópio
  • Imã (o imã deve ser de tamanho e força de atração que não impossibilite a medição)
  • Sensor hall digital (olhar no datasheet do sensor a necessidade de um resistor entre os terminais do sensor)

Procedimento

Fixe o imã no eixo do motor que deseja medir a rotação. A nossa recomendação é que você utilize uma resina de base epóxi ou fita de alumínio. Uma vez que a alta velocidade do motor  pode forçar o ímã a ser arremessado, a fixação incorreta pode oferecer certo perigo.

 

Figura 2: Detalhe da fixação do ímã com fita de alumínio

 

Com o datasheet do sensor hall digital em mão, verifique a necessidade de um resistor entre os terminais dele. Depois alimente o sensor segundo as especificações do fabricante, através de uma fonte de bancada, baterias ou outros métodos.

 

Figura 3: Montagem do Sensor Hall na Protoboard

 

A ponta de prova do osciloscópio deve ser ligada na saída do sensor hall, e o outro terminal deve ser aterrado junto do GND (ground)  do sensor. Posicione o sensor de efeito hall próximo ao ímã, de modo que quando o motor girar o sensor seja capaz de sentir a presença do campo magnético. Esse procedimento é através de tentativa e erro, pois depende da intensidade do ímã utilizado e de quão sensível é o sensor escolhido.

 

Figura 4: Sensor Hall próximo ao ímã fixo no eixo do motor

 

Para exemplificar, um sensor hall KY_003 é capaz de sentir o campo proveniente de um ímã de neodímio a uma distância média de 1 cm entre eles.

 

Figura 5: Sensor KY_003

 

Ligue o motor, o osciloscópio e certifique que a medida está sendo realizada. Possíveis erros nessa etapa estão relacionados com mal contato dos componentes ou da ponta de prova do osciloscópio. Portanto, certifique que erros não estejam ocorrendo e prossiga . Outro erro possível está nas configurações do osciloscópio, que pode estar exibindo valores de tensão em uma faixa maior ou menor que a necessária. Verifique o manual dos equipamentos  faça os ajustes necessários.

 

Figura 6: Montagem de bancada

Resultados obtidos

Com base em todo o procedimento, observe o valor de frequência com que o pulso do sensor acontece. O valor informado diz quantas vezes o pulso acontece em um segundo, ou seja o número de voltas do motor em um segundo. Utilizando matemática simples é possível determinar o número de voltas por minutos, efetuando a seguinte regra de 3:

 

pulsos em um segundo — 1 segundo

velocidade em rpm — 60 segundos

 

O resultado desse cálculo fornece a velocidade do motor medida em rpm. É possível, conforme aplicação do motor, utilizar do mesmo sistema para medir a rotação e com alguns cálculos obter valores em m/s ou km/h.

Considerações finais

A possibilidade de adaptação do método existe, com a utilização de um Arduíno por exemplo. Os pulsos do sensor podem ser contados, e transformados em velocidade da mesma maneira. Um exemplo de utilização no Arduíno está relacionada ao acionamento e controle do motor utilizado o Arduíno. É possível utilizar o valor da velocidade tanto como feedback para o controlador, quanto para variável de saída.

Figura 7: Gráfico plotado no MatLab com dados adquiridos pelo Arduíno

Saber a velocidade do motor é útil em vários aspectos. Testes de bancadas para melhoria em plantas de controle por exemplo. Com base nos valores de velocidade oferecido pelo método e tensão/corrente pela fonte é possível modificar algum parâmetro da planta de controle. Seguindo esse raciocínio, a utilização do método é útil em um serie de aplicações e seu baixo custo o torna atrativo.


Controle de potência via PWM - ESP32

Controle de potência via PWM - ESP32 

A modulação por largura de pulso (PWM) é uma técnica amplamente utilizada em diversos meios, principalmente para controle de potência e velocidade. Neste tutorial, você aprenderá a configurar o PWM no ESP32 através do recurso LED PWM e fazer um LED "respirar" (fade) ou acender com metade do brilho.

[toc]

Pulse Width Modulation

Controle de potência via PWM - ESP32

Com o PWM, podemos controlar a tensão média em um componente, e por consequência a potência, como um LED, a velocidade de um motor DC ou até converter o sinal PWM criado (onda quadrada) para uma onda senoidal com a adição de alguns poucos itens.

As imagens (GIF) abaixo mostram o duty cycle variando, que altera a tensão média entregue ao componente. Em alguns casos como motores, também é preciso configurar corretamente a frequência de chaveamento e ter atenção ao nível de pico máximo aceito na alimentação, entretanto isso ficará de "lição de casa" para pesquisarem.

Controle de potência via PWM - ESP32
Brilho de LED com a variação do duty cycle
Controle de potência via PWM - ESP32
Tensão média com a variação do duty cycle

 


Mãos a obra - Variando o brilho do LED

Componentes necessários

Código do projeto

void setup()
{
	pinMode(2, OUTPUT);//Definimos o pino 2 (LED) como saída.

	ledcAttachPin(2, 0);//Atribuimos o pino 2 ao canal 0.
	ledcSetup(0, 1000, 10);//Atribuimos ao canal 0 a frequencia de 1000Hz com resolucao de 10bits.
	
}

void loop()
{
	for (int i = 0; i < 1024; i++)
	{
		ledcWrite(0, i);//Escrevemos no canal 0, o duty cycle "i".
		delay(2);
	}

	for (int i = 1023; i > 0; i--)
	{
		ledcWrite(0, i);
		delay(2);
	}
}

Colocando para funcionar

O código fará um "fade" no LED, dando a sensação de "respiração", aumentando e diminuindo o brilho gradativamente.


Entendendo a fundo

Software

-Função ledcAttachPin()

ledcAttachPin(PINO, CANAL);

Esta função apenas atribui um pino a um canal. Podemos escolher qualquer pino a qualquer canal, este vai de 0 a 15, totalizando 16 canais.

Cada canal é independente do outro, mas você também pode atribuir vários pinos a um mesmo canal.

Pino: Qualquer.

Canal: 0 - 15.

-Função ledcSetup()

ledcSetup(CANAL, FREQUENCIA, RESOLUCAO);

Esta função configura um canal para trabalhar a uma determinada frequência e resolução.

Canal: 0 - 15.

Frequência: 1 - 40MHz.

Resolução: 1 - 16 bits.

-Função ledcWrite()

ledcWrite(CANAL, DUTY CYCLE);

Esta função "escreve" o duty cycle ao canal. Lembramos que o valor colocado no parâmetro duty cycle não é em porcentagem e sim em decimal.

Exemplo: para um duty cycle de 50% com 10bits (2^10 = 1024) de resolução, devemos escrever 512.

Canal: 0 - 15.

Duty cycle: 0 - 100% (em decimal).


Indo além com PWM 

Tensão média

Podemos calcular a tensão média (V) entregue ao componente através de uma simples conta que relaciona o sinal HIGH com o duty cycle.

Sinal HIGH do ESP32 (Vcc): ~3.3V.

Duty cycle: 32%.

Ao efetuar a conta de 3.3*0.32, chegamos a conclusão que a tensão média (Vm) entregue será de 1.056V!

Vamos testar este código e verificar as tensões com um multímetro.

void setup()
{
	pinMode(23, OUTPUT);//Definimos o pino 23 como saída.
	pinMode(22, OUTPUT);//Definimos o pino 22 como saída.
	pinMode(21, OUTPUT);//Definimos o pino 21 como saída.
	pinMode(19, OUTPUT);//Definimos o pino 19 como saída.

	ledcAttachPin(23, 0);//Atribuimos o pino 23 ao canal 0.
	ledcSetup(0, 1000, 10);//Atribuimos ao canal 0 a frequencia de 1000Hz com resolucao de 10bits.
	ledcWrite(0, 256);//Escrevemos um duty cycle de 25% no canal 0.

	ledcAttachPin(22, 1);//Atribuimos o pino 22 ao canal 1.
	ledcSetup(1, 1000, 10);//Atribuimos ao canal 1 a frequencia de 1000Hz com resolucao de 10bits.
	ledcWrite(1, 512);//Escrevemos um duty cycle de 50% no canal 1.

	ledcAttachPin(21, 2);//Atribuimos o pino 21 ao canal 2.
	ledcSetup(2, 1000, 10);//Atribuimos ao canal 2 a frequencia de 1000Hz com resolucao de 10bits.
	ledcWrite(2, 768);//Escrevemos um duty cycle de 75% no canal 2.

	ledcAttachPin(19, 3);//Atribuimos o pino 19 ao canal 3.
	ledcSetup(3, 1000, 10);//Atribuimos ao canal 3 a frequencia de 1000Hz com resolucao de 10bits.
	ledcWrite(3, 1023);//Escrevemos um duty cycle de 100% no canal 3.
}

void loop()
{

}

Testando este código e verificando o pino respectivo com um multímetro, podemos perceber que as contas são iguais ou próximas. Lembrando que o próprio multímetro tem sua faixa de precisão (erro), que neste caso é (+-0.5% + 3D com 1mV de resolução).

Todos os testes a seguir tem Vcc teórico de 3.3V, as imagens são as leituras do nosso multímetro.

Caso 1, 25% = 0.825V

25%

Caso 2, 50% = 1.65V

50%

Caso 3, 75% = 2.475V

75%

Caso 4, 100% = 3.3V

100%

Todos os valores lidos, mesmo estando próximos aos teóricos, há o erro do multímetro. Aplicando a formula de erro ao valor lido, todos os valores obtidos estão dentro da faixa tolerável de erro, ou seja, estão corretos!

Frequência X resolução

Um problema recorrente com alguns componentes é a frequência necessária de funcionamento. Motores por exemplo, é bastante usado entre 20kHz e 200kHz.

O recurso "LED PWM" do ESP32 é baseado em um clock de 80MHz, logo podemos fazer algumas contas básicas para se chegar a frequência máxima com a resolução escolhida.

Nos exemplos acima, foi usado uma frequência de 1kHz com 10bits de resolução, entretanto pode ser necessário o uso de uma frequência muito maior e a resolução é uma das barreiras para isso. Vamos fazer essa conta com os dados citados para chegar na frequência máxima (Fm).

A resolução deve ser em decimal e não "bits".

80MHz / 10bits

80000000 / 1024 = 78125Hz

A frequência máxima que conseguimos chegar com uma resolução de 10bits no ESP32 é de ~78kHz. Vamos testar!

Caso 1, 32kHz com 10bits

Caso 1

Caso 1.1, 80kHz com 10bits

Caso 1.1

Como feito nas contas, a frequência máxima realmente foi de ~78kHz para 10bits, mesmo atribuindo 80kHz no código. Agora vamos brincar com frequências mais altas deixando a resolução em 3bits e ver a frequência máxima.

80MHz / 3bits = Fm

80000000 / 8 = 10MHz

Caso 2, 2MHz com 3bits

Caso 2

Caso 2.1: 11MHz com 3bits

Caso 2.1

Novamente, as contas mostraram um máximo de 10MHz e mesmo atribuindo 11MHz, ficou limitado a 10MHz.


Considerações finais

O PWM é extremamente útil em diversos projetos, permitindo o controle de potência, velocidade, brilho e até inversores (DC-AC) através da modulação da tensão. Apesar de parecer simples apenas "inverter o estado do pino", com frequências um pouco mais altas, não é qualquer microcontrolador que aguenta se manter com uma frequência estável ou se quer chegar em frequências acima de 10MHz. O ESP32 com 1bit de resolução nos permite chegar a 40MHz, dando uma vasta gama de possibilidades em aplicações.