Что именно не корректно? На графиках все видно правильно или нет(в нужных местах идет пульс открытия симисторов или нет) + вот алгоритм
CODE
int ctr1,ctr2,ctr3;
bool zx11,zx21,zx31;
bool zi11,zi21,zi31;
int g[3],lastg;
bool tr[3];
init(){
ctr1=ctr2=ctr3=0;
g[0]=g[1]=g[2]=4;Figure 12.3. Three-phase half-wave ac voltage regulator: (a) circuit connection with a
lastg=0;
}
main(){
double l1=x5-x6, l2=x6-x7, l3=x7-x5;
bool zx1=l1>l3;
bool zx2=l2>l1;
bool zx3=l3>l2;
bool zi1=x5>x1;
bool zi2=x6>x2;
bool zi3=x7>x3;
int triac_pw=4;
int pw=125;
ctr1++;
ctr2++;
ctr3++;
// catch x1==x2, x2==x3, x3==x1
if(zx1^zx11){ctr1=0;}
if(zx2^zx21){ctr2=0;}
if(zx3^zx31){ctr3=0;}
if(ctr1==pw){
//if(!tr[lastg==1 ? 2 : 1])
g[lastg]=triac_pw;
lastg=0;
g[lastg]=triac_pw;
}
if(ctr2==pw){
//if(!tr[lastg==2 ? 0 : 2])
g[lastg]=triac_pw;
lastg=1;
g[lastg]=triac_pw;
}
if(ctr3==pw){
//if(!tr[lastg==0 ? 1 : 0])
g[lastg]=triac_pw;
lastg=2;
g[lastg]=triac_pw;
}
// simulate triacs
if(zi1^zi11)tr[0]=false;
if(zi2^zi21)tr[1]=false;
if(zi3^zi31)tr[2]=false;
if(g[0]){g[0]--; tr[0]=true;}
if(g[1]){g[1]--; tr[1]=true;}
if(g[2]){g[2]--; tr[2]=true;}
y1=tr[0]*5;
y2=tr[1]*5;
y3=tr[2]*5;
zx11=zx1;
zx21=zx2;
zx31=zx3;
zi11=zi1;
zi21=zi2;
zi31=zi3;
y4=(g[0]>0)*5;
y5=(g[1]>0)*5;
y6=(g[2]>0)*5;
}
А вот схема-моделька к нему, графики уже выше выкладывал.
https://i.imgsafe.org/b118842.pngВсе по книгам, никакого велосипеда. Чисто на резистивную нагрузку не работает из за в основном слишком быстрого проскакивания тока через 0 одного ключа в момент открытия другого, Ключ не успевает закрыться. И вторая проблема, вылазит реже из за того, что использованы 3-квадрантные Hi-COm симисторы - самопроизвольное открытие ключа в момент одновременного открытия двух остальных, это происходит на углах больше 90 градусов, то есть тогда, когда в 1 момент времени 1 из ключей всегда закрыт.
Цитата(alexvu @ Mar 15 2016, 00:39)

Предлагаю:
1)управление делать все же включением/выключением, с полными периодами.
Не идет - сильно свет моргает от этого тк нагрузка довольно мощная (3х12А), а сеть довольно слабая.
Цитата(alexvu @ Mar 15 2016, 00:39)

2)само включение производить с "плавным пуском", чтобы не было бросков тока, сильно превышающих номинальный.
И вот для плавного пуска уже применить СИФУ (вот тут как правильно запускать мощный транс
http://triolcorp.ru/sppt-razrabotka/)По классической схеме с резисторами, видимо, будет слишком горячо (хотя тоже можно посчитать).
Резистивной нагрузкой трудно ее плавно включить, нужно добавлять последовательно индуктивность, что не совсем хорошо из за цены.
С трансом все проще.
Цитата(alexvu @ Mar 15 2016, 00:39)

3) на время включенного состояния можно тиристоры закорачивать контактором, для снижения их нагрева.
4) Ну и регулятор синхронизировать с прочими нагрузками, для выравнивания мощности, но это уже пилотаж...
Это регулятор мощности, управление углом открытия. Постоянно симистор редко когда включен.
Ноль подвести проще всего, других толковых вариантов я не вижу. Ну разве что вместо симисторов использовать IGBT или Mosfet, там dv/dt куда выше, индуктивности проводов будет достаточно. Ну или на те провода колечки понадевать, пару витков сделать. Даже если насыщаться будет, то это не будет мешать, главное не дать току быстро разогнаться на старте. Ну эт уже считать нужно для конкретных условий. Но схема тоже дороже выходит.
Хотя есть вариант управлять в полу-периодном режиме, вот в этой книжке описано
http://homepages.eee.strath.ac.uk/~bwwilli...hapter%2012.pdfна 331-332 страницах. Но там тоже есть проблемы в некоторых углах открытия, хотя работает по-стабильнее и в сеть гадит по-больше.
Вот еще картинка с реального прибора. Угол открытия 60 градусов. На участке между курсорами все прошло норм, симисторы успели закрыться. А дальше ключ S1, который коммутирует резистор R1 не закрылся(обведено место красным). Внизу 3 графика - пульс открытия ключей(сигнал на светодиод оптосимистора MOC306x)
Желтым обведены проблемные места, где может произойти незакртрие симисторов, то есть те места, где ток изменяется слишком быстро