Alimentazione e controllo senza trasformatore di tensione

SOMMARIO

Uno dei limiti allo sviluppo dell'home automation è la necessità per ogni dispositivo di un'alimentazione elettrica non superiore ai 5.5 Volt.
Si propone una soluzione che permetta di alimentare un microcontrollore alla corretta tensione e controllare potenze elettriche di rete, con ingombri minimi e consumi irrisori.

PRINCIPALI MATERIALI UTILIZZATI

PIC16F684-I/P Microchip - MCU 8 Bit, Flash, 20 MHz, 3.5 KB, 256 EEPROM
MOC3020 Fotoaccoppiatore, Uscita Triac, DIP, Non Zero Crossing, 400 V
PE014F24 Relè di Alimentazione, 24 VDC, 5A, PE Series, Bistabile

ALIMENTAZIONE SENZA TRASFORMATORE

ATTENZIONE:La soluzione proposta prevede di realizzare un circuito che sarà parzialmente alimentato dalla tensione di rete monofase a 230 Volt. Vanno prese tutte le precauzioni necessarie per garantirsi di non incorrere in folgorazioni, mettendo in funzione il dispositivo e durante le operazioni di montaggio. Solo personale addestrato e consapevole dovrebbe realizzare i suggerimenti qui di seguito sviluppati.

Uno semplice schema per realizzare un'alimentazione di circa 5 Volt, senza utilizzare un trasformatore di tensione è, per microcontrollori di bassisimo consumo (come appunto il PIC16F684), mostrato in Fig.1.

Fig.1

Il componente chiave è il diodo Zener a destra nello schema, polarizzato in inversa, che mantiene la tensione abbastanza controllata al variare degli assorbimenti.
Come si vedrà, il circuito corrispondente avrà un ingombro e peso largamente inferiori a qualunque microtrasfromatore di tensione.

CONTROLLO DI POTENZA

Il componente fondamentale è il relè bistabile PE014F24; per funzionare ha bisogno di un impulso (nel nostro caso di 24 Volt) ai suoi pin di alimentazione per chiudere il contatto Normalmente Aperto e un impulso invertito sempre di 24 Volt per aprire lo stesso contatto. Fra un impulso e l'altro, il relè mantiene il contatto aperto o chiuso senza assorbire corrente.
Per realizzare i due impulsi delle caratteristiche necessarie si usa il componente molto economico MOC3020M, che è un optoisolatore con uscita triac pilotato dal microcontrollore con una certa logica, utilizzando lo schema mostrato in Fig.2.


Fig.2

Attraverso il segnale d'ingresso in RC3 il microcontrollore è in grado di sincronizzarsi all'andamento della tensione alternata di rete. Il triac lascia passare la forma d'onda alternata, quando il fotodiodo viene illuminato.
Per generare un impulso positivo, il microcontrollore legge il passaggio per zero, verso la fase positiva, e dà un impulso (attivo basso) al fotodiodo. Per generare un impulso negativo, il microcontrollore legge il passaggio per zero, verso la fase negativa, e dà un impulso al fotodiodo.
Il funzionamento è rappresentato in Fig.3.

Fig.3

Una scelta opportuna delle resistenze che realizzano una partizione della tensione di rete verso relè e microcontrollore, la durata dell'impulso fornito al triac permettono di fornire un corretto impulso al relè di apertura o chiusura , a seconda delle esigenze operative. I componenti utilizzati permettono di avere un dispositivo dai consumi operativi irrisori.
Il circuito di Fig.2 (di cui viene mostrato un possibile layout in Fig.4) rappresenta una base per futuri progetti di automazione distribuita e risparmio energetico, attraverso add-on da collegarsi ai connettori J1 e J2.
Una possibile realizzazione è mostrata in Fig.5.

Fig.4 Fig.5

PROGRAMMAZIONE DI TEST

Un semplice programma di test del circuito di Fig.2 si può trovare qui di seguito. Il microcontrollore è programmato ad aprire e chiudere il contatto del relè ogni qualche secondo.

;**********************************************************************
; Controllo Relay - Versione di test                                  *
;**********************************************************************
;                                                                     *
;    Filename:	    P16F684_AC_Test.asm                               *
;    Date:                                                            *
;    File Version: 1.00                                               *
;                                                                     *
;    Author: InTeAS WebMaster                                         *
;    Company: https://www.inteas.it                                   *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F684.INC                                      *
;                                                                     *
;**********************************************************************
;
list p=16f684 ; list directive to define processor
#include <P16F684.inc> ; processor specific variable definitions	
__CONFIG    _CP_OFF & _CPD_OFF & _BOD_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF
;
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file. 
; See respective data sheet for additional information on configuration word.
;
;***** LOCAL VARIABLE DEFINITIONS
;
; Interval 0x20 - 0x7F , Bank 0
; Interval 0xA0 - 0xBF , Bank 1
;
VALFL         EQU  0x79
PCOUNT1       EQU  0x78
;
; 0x20 to 0x78 and 0xA0 to 0xBF next bytes, indirectly addressed
;
COUNT1        EQU  0xBF
COUNT2        EQU  0xBE
ITERAZ        EQU  0xB8
;
;**********************************************************************
; PROGRAM AREA
;**********************************************************************
;
	ORG 0x000 ; processor reset vector
  	goto Init ; go to beginning of program
