|
|
2015 |
|||||||||
Autores: |
|||||||||||
Vasco Gilherme Moreira Ferreira (Nº 1940310) |
1940310@isep.ipp.pt |
||||||||||
Juan Manuel Cunha Silva (Nº 1120859) |
1120859@isep.ipp.pt |
||||||||||
|
|||||||||||
Com o aumento das tarifas de energia e a crescente preocupação com as repercussões no ambiente devido ao aumento do consumo de energia, torna-se cada vez mais necessário que as famílias conheçam o seu perfil de consumo. Existem diversos processos para se conhecer esse perfil, muitos disponíveis na Internet, mas sem dúvida que o ideal será a medição efetiva e real do consumo que registamos nas nossas casas. Requisitos: Criação de um dispositivo que permita a monitorização do consumo de energia doméstico e a análise do consumo diário e mensal. O sistema deverá permitir a visualização em tempo real do consumo de energia e análise desse consumo num determinado período de tempo, para instalações domésticas de potência contratada até 10,35 kVA. Existência de um led a piscar a uma frequência de 1 Hz. |
|||||||||||
O tratamento de dados é realizado por um micro-controlador de 8 bits Atmega328/P 28PDIP [1] que, mede a tensão, corrente, fase e frequência, da alimentação 240Vac da habitação em causa. O sistema dispõe, para interface ao utilizador, de um HMI local através de um LCD alfanumérico mais teclado e um sistema HMI remoto para PC com SO Windows através de comunicação porta série/Bluetooth com o Painel de controlo. |
|||||||||||
O hardware utilizado no projeto é constituído por 8 circuitos que são fundamentais para o funcionamento do painel de energia. De seguida iremos abordar cada um desses circuitos: Fonte de alimentação, constituído por: · 1 Transformador 230 V/12-0-12 V 0,5 A · 1 Ponte retificadora W02MG · Reguladores de tensão 1 LM7812, 1 LM7912, 1 LM 7805 · 2 condensadores eletrolítico de 4700 μF · 1 condensador eletrolítico de 2,2 μF · 1 condensador eletrolítico de 1 μF · 2 condensadores de poliéster de 330 nF · 2 condensadores de poliéster de 100 nF · 2 díodos 4001
Placa condicionamento de sinal: Sensor de tensão + condicionamento da tensão: · 1 transformador de tensão 230/6 V 0,6 VA · 1 AMPOP TL084 montagem em buffer de tensão · Divisor resistivo constituído por 2 resistências 10 kΩ, 15 kΩ Para o sensor de tensão utilizou-se um transformador de tensão 230Vac/6Vac, garantindo assim isolamento e um nível de tensão adequado para posterior tratamento do sinal. V1
=
À saída do condicionamento de tensão, para uma entrada de 230Vac, temos 4,2 Vdc. Filtro passa baixo de 2º ordem: · 1 AMPOP TL084 montagem de filtro passa baixo de 2º ordem de aproximação de butterworth. · 2 resistências de 39 kΩ · 1 condensador de poliéster de 22 nF · 1 condensador de poliéster de 10 nF
Utilizou-se um filtro passa-baixo de 2ª ordem para eliminar ruído de alta frequência evitando distorção à entrada do detetor de passagem por 0V. A frequência de corte do filtro é de 275Hz conforme cálculos efetuados :
Como R2=R8=R=39 kΩ e para termos uma aproximação de butterworth o fator de qualidade tem que ser de 0,7 temos C3,C4 de: C3
=
C4
=
A retificação de AC para DC foi realizada em duas etapas, retificação e filtragem: Circuito retificador: · 2 AMPOP TL084 (montagem retificador de onda completa de precisão). · 1 díodo 1n4148 · 3 resistências de 10 kΩ
O primeiro AMPOP funciona como um díodo ideal. Aqui o díodo poderá ser analisado como comutador, pois o AMPOP fornece a tensão de polarização direta e necessária à condução do díodo (quando a entrada é positiva), de modo que na saída tem-se a mesma tensão da entrada sem perdas. Na alternância negativa vai estar em saturação com a saída = 0 V. Resposta em frequência: A transição da região de saturação do AMPOP para a região linear envolve um certo tempo (dado pela Slew-Rate) e gera distorções no sinal retificado, limitando a frequência de operação. Para evitar essa distorção utilizou-se os AMPOP TL084 [2] que tem o SR de 13 V/μs. No segundo AMPOP o segundo estágio consiste num amplificador subtrator realimentado operando na região linear. Filtragem: · 2 AMPOP TL084 · 4 resistências de 39 kΩ · 2 condensadores de poliéster de 470 μF · 2 condensadores de poliéster de 220 μF
Depois de retificado o sinal tem que ser filtrado para obter o valor médio, para isso construiu-se um filtro de aproximação de butterworth de 4ª ordem com uma frequência de corte de 12 Hz. Para a tensão de 5 V temos um ripple de 1mV, valor aceitável dado a resolução do AD do micro-controlador ser de 5mV:
|H(jω)| =
Detetor por passagem de zero: · 1 comparador LM339 · 2 resistências de 15 kΩ · 1 resistências de 10 kΩ O LM339 e a resistência R11 formam a típica montagem de passagem por zero conforme disponível na data sheet do LM339 [3] . O díodo e as resistências R12, R13 vão eliminar a alternância negativa e baixar a tensão para cerca de 5 V, conforme necessário para as entradas das interrupções do micro-controlador. Sensor de corrente + condicionamento da corrente: ·Transformador de corrente (Non-Invasive Current Sensor - 30A Modelo INM-0546 ) · 3 AMPOP TL084 (montagem amplificador de instrumentação ) · 6 resistências de 22 kΩ · 1 resistência de 180 Ω · 1 resistência de 15 kΩ Utilizou-se um transformador de intensidade linear, não evasivo, ou seja, cuja montagem não obriga a desligar fios na instalação para intercalar o TI. O TI tem uma relação de transformação 60 A / 30 mA sendo adequado para a grande maioria das potências contratadas nas habitações domésticas. O ganho do amplificador de instrumentação é 1 com R3 de 180 Ω. A corrente máxima que se pode medir é de 55 A, sendo assim possível monitorizar instalações de potência contratada até 10,35 kVA. Os restantes circuitos, no condicionamento de corrente, são iguais aos utilizados no condicionamento de tensão. (filtro passa baixo de 2º ordem, circuito retificador, filtro para retificação, detetor de passagem por zero). Foi utilizado um display LCD alfanumérico de 16X2, que utiliza um controlador HD44780. Optou-se por a utilização de 4 linhas de dados, em vez de 8, de forma a poupar pinos de ligação do micro-controlador. O detetor de passagem por 0 da tensão ligou-se ao PD2 (INT0). O detetor de passagem por 0 da corrente foi ligado ao PD3(INT1). O condicionamento de tensão foi ligado ao PC0 (ADC0) e o de corrente foi ligado ao PC1 (ADC1). Ligaram-se resistências pulldown nas entradas AD do micro, porque verificou-se que, na eventualidade de existir uma quebra de ligação na entrada dos AD do micro, obtínhamos leituras erradas, tornando-se assim necessário nestes casos forçar a entrada do AD a 0V. Utilizou-se um filtro LC passa baixo no pino AVC para eliminação de ruído de conversão ADC e um condensador ao pino AREF do micro. As teclas do HMI local para navegação dos menus no LCD foram ligados ao pinos PD5,PD6,PD7. Placa do Micro-controlador: Para o micro-controlador foram programados os fusíveis para permitir a utilização de uma frequência de clock de 12 MHz, com um cristal externo. Utilizou-se uma montagem com o MAX232 de forma a implementar uma porta série a fio para diagnóstico. Utilizou-se um módulo Bluetooth HC-05 para comunicação com a aplicação de acesso remoto ao Painel de monitorização. A placa do micro-controlador prevê um socket para a utilização de uma eeprom externa 24LS256 com comunicação I2C para guardar dados. Conforme pedido nos requisitos existe um led a piscar com frequência 1Hz. Foi utilizado um display LCD alfanumérico de 16X2, que utiliza um controlador HD44780. Optou-se por a utilização de 4 linhas de dados PB0 a PB3, em vez de 8, de forma a poupar pinos de ligação do micro-controlador. Os pinos de controlo do LCD ligaram PC3(EN), PC2 (RS) com o pino (RW) do LCD ligado ao GND uma vez que apenas se realizam escritas e nunca leituras. O detetor de passagem por 0 da tensão ligou-se ao PD2 (INT0). O detetor de passagem por 0 da corrente foi ligado ao PD3(INT1). O condicionamento de tensão foi ligado ao PC0 (ADC0) e o de corrente foi ligado ao PC1 (ADC1). Ligaram-se resistências pulldown nas entradas AD do micro, porque verificou-se que, na eventualidade de existir uma quebra de ligação na entrada dos AD do micro, obtínhamos leituras erradas, tornando-se assim necessário nestes casos forçar a entrada do AD a 0V. Utilizou-se um filtro LC passa baixo no pino AVC para eliminação de ruído de conversão ADC e um condensador ao pino AREF do micro. As teclas do HMI local para navegação dos menus no LCD foram ligados ao pinos PD5,PD6,PD7. Lista de material usado aqui. Esquema da placa do condicionamento de sinal. Esquema da placa do micro-controlador. PCB: Após a construção de todo o esquema elétrico, procedeu-se à sua conversão para layout. Dispusemos todos os componentes da forma mais adequada e efetuamos todas as ligações, obtendo uma PCB para o condicionamento do sinal. E uma outra para o micro_controlador.
|
|||||||||||
Micro-controlador: O software para o micro-controlador foi desenvolvido em linguagem C, na plataforma de desenvolvimento Atmel Studio 6.2. Optou-se por programar em C, em detrimento do assembly, visto ser mais rápido de programar permitindo uma razoável otimização do código. A programação foi efetuada também tendo em conta a portabilidade do código para a utilização de outro micro-controlador. O micro-controlador tem como principais funções:
No ponto 1, a aquisição é realizada através dos conversores ADC em free running a uma frequência de 187,5 kHz, tempo de conversão de cerca de 69 us. Utilizou-se a interrupção gerada pelo micro em vez de poolling para realizar a leitura dos valores de entrada de forma alternada entre a tensão e a corrente, de 10 em 10 ms (Timer2). A rotina de interrupção do ADC é utilizada como base (69 us) para contadores. É realizada a média de 50 leituras realizadas num período de 1s para a tensão e corrente. A frequência é medida através dum contador (base de tempo do ADC) iniciado pela interrupção gerada pela deteção de 0V (a cada flanco ascendente) da tensão. A fase é medida pelo mesmo processo, um contador (base ADC) iniciado pela interrupção gerada pela deteção de 0V da tensão e medido até à interrupção gerada pela deteção de 0V da corrente. /******************** Rotina de atendimento interrupção ADC *********************/ ISR (ADC_vect) { cnt_HZ++; //contador para calcular a frequencia cnt_leiturasU++; //contador para aproveitar so uma leitura da corrente e outra da tensão
switch(flag_ADC){ case 0: //leitura da tensão leituraL0 = ADCL; //Leitura Registo Low leituraH0 = ADCH; //Leitura Registo High break; case 1: //leitura da corrente leituraL1 = ADCL; //Leitura Registo Low leituraH1 = ADCH; //Leitura Registo High break; } switch(flag_fase_I){ case 0: //esta a contar o tempo do desfasamento cnt_fase++; break; default: //acabou a contagem do desfasamento if ( d <= 49){ //num segundo vai somar 50 contagem da fase cnt_fasemed = cnt_fasemed + cnt_fase; . . . . . No ponto 2, utilizou-se uma biblioteca para o LCD com os comandos necessários à escrita em 4 bits das strings a mostrar ao utilizador no LCD. O envio das strings é feito carácter a carácter linha a linha. Foi implementado uma função para ler o teclado, de 3 teclas, para navegação dos menus no LCD, em que as 3 teclas assumem funções diferentes consoante o menu selecionado. Os menus foram estruturados com índices fixos de forma a facilitar a sua seleção. void teclas(void){ //função para ler os botões do LCD não tem argumentos de entrada nem de saida uint8_t switches; switches = PIND & 0b11100000; //botões para menus do LCD switch(switches){ case 0b11000000: //botão cancel tec=1; break; . . . . case 0b11100000: //tecla libertada if (tec != 0 && cnt_tecla > 3) //se foi pressionada tecla e passou 30 ms (para eliminar ruído no botão) { tecla = tec; //tecla pressionada . . . . No ponto 3, utilizou-se uma função de envio de dados pela UART de forma a enviar de segundo a segundo os cálculos efetuados no ponto 4. Para a receção de dados utilizou-se o interrupt de dados recebidos da UART. Utilizaram-se funções para tratamento de dados recebidos, como a tarifa a guardar em eeprom interna do micro-controlador assim como os parâmetros de tensão máxima e mínima. No ponto 4, utilizaram-se macros para facilitar os cálculos das grandezas como tensão média, corrente média e potências. Através das grandezas base (tensão, corrente e fase) são calculadas as restantes grandezas a apresentar no LCD e enviar ao HMI remoto. No ponto 5, é feita a gestão do parâmetros na eeprom interna conforme referido no ponto 3. Para implementação futura a gravação de valores de consumo de energia hora a hora na eeprom externa. A comunicação com a eeprom será baseada no protocolo I2C ou TWI. Cálculos para configurações do micro-controlador. PC: O software para controlo remoto foi desenvolvido usando a linguagem de programação Visual Basic.NET [4] na plataforma de desenvolvimento Visual Studio Express 2013. Foram criados, conforme link disponível, os seguintes menus e controlos disponíveis ao utilizador. Na inicialização da aplicação todas as medidas, quer as medidas base enviadas pelo micro (U,I,,Hz,Fase,), como as calculadas são colocadas a zero, no evento gerado quando se abre este menu. Com a colocação em ON do sistema, é usado o método GetPortNames para mostrar ao utilizador as portas série disponíveis no PC, comm física ou Bluetooth, para estabelecer a comunicação com o micro. Private Sub btnOnOff_Click(sender As Object, e As EventArgs) Handles btnOnOff.Click ... Dim commports As Array commports = IO.Ports.SerialPort.GetPortNames() For i = 0 To UBound(commports) frmPortaSerie.cbxComms.Items.Add(commports(i)) Next frmPortaSerie.Show() ... O sistema mostra então o valor atual das medidas. Para tal implementou-se um protocolo de comunicações com verificação de erros, e estabeleceu-se o formato para as várias mensagens de transferencia de dados, através de duas rotinas, SendSerialData e mySerialPort_DataReceived. Public Sub mySerialPort_DataReceived(ByVal sender As System.Object, _ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) If comOpen Then Try readBuffer = mySerialPort.ReadLine() 'dados para thread Me.Invoke(New EventHandler(AddressOf UpdateMed)) Catch ex As Exception . . . Public Sub SendSerialData(ByVal data As String) ' envia dados pela PS If ON_OFF Then Try mySerialPort.WriteLine(data) Catch ex As Exception . . . Na receção recorreu-se a um procedimento que invoca um eventHandler, devido aos dados estarem numa outra treath e por isso, não acessíveis, ao form no qual foi utilizado o método de ReadLine da porta série. A configuração da porta série, na inicialização, estabelece 10s para timeout de leitura do buffer e 2 bytes para gerar o evento que desperta a função de leitura do buffer de receção. Public Sub CommPortSetup() With mySerialPort .PortName = SelComm .BaudRate = 19200 .DataBits = 8 .Parity = Parity.None .StopBits = StopBits.One .Handshake = Handshake.None 'threshold: numero de bytes para activar event na PS .ReceivedBytesThreshold = 2 .ReadTimeout = 10000 End With O micro envia ciclicamente, de segundo a segundo, o valor atualizado das medidas base, ficando a cargo do Visual Basic o calculo das restantes grandezas mostradas ao utilizador. O utilizador pode selecionar a opção de “Receber dados” que lhe permitiria receber do Painel de Controlo, os dados de energia consumida, hora a hora e que foram guardados em eeprom. Try If Not System.IO.File.Exists(path_txt_receber) Then System.IO.File.Create(path_txt_receber).Dispose() End If . . . tmrTimeout.Interval = 5000 tmrTimeout.Enabled = True Catch ex As Exception MsgBox("Error: " & ex.Message) End Try Esta funcionalidade não foi porém implementada do lado do micro-controlador por limitações de tempo necessárias á implementação do protocolo I2C necessário á comunicação com a eeprom externa. Em alternativa o utilizador pode gravar a energia consumida através da opção “Iniciar Gravação”. If hora = (init_hora + 1) Then 'escreve valor de gravar_Energia_hora na linha actual Try Using sw_gravar As StreamWriter = New StreamWriter(path_txt_gravar, True) If novo_dia Then Dim str_en As String = ("M;" & mes & ";" & dia & ";" & hora & ";" & Format(kwh, "0.000") & ";") sw_gravar.Write(str_en) novo_dia = False Else sw_gravar.Write(hora & ";" & Format(kwh, "0.000") & ";") . . . . . Para ambas as situações, “Receber dados” e “Iniciar Gravação” os dados são gravados num ficheiro *.txt, com o mesmo formato de mensagens e ficam disponíveis ao utilizador para posterior análise no PC através da opção “Gráficos”. Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click Try str_File = OpenFileDialog1.OpenFile() If Not (str_File Is Nothing) Then frmGraficos.Label4.Text = "Ficheiro: " & TextBox1.Text 'read file Ao abrir o ficheiro a aplicação verifica quais os meses e dias de cada mês, para os quais existem dados a ser mostrados. Nas Combobox do menu “Gráficos”apenas ficam disponíveis os meses e dias identificados no ficheiro. 'Configuração da combobox1 (Form3) com os meses existente frmGraficos.cbxMes.Items.Clear() Dim comboSource As New Dictionary(Of String, String)() Dim indice_box() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"} Dim mes_box() As String = {"None", "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"} For i = 0 To 12 For j = 0 To 32 If (item_mes_dia(i, j) = "1") Then comboSource.Add(indice_box(i), mes_box(i)) Exit For End If Next Next frmGraficos.cbxMes.DataSource = New BindingSource(comboSource, Nothing) frmGraficos.cbxMes.DisplayMember = "Value" frmGraficos.cbxMes.ValueMember = "Key" A aplicação dispõe de um menu de comunicações que permite realizar testes e verificar o estado da comunicação com o painel de controlo. No menu são visíveis erros e as mensagens de protocolo trocadas entre o micro e a aplicação. |
|||||||||||
Recorreu-se a uma montagem em placa de circuito impresso para evitar maus contactos e o desligar acidental de ligações quando se usam montagens realizadas em bredboard o que veio beneficiar os testes realizados posteriormente. Os valores medidos no condicionamento de sinal apresentaram de inicio algum desfasamento em relação aos valores esperados, principalmente na medição e calculo do valor da fase. Optou-se pela utilização de uma mala Omicron CMC256 de injeção de correntes e tensões, para a calibração do Painel de Controlo. Os valores de tensão, corrente e fase, medidos no micro-controlador puderam então ser ajustados não sendo necessário realizar ajustes por hardware, mas apenas compensar por software o desfasamento introduzido pelo transformador de intensidade, na ordem dos 6 graus. Qualquer um dos valores medidos das grandezas base apresentaram erros inferiores a 1%. A comunicação do sistema via Bluetooth revelou-se fiável com poucos erros até uma distância na ordem dos 8 metros, este facto determinado pela utilização do referido modulo Bluetooth HC-05. |
|||||||||||
A medição da fase quando temos baixos valores de corrente na entrada, revelou-se uma tarefa difícil dada a presença de ruído e distorção do sinal de entrada. As restantes medidas, tensão, deteção de zero da tensão para valores nominais e frequência não ofereceram problemas sendo a medição bastante precisa. Os objetivos foram alcançados permitindo ao utilizador do painel de monitorização medir com razoável precisão o consumo de energia doméstico. A análise através dos gráficos e medidas reais pode ser uma importante ferramenta para identificar possíveis melhorias no que diz respeito à eficiência no consumo de energia. Melhorias e trabalho futuro: Os gráficos poderão ser melhorados, havendo diversas formas de implementar o registo dos dados, como por exemplo recorrendo a ficheiros em Access em vez de txt. Seria interessante poder comparar o consumo entre dias ou meses com mais opções a nível de gráficos A aquisição das medidas poderá ser melhorada através da utilização de um potenciómetro digital para alterar o ganho de amplificação do sensor de corrente em 2 ou 3 escalões de gama de medidas da corrente neste caso teria um comportamento melhor para medir potencias abaixo de 50 W tanto a nível do detetor de passagem por zero como das correntes. A aquisição das medidas poderá ser melhorada através da utilização de ADC´s com mais de 10 bits, recorrendo a micros com tais características. O registo no painel de Controlo, dos consumos de energia realizados, está ligado à precisão de sincronização com que este consegue manter de forma atualizada a data e hora. Para isso poderia ser implementado um sistema de comunicação via Web para aquisição periódica da data e hora. Faltou implementar o protocolo I2C para comunicação com a eeprom externa de forma a permitir a gravação dos valores consumidos de energia hora a hora. |
|||||||||||
[1] ATmega48PA/88PA/168PA/328P – doc8161.pdf - http://www.atmel.com/images/doc8161.pdf [2] TL081, TL081A, TL081B, TL082, TL082A, TL082B, TL084, TL084A, TL084B (Rev. I) – tl084.pdf - http://www.ti.com/lit/ds/symlink/tl084.pdf [3] LM139, LM239, LM339, LM2901 Quad Differential Comparators (Rev. S) – lm339.pdf - http://www.ti.com/lit/ds/symlink/lm339.pdf [4] «Visual Basic Language». Disponível em: https://msdn.microsoft.com/en-us/library/aa903378(v=vs.71).aspx |
|||||||||||