
Na parte anterior do artigo, examinamos o estágio de início do design do sistema. Agora quero dizer que tipo de dispositivo foi lançado no final.
Parte 1
Parte 2
Na discussão da primeira parte, a questão da medição de tensão e corrente foi levantada. Portanto, decidi abordá-lo com mais detalhes. Como escrevi anteriormente, os sensores de tensão e corrente em nosso circuito são transformadores. Um transic miniatura BV 201 0145 é usado para medir a tensão, e para o sensor de corrente AC-1020:

As tensões são removidas deles, que são digitalizadas pelo ADC embutido no microcontrolador. A parte analógica é mostrada abaixo:

O sensor de corrente é carregado no resistor R3. O diodo Zener VD3 protege contra surtos repentinos de tensão causados por surtos de corrente curtos. Os resistores R2, R4 definem o "ponto zero" em torno de 1.8V. O mesmo é feito para o transformador de potencial. Somente existe um divisor nos resistores R8 e R10, já que o transformador em nosso caso produz uma tensão nominal de 12 V.
Efetuamos digitalização a uma frequência de 1000 Hz por 200 ms. Com base nos valores obtidos, calculamos o RMS. Fazemos um cálculo rápido dos valores quadrados logo na interrupção. Após 200 amostras terem sido acumuladas, o cálculo final usando números de ponto flutuante é executado no loop principal do programa.
Por que você precisa medir o RMS e a melhor forma de fazê-lo está bem descrito aqui neste artigo .
Já escrevi mais de uma vez que, ao desenvolver nossos dispositivos, procuramos sempre aproveitar ao máximo os componentes eletrônicos mais comuns, a fim de, por um lado, reduzir o custo e, por outro lado, não ter problemas de abastecimento durante a produção da série. Neste projeto, todos os resistores usados têm uma tolerância de 5%. Naturalmente, devido a tal erro, os produtos após a produção apresentavam um grande erro ao medir a tensão e a corrente. Este erro foi eliminado em uma bancada de calibração automatizada. O "suporte", é claro, soa um pouco alto, mas executa sua função como deveria. O estande consiste nos seguintes componentes:
- Conjunto de três lâmpadas halógenas de 500 W
- Sensor de corrente descrito acima
- Medidor de eletricidade Energomera CE102M
- Conversor USB-RS-485
- Disjuntor
Usamos o medidor como um medidor exemplar para a tensão da rede e a corrente de carga. O modelo CE102M é muito prático porque, em primeiro lugar, é conectado com apenas dois fios ao conversor USB-RS-485 (há seu próprio conversor de energia dentro do medidor) e, em segundo lugar, não exige a inserção do número de série para a leitura dos dados. Parece uma bagatela, mas eles adicionam conveniência ao usar o contador.
O protocolo de troca está bem descrito no manual do fabricante. Portanto, não houve dificuldades com a implementação do software.
A propósito, você pode escrever um pequeno artigo separado sobre contadores. Ao mesmo tempo, trabalhei em estreita colaboração com eles, como resultado, alguns dos nossos dispositivos suportam quatro modelos populares: Incotex-SK "Mercury 206", Energomer "CE102", Energomer "CE102M" e IEK "STAR 104/1".
A visão geral do estande resultou da seguinte forma:

Para a automação, foi desenvolvido um programa simples que lê os dados do medidor, controla os relés integrados do controlador e seleciona automaticamente os coeficientes para o medidor de corrente e tensão:
Normalmente usamos códigos de barras para os números de série dos nossos dispositivos. É muito conveniente inseri-los por meio de um leitor de código de barras:

Mas, neste caso, o dispositivo foi encomendado e o cliente solicitou que executasse a série simplesmente na forma de números grandes no painel frontal.
O programa de calibração salva todos os dados em nosso sistema interno. Ele registra quem, quando o que foi verificado e a lista de parâmetros correspondente. Os mais importantes são o número de série e o endereço MAC.
A propósito, sobre os endereços MAC. Nós os compramos como chips 24AA025E48-I / SN da Microchip. Quando adquiridos a granel, são baratos e muito fáceis de usar. O endereço MAC é lido na interface I2C.
Agora, para a conexão com o servidor. No início do desenvolvimento, já tínhamos a funcionalidade principal. É um serviço da web simples escrito em ASP.net e um programa de servidor separado para comunicação com o hardware. Cada controlador uma vez por minuto transmite um pacote de informações por meio do protocolo UDP. O software do servidor analisa, armazena os dados no banco de dados (com "dizimação" até uma vez por hora) e, adicionalmente, lembra o endereço IP externo e a porta de onde veio o pacote. Isso é necessário para controlar o controlador do servidor.
Como, de fato, 100% dos dispositivos estão localizados atrás do NAT, é necessário levar em consideração algumas peculiaridades. A principal delas é que alguns NATs possuem um pequeno timeout para alocar uma porta externa ao cliente (menos de um minuto). O percentual de tal, de acordo com nossas estatísticas, não é muito grande, mas isso de qualquer forma leva à necessidade de reduzir o intervalo de envio dos dados de monitoramento do controlador ao servidor para "manter" a porta dedicada.
Vou escrever imediatamente porque estamos usando conexões UDP e não TCP, embora nosso dispositivo, é claro, tenha uma implementação de ambos os protocolos. A escolha de UDP é baseada apenas na facilidade de uso e baixos custos computacionais tanto no lado do controlador quanto no lado do servidor. Sim, não garante a entrega de pacotes de dados, mas você precisa entender que isso é facilmente implementado por um protocolo de camada superior que é executado em cima do UDP. Além disso, ao transmitir dados de monitoramento, a perda de vários pacotes por dia é absolutamente insignificante, especialmente considerando que ao salvar no banco de dados, ainda "diluímos" e salvamos os dados apenas uma vez por hora. Já quando o controlador é controlado remotamente, por exemplo, quando o relé é ligado / desligado no modo manual, o sistema “solicitação-resposta” funciona e várias tentativas de envio de comando são feitas.
Além disso, através do servidor implementamos uma atualização remota do "firmware" dos controladores. Também funciona em UDP. É verdade que a atualização funciona em um modo semiautomático. Mesmo assim, não é bom executá-lo na máquina em um momento arbitrário, pois isso pode causar um problema no trabalho dos usuários finais. Imagine como eles ficarão surpresos se em plena luz do dia o relé Ethernet desconectar parte da carga e reiniciar :-)
Para concluir, gostaria de dizer que nos últimos dois anos produzimos quase mil desses dispositivos. Todos eles estão online. Cerca de dois mil outros controladores também se comunicam constantemente com nosso servidor. Em geral, tudo funciona de forma bastante estável. Embora, é claro, estejamos constantemente expandindo a funcionalidade. Por exemplo, recentemente liberamos uma multidão. aplicativo para controle remoto de nossos dispositivos via Internet. Mas escreva sobre ele na próxima vez ...