;
	ORG 0x004 ; interrupt vector location
	goto Init
;
Init:
;
; OPTION Register, on reset all bits = 1
	; bit 7 (NOT_RAPU) Weak Pull-Ups Disabled=1	
	; bit 6 (INTEDG) Interrupt Edge Select
	; bit 5 (T0CS) Timer0 Source Selection: 
;               1= T0CKI Transition (default), 0= Internal Instruction (CLKOUT) 
	; bit 4 (T0SE) Timer0 Source Edge Selection: 1 = H-to-L (default), 0= L-to-H  
	; bit 3 (PSA) Prescaler Assignment: 1= to WDT (default), 0= to Timer0	
	; bits 2:0 (PS2,PS1,PS0) Prescaler Rate Selection: 1:128 default
	movlw b'11011111' ; T0CS= 0 : Internal Timer0
	bsf STATUS,RP0 ; Bank 1		
	movwf OPTION_REG
;
; *******************************
; Set of the PORTA I/O (bit 5:0)
; *******************************
;
	bcf STATUS,RP0 ; Bank 0
	bsf PORTC,3 ; inattiva Power Supply 	
	movlw h'07' ; Set RA<2:0> and RC<4,1:0> to digital I/O
	movwf CMCON0
	bsf STATUS,RP0 ; Bank 1
	clrf ANSEL ; Digital I/O
; 1=input 0=output	
	movlw b'11111111'
	movwf TRISA ; write in TRISA register
;
; *******************************
; Set of the PORTC I/O (bit 5:0)
; *******************************
; 1=input 0=output
	movlw b'11011011'
	movwf TRISC ; write in TRISC register
	bcf STATUS,RP0 ; Bank 0
	bsf PORTC,5 ; inattiva Power Supply 
	bcf PORTC,2 ; spegne Probe Led
;
; I/O Summary
;
; PORTC,5 OUTPUT (pin  5) : Power Supply Control (attivo su 0)
; PORTC,3 INPUT  (pin  7) : AC Signal
; PORTC,2 OUTPUT (pin  8) : Probe Led (attivo su 1)
;
Main:	
	bcf STATUS,RP0 ; Bank 0
	bcf PORTC,2 ; accende Probe Led	
	clrf VALFL ; VALFL=0 Negative Polarity (Status Off)
	call ACTCNT
	bsf STATUS,RP0 ; Bank 1
;
	movlw h'10'
	call LDELAY
;
	bcf STATUS,RP0 ; Bank 0		
	bsf PORTC,2 ; spegne Probe Led
	incf VALFL ; VALFL=1 Positive Polarity (Status On) 
	call ACTCNT
	bsf STATUS,RP0 ; Bank 1
;
	movlw h'10'
	call LDELAY
;
	goto Main
;
;***********************************************
; DELAY Routine max 196,65 msec, min 0,771 msec
;***********************************************
;
DELAY_MAX:
	movlw h'FF'
DELAY:
	movwf COUNT2
Dly2:
	movlw h'FF'
	movwf COUNT1
Dly1:
	decfsz COUNT1,1
	goto Dly1
	decfsz COUNT2,1
	goto Dly2	
	return
;
;****************************************************
; LDELAY Routine lungo ritardo 1 ciclo circa 196 msec; max 49.8 sec circa
;****************************************************
;
LDELAY_STD:
	movlw h'02'
LDELAY:
	movwf ITERAZ
Dly3:
	call DELAY_MAX
	decfsz ITERAZ,1
	goto Dly3
	return
;
;*****************
; ACTUATOR CONTROL
;*****************
;
ACTCNT:
;
;   Syncronization VALFL=0 Negative Polarity (Status Off)
;                  VALFL=1 Positive Polarity (Status On)
;
	btfsc VALFL,0
	goto Syncr2 
; Negative Polarity
Syncr1:
	btfss PORTC,3
	goto Syncr1 ; waiting for AC=1
	goto LdPr
; Positive Polarity
Syncr2:
	btfsc PORTC,3
	goto Syncr2 ; waiting for AC=0
;
; Loading procedure
;
LdPr:
	call TRANSDET ; 0-->1
	call PWSPCNT
	return
;
; **********************
; Transition Detection
; **********************
;
TRANSDET:
	btfsc PORTC,3
	goto Tr10 ; jump if AC Signal=1
; AC Signal=0
Tr01:
	btfss PORTC,3	 
	goto Tr01 ; waiting for AC=1
	return
Tr10:
	btfsc PORTC,3
	goto Tr10 ; waiting for AC=0
	return
;
; **************************
; Power Supply Control Signal
; **************************
;
PWSPCNT:
	movlw h'FF'
	movwf PCOUNT1
PDly1:
	decfsz PCOUNT1
	goto PDly1
;	
;	Spike Emission
;
	bcf PORTC,5 ; Signal Active	
	movlw h'10' ; durata spike
	movwf PCOUNT1
Spk1:
	decfsz PCOUNT1
	goto Spk1
	bsf PORTC,5 ; Signal Inactive	
	return
;
;******************************************************************************
		END ; directive 'end of program'
;******************************************************************************