单片机控制可控硅调光,是件比较麻烦的事情,开始是没加过零检测,结果不管怎么做pwm频率多高,都很闪,用了下面这个后就不闪了.在51hei单片机开发板上测试成功。 要调光的话,moc3063是不行的,3063是过零导通的,对交流电源的控制结果只能是对半波,而不能斩波,通常要调光,调压的话用3052,配合交流过零信号硬件,也可用变压器+二极管做过零检测电路.过零信号边沿触发中断,在过零后延时输出控制信号给光藕,使可控硅导通,过零前边沿关闭控制信号,使可控硅自然关断,完成一个半波的斩波控制,调整延时值就可以调节输出电压了,当然,延时值根据电源频率及定时器分频比不同,有相应的取值范围,一般可以用外中断负责过零边沿触发,一个边沿(至于哪个边沿与过零信号硬件结构有关)负责关闭可控硅,一个边沿负责延时计算,并写入定时器,由定时器中断来打开可控硅 .
单片机驱动可控硅调光电路
'改变INT1中断中的"移相值",即可改变输出电压,这里T2分频比为1024,可根据主频计算出移相值取值范围
'程序采用电平触发,脉冲触发可作相应修改
'若主频12M,电源50Hz,则移相值计算约为0--117,但实际使用0-105就可以了,太大了会移相到过零位置,使可控硅不能关断
'单片机类型atmege16,开发者:http://www.51hei.com email:[email protected] 下面是主要的程序
'主程序:
'略
ldi r16,4 'INT1上升,下降沿都中断
Out Mcucr,R16
ldi r16,128 'INT1中断允许,INT0,INT2中断禁止
Out Gicr,R16
ldi r16,7
Out Tccr2,R16 'T2开始循环计数
in r17,timsk
andi r17,127 '暂时禁止T2比较匹配中断(T2比较匹配中断在中断程序中启闭)
Out Timsk,R17
sei
'-------------------------中断服务程序------------------------------------------
Int_comp2: '移相中断
push r17
in r17,sreg
push r17
cbi porta,5 '触发信号输出
in r17,timsk
andi r17,127 '禁止T2比较匹配中断
out timsk,r17
pop r17
out sreg,r17
pop r17
reti
Int1_isr: '电源同步中断
push r17
in r17,sreg
push r17
sbis pind,3 'int1引脚(电源同步)状态=1则跳行,上升沿中断
rjmp falling
'上升沿中断
sbi portA,5 '关触发
rjmp isr_over
Falling:
'下降沿中断
ldi r17,0
Out Tcnt2,R17 'T2清零
lds r17,移相值
Out Ocr2,R17
'清中断标志,确保中断正确执行
in r17,tifr
ori r17,128 '清T2匹配标志
Out Tifr,R17
in r17,timsk
ori r17,128
Out Timsk,R17 '允许T2比较匹配中断
Isr_over:
pop r17
Out Sreg,R17
pop r17
Reti
上面的是的是AVR的汇编程序,51的也可以实现的,就是用定时器的溢出中断啦,溢出值-移相值=初始值触发可控硅用脉冲方式,计算好触发脉冲宽度对应的计数初值
同步信号输入--下沿中断写计数初值,开始计数--计数器溢出中断,判标志=0,打开可控硅,写触发脉冲初值,写标志=1---再次溢出中断,判标志=1,关可控硅,清零标志--------再次同步中断
单片机控制可控硅调光,是件比较麻烦的事情,开始是没加过零检测,结果不管怎么做pwm频率多高,都很闪,用了下面这个后就不闪了.在51hei单片机开发板上测试成功。 要调光的话,moc3063是不行的,3063是过零导通的,对交流电源的控制结果只能是对半波,而不能斩波,通常要调光,调压的话用3052,配合交流过零信号硬件,也可用变压器+二极管做过零检测电路.过零信号边沿触发中断,在过零后延时输出控制信号给光藕,使可控硅导通,过零前边沿关闭控制信号,使可控硅自然关断,完成一个半波的斩波控制,调整延时值就可以调节输出电压了,当然,延时值根据电源频率及定时器分频比不同,有相应的取值范围,一般可以用外中断负责过零边沿触发,一个边沿(至于哪个边沿与过零信号硬件结构有关)负责关闭可控硅,一个边沿负责延时计算,并写入定时器,由定时器中断来打开可控硅 .
单片机驱动可控硅调光电路
'改变INT1中断中的"移相值",即可改变输出电压,这里T2分频比为1024,可根据主频计算出移相值取值范围
'程序采用电平触发,脉冲触发可作相应修改
'若主频12M,电源50Hz,则移相值计算约为0--117,但实际使用0-105就可以了,太大了会移相到过零位置,使可控硅不能关断
'单片机类型atmege16,开发者:http://www.51hei.com email:[email protected] 下面是主要的程序
'主程序:
'略
ldi r16,4 'INT1上升,下降沿都中断
Out Mcucr,R16
ldi r16,128 'INT1中断允许,INT0,INT2中断禁止
Out Gicr,R16
ldi r16,7
Out Tccr2,R16 'T2开始循环计数
in r17,timsk
andi r17,127 '暂时禁止T2比较匹配中断(T2比较匹配中断在中断程序中启闭)
Out Timsk,R17
sei
'-------------------------中断服务程序------------------------------------------
Int_comp2: '移相中断
push r17
in r17,sreg
push r17
cbi porta,5 '触发信号输出
in r17,timsk
andi r17,127 '禁止T2比较匹配中断
out timsk,r17
pop r17
out sreg,r17
pop r17
reti
Int1_isr: '电源同步中断
push r17
in r17,sreg
push r17
sbis pind,3 'int1引脚(电源同步)状态=1则跳行,上升沿中断
rjmp falling
'上升沿中断
sbi portA,5 '关触发
rjmp isr_over
Falling:
'下降沿中断
ldi r17,0
Out Tcnt2,R17 'T2清零
lds r17,移相值
Out Ocr2,R17
'清中断标志,确保中断正确执行
in r17,tifr
ori r17,128 '清T2匹配标志
Out Tifr,R17
in r17,timsk
ori r17,128
Out Timsk,R17 '允许T2比较匹配中断
Isr_over:
pop r17
Out Sreg,R17
pop r17
Reti
上面的是的是AVR的汇编程序,51的也可以实现的,就是用定时器的溢出中断啦,溢出值-移相值=初始值触发可控硅用脉冲方式,计算好触发脉冲宽度对应的计数初值
同步信号输入--下沿中断写计数初值,开始计数--计数器溢出中断,判标志=0,打开可控硅,写触发脉冲初值,写标志=1---再次溢出中断,判标志=1,关可控硅,清零标志--------再次同步中断