phasenanschnittsteuerung mit solid state relais?

hallo

bin neu hier, also stell ich mich erst mal kurz vor:

ich heisse michael, wohne in berlin und bin 33 jahre alt. gelernt hab ich grafikdesign. meine brötchen verdiene ich mit grafikdesign, fotografie und allem was sich sonst so anbietet.
mein erstes projekt mit arduino war eine EQ EM 10 teleskopmontierung anzusteuern. ich arbeite seit längerer zeit mit einem befreundetem künstler zusammen an verschiedenen projekten.

im moment baue ich ein 19" rackmodul mit 12 solid state relais die von einem arduino gesteuert werden. jedes relais hat einen seperaten eingang und eine normale steckdose als ausgang. das rack soll möglichst universell einsetzbar sein. zum beispiel um lampen per zufall oder durch sensoren zu schalten oder auch andere geräte ein und aus zu schalten.
da ich mich auch schon mit dimmern(vellman k8064) und phasenaschnittsteuerung beschäftigt habe frage ich mich nun ob es nicht möglich ist nur mit den solid state relais zu dimmen.
um das zu tun muss man synchron zur 50hz netzspannung die phase "anschneiden", also das relais 50 mal in der sekunde eine gewisse zeit an und wieder auschalten.
um die 50hz netzspannung auszulesen habe ich ein 4,5v stecknetzteil der gleichrichterschaltung beraubt und dieses getrennt durch einen optokoppler am analog in am arduino.

mit einem einfachen code wie diesem kann ich nun eine lampe dimmen ohne das es flackert. also netzsynchron.

int phasePin = A1;             // zum auslesen wechlespannung
const int loadPin =  11;       // schaltet das solid state relais
int phaseState = 0;            

void setup() {
  pinMode(loadPin, OUTPUT);     
}

void loop(){
  phaseState = analogRead(phasePin);
  delay(5);
  if (phaseState > 340) { 
    delay(4);    
    digitalWrite(loadPin, HIGH); 
    else{
    delay(2);
    digitalWrite(loadPin, LOW); 
    }
  }

man muss ein bisschen mit den delays rumspielen damit es klappt. man kann damit aber noch nicht stufenlos dimmen. es sind so nur um die 3-5 verschiedene helligkeitstufen machbar. das liegt daran das das timing einfach zu ungenau ist.

die frage ist also, wie man innerhalb von 20ms;

  • so genau wie möglich den spitzenwert der phase bestimmt um dann
  • den output eine zeit von 0-20ms einzuschalten.

je genauer man die schaltzeit festlegen kann um so feiner kann dann gedimmt werden.

wenn man einfach irgendwie genauer (also im mikrosekundenbereich) schalten kann müsste das doch auch auf allen 12 kanälen funktionieren.
bis jetzt funktioniert das ganze ja ohne pwm.

ich hoffe das war einigermassen verständlich.

Mit einem simplen analogRead() kriegst Du in etwa eine Sampling-Rate von 8kHz hin. Die machst Du Dir aber mit den delay()s gleich wieder kaputt. Mit diesen drückst Du die Sampling-Rate auf ca. 120Hz runter, was bei einer 50Hz Netzfrequenz nicht mehr wirklich zufriedenstellend ist. Wenn Du das mit Festhalten der Maxima-Zeit und schalten nach einer gewissen Zeit (nicht mit delay(), sondern mit millis()-Differenzbildung) ausprogrammierst, wirst Du schon einigen Erfolg haben.
Ich würde wahrscheinlich eine Strategie wählen, die auf einer Einschwingung auf die Netzfrequenz basiert. Diese wird vom Betreiber ziemlich konstant bei 50Hz gehalten (weshalb viele Wecker sich nur darüber synchronisieren). Wenn Du also mal relativ genau den Peak der Sinus-Schwingung herausgefunden hast, könntest Du für eine Weile einfach davon ausgehen, dass die Schwingung konstant mit 50Hz weiterschwingt und entsprechend Deine Ausgänge schalten. Von Zeit zu Zeit müsstest Du diesen internen Takt einfach wieder mit der Netzfrequenz synchronisieren, damit Abweichungen ausgeglichen werden. Wenn Du jetzt einen Timer so programmierst, dass ein Interrupt-Handler von Dir alle 100us aufgerufen wird, kannst schon sehr fein dimmen, auch auf 12 Kanälen.

Welchen Typ SSR hast Du? es gibt solche mit zero crossing Schaltung die nur im Spannungsnulldurchgang einschalten. Mit denen bekommst Du keine Phasenanschnittsteuerung zusammen.
Grüße Uwe

@pylon: aha, ja mit millis das würde ich vieleich noch hinkriegen. also mit millis von peak zu peak messen vieleicht immer zwei drei mal für den durchschnitt. interuppt-handler klingt schon komplizierter.

@uwefed: also ich hab RA2425-D06 von carlo gavazzi und dann die xssr DA2420(die für~7eu von pollin).

edit: ok sehe schon, die sind warscheinlich alle mit zero crossing obwohl ich zu den pollinteilen kein datenblatt finde.

danke für die hilfe.

Das RA2425-D06 ist zero switching http://datasheet.octopart.com/RA2425-D06-Carlo-Gavazzi-datasheet-5406740.pdf
Für das andere hab ich auch kein Datenblatt gefunden.
Grüße Uwe

Schau mal hier auf der Seite:
http://www.hoelscher-hi.de/hendrik/light/dmxdimmii.htm
Da kann man bestimmt ein paar nette Ideen "klauen".

Gruß
Der Dani