O PLC 32 possui uma interface I2C isolada que possibilita a conexão com placas de expansão. Essas placas são utilizadas para aumentar o número de entradas optoacopladas, saídas de relé, além de entradas e saídas analógicas do PLC 32.
Neste blog, vamos aprender como utilizar as entradas do módulo analógico I2C com o PLC 32.
Sumário
1. Visão geral
O PLC 32 possui uma interface que permite a conexão de dispositivos I2C ao ESP32 através de um conector RJ45, facilitando a integração. O hardware conta com um ADUM1250, que isola os pinos de comunicação I2C, e um B0305S, que separa a alimentação do PLC 32 da placa de expansão, garantindo um isolamento elétrico completo. A figura a seguir ilustra a área da placa dedicada a essa comunicação.
Na placa PLC 32, como o LAN8720 incorporado utiliza os pinos I2C padrão do ESP32, é necessário redefinir os pinos para comunicar com as expansões I2C. A tabela a seguir mostra os pinos utilizados para a comunicação.
Na parte inferior da placa, há 4 jumpers. Ao removê-los, é possível desativar os resistores de pull-up (SDA e SCL). Por padrão, o PLC 32 fornece energia para a placa conectada ao barramento. No entanto, se for necessário desconectar essa alimentação, basta cortar os jumpers 5V e GND. Os jumpers estão destacados na figura a seguir.
Na figura a seguir, podemos ver uma representação da topologia utilizada para conectar o PLC 32 (placa preta) a um módulo analógico e um de expansão (vermelhas), utilizando a conexão I2C via RJ45.
No link I2C estamos disponibilizando exemplos de como utilizar a comunicação I2C no PLC 32.
2. Como utilizar as entradas do módulo analógico
O módulo analógico é capaz de ler 3 entradas de tensão (0 - 10V) e 5 entradas de corrente (4 - 20mA). Para demonstrar seu funcionamento, vamos realizar a leitura de uma entrada de tensão e outra de corrente. Na figura a seguir, podemos ver a topologia utilizada neste exemplo.
O PLC 32 irá ler os valores das entradas e exibi-los no monitor serial. A seguir, podemos ver o código utilizado no exemplo.
#include <Wire.h> // Inclui a biblioteca Wire para comunicação I2C
#include <ADS7828.h> // Inclui a biblioteca ADS7828 para controlar o ADC ADS7828
ADS7828 adc(0x48); // Define o endereço I2C do ADS7828 como 0x48 (A0 e A1 conectados a 5V)
void setup() {
Wire.begin(33, 5); // Inicializa a comunicação I2C nos pinos 33 (SCL) e 5 (SDA)
Serial.begin(9600); // Inicializa a comunicação serial a 9600 bps
adc.init(INT); // Inicializa o ADC ADS7828 com a configuração de interrupção (INT)
}
void loop() {
unsigned int read_value = 0; // Declara uma variável para armazenar o valor lido do ADC
float voltage = 0; // Declara uma variável para armazenar a voltagem calculada
for (int x = 0; x < 2; x++) { // Loop para ler os dois canais do ADC (canal 0 e canal 1)
read_value = adc.read(x, SD); // Lê o valor do canal x do ADC com modo de leitura single-ended (SD)
voltage = read_value * (10000.0 / 4095.0); // Calcula a voltagem em mV com base no valor lido (ADC de 12 bits)
Serial.print("Channel "); // Imprime a string "Channel " no monitor serial
Serial.print(x); // Imprime o número do canal no monitor serial
Serial.print(": "); // Imprime ": " no monitor serial
Serial.print(read_value); // Imprime o valor lido do ADC no monitor serial
Serial.print(" ("); // Imprime " (" no monitor serial
Serial.print(voltage, 0); // Imprime a voltagem calculada (sem casas decimais) no monitor serial
Serial.print(" mV)"); // Imprime " mV)" no monitor serial
if (x == 0) {
Serial.print(" "); // Imprime um espaço no monitor serial
Serial.print(voltage * 0.0029 - 3.3191); // Converte a voltagem em mV para corrente em mA (equação específica)
Serial.println(" mA)"); // Imprime " mA)" e pula para a próxima linha no monitor serial
} else {
Serial.println(""); // Pula para a próxima linha no monitor serial
}
}
Serial.println(); // Pula para a próxima linha no monitor serial (linha em branco)
delay(500); // Aguarda 500 milissegundos antes de repetir o loop
}
A biblioteca utilizada no código (ADS7828.h) está disponível para download neste link. Para incluí-la na IDE do Arduino, primeiro baixe o repositório completo, extraia o conteúdo do ZIP e compacte em um arquivo .zip a pasta ADS7828. Depois vá em Sketch -> Incluir Biblioteca -> Adicionar Biblioteca .zip.
No exemplo estamos realizando a leitura das duas entradas e exibindo os resultados no monitor serial. na figura a seguir podemos ver o resultado obtido.
No canal 0 estamos lendo corrente, enquanto no canal 1 estamos lendo tensão. No monitor serial, exibimos para o canal 0, respectivamente, a leitura do conversor A/D, a tensão medida e a corrente. Para o canal 1, exibimos apenas a leitura do A/D e a tensão.
Para converter a leitura do conversor A/D em tensão, multiplicamos o valor por 10 (tensão de referência do A/D) e depois dividimos por 4095 (valor máximo do A/D). Esse cálculo foi utilizado nos dois canais. Para converter em corrente, realizamos a calibração da entrada para encontrar a equação que relaciona a tensão medida com a corrente. Na imagem a seguir, podemos ver o gráfico e a equação obtidos.
Neste blog, vimos como utilizar o módulo analógico no PLC 32. Esse módulo permite que o PLC 32 utilize entradas analógicas com isolamento elétrico. Se você deseja ver mais detalhes sobre o PLC 32, acessar o seu manual ou adquirir uma unidade, clique neste link.
Autor: Thales Ferreira
Comments