标题: 单片机可控硅调光的源程序原理图与视频(带光耦过零检测) [打印本页]

作者: jkangk123    时间: 2018-8-17 16:48
标题: 单片机可控硅调光的源程序原理图与视频(带光耦过零检测)
我是参考咱们51hei论文DIY区里面大神的资料做出来的 希望大家多多提建议  多多鼓励

我用的是自己买的开发板上的52单片机,  晶振采用11.0592M,  光耦用了MOC3023 和P521-1两个  可控硅用的是BTA41   跟一块整流桥  电容用的是CBB 0.06μF  电阻那些由于我没有那么多 所以就找了相近值的 然后自己加了一个电源指示灯 和工作指示灯  按键我就直接修改成开发板上的独立按键
通电调节过后那几个电阻发烫都挺严重的。   但过零检测那部分还是不大明白  之前我做了个点焊机根本没有过零检测  但是加了有脉冲宽度调节和电流调节。特别提醒各位爱好者在做的过程中千万要注意安全  检测检测再检测确认对了之后再通电  我也是新手 初次做  希望能够得到大家的鼓励让我更加有信心去做下一个作品 提高自己  也希望能够跟同基础的小伙伴共同成长

视频演示:https://v.youku.com/v_show/id_XMzc4NTI4NTg2NA==.html


实物图与实验效果图:




电路原理图如下:


可控硅调光的单片机源程序如下:
  1. #include "reg52.h"

  2. sbit lamp_pwm=P0^0;//可控硅位
  3. sbit key0=P3^4;//降低亮度按键位
  4. sbit key1=P3^5;//增加亮度按键位

  5. unsigned int inc;

  6. void INT0s()interrupt 0        using 0//INT0外部中断,过零检测触发
  7. {
  8.         TR0=0;
  9.         if(!key0)//降低亮度
  10.         {
  11.                 inc+=50;
  12.                 if(inc>=8000)inc=8000;
  13.         }
  14.         if(!key1)//增加亮度
  15.         {
  16.                 inc-=50;
  17.                 if(inc<=800)inc=800;
  18.         }
  19.         TH0=(65536-inc)/256;
  20.         TL0=(65536-inc)%256;
  21.         TR0=1;
  22. }


  23. void timer1()interrupt 1 using 0//可控硅触发中断
  24. {
  25.         unsigned char i;
  26.         lamp_pwm=0;//灯亮
  27.         for(i=0;i<2;i++);//延时2us
  28.         lamp_pwm=1;//灯灭
  29. }

  30. /************STC不断电下载用******************/
  31. sfr ISP_DOWNS=0xe7;//ISP软复位地址
  32. sbit ISP_SW=P3^0;//串口数据接收
  33. void DebugDownISP()//软复位
  34. {
  35. ……………………

  36. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
原理图和程序制作部分.zip (469.79 KB, 下载次数: 617)



作者: jkangk123    时间: 2018-8-18 18:52
上面那个工作指示灯  工作的时候只有微弱的闪     修改了下把工作指示灯单独接了个IO口 控制了  当按键加或者减按下的时候工作指示灯就会闪一下 这样也达到了工作指示灯的效果
  
以下是原理图:




程序:

  1. #include "reg52.h"

复制代码





作者: jkangk123    时间: 2018-8-20 09:38
请问各路前辈们  有没有不用硬件的过零检测  直接用软件做过零检测      
作者: 这一生只为你    时间: 2019-3-14 20:38
请问一下,Q1的型号是什么呢?看不清楚。。。我也想做一个玩玩~~
作者: SJ-123    时间: 2019-3-22 12:38
楼上的朋友,Q1是BTA-41双向可控硅,其实在本电路只无须用那么大的可控硅,一般的BTA-6就可以胜任了
作者: 盉飞沙    时间: 2019-3-22 14:47
moc3021等一些光耦是自带过零检测的。但要像可控硅电路那样调光不实际。原因1,模拟调光是不稳定的,不能保证同样的开启角度有同样的亮度。原因2,在较低亮度时灯光会闪烁。
比较可行的方案1是四二极管整流,改成100hz变化,这样闪烁影响会小些。方案2,既然已整流,不如稳压滤波用mos管控制。这样也就不必检测过零什么的。如果只是灯泡这种几十瓦的调制,器件还是挺多的。
如果是几百上千的功率,如果考虑成本还是可控硅的比较实惠。
作者: SJ-123    时间: 2019-5-2 18:10
按照这个电路图和程序实际搭了个电路根本不能让灯亮呀

作者: jkangk123    时间: 2019-5-3 15:48
SJ-123 发表于 2019-5-2 18:10
按照这个电路图和程序实际搭了个电路根本不能让灯亮呀

电路图和程序肯定是没问题的,实物都做出来了。 你的不亮可能还有很多原因,多找找问题出在哪
作者: BLE_    时间: 2019-5-29 11:10
交流电负半周导通时候你的可控硅如何导通
作者: BLE_    时间: 2019-5-29 11:14
SJ-123 发表于 2019-3-22 12:38
楼上的朋友,Q1是BTA-41双向可控硅,其实在本电路只无须用那么大的可控硅,一般的BTA-6就可以胜任了

交流电反向导通的时候,你的可控硅还会导通吗
作者: 南水一洲    时间: 2019-6-24 14:10
这个电路带感性负载有点不合适
作者: SJ-123    时间: 2019-6-30 21:53
jkangk123 发表于 2019-5-3 15:48
电路图和程序肯定是没问题的,实物都做出来了。 你的不亮可能还有很多原因,多找找问题出在哪

我完全按照你给的原理图搭建的电路,而且还反复仔细分析过你的实物电路,也是和原理图一致的,但是烧录程序后始终没有任何的反应,灯根本不亮,我用LED灯代替光藕,程序烧录好上电调节上下键LED灯也是没有任何反应的,
作者: maijinzhi    时间: 2019-7-1 16:41
谢谢分享程序与原理图
作者: dj3365191    时间: 2019-8-20 10:46
我完全按照你给的原理图搭建的电路,而且还反复仔细分析过你的实物电路,也是和原理图一致的,但是烧录程序后始终没有任何的反应,灯根本不亮,见下图。并且测得P1.0口电压5V,调节亮暗键该电压无任何变化。

无标题.jpg (147.36 KB, 下载次数: 200)

无标题.jpg

作者: wsh62    时间: 2019-10-29 11:28
我也按这个电路做一个,刚开始光耦我用的是PC-17T1,没有成功,最后把光耦换成MOC3020,成功,效果很好。
作者: gupingdn    时间: 2019-10-30 10:35
jkangk123 发表于 2018-8-20 09:38
请问各路前辈们  有没有不用硬件的过零检测  直接用软件做过零检测

既然是过零检测就是要过零的时候才能触发硬件。你没有硬件应该没法检测吧。
作者: 51heiaidianzi    时间: 2019-10-31 20:42
盉飞沙 发表于 2019-3-22 14:47
moc3021等一些光耦是自带过零检测的。但要像可控硅电路那样调光不实际。原因1,模拟调光是不稳定的,不能保 ...

我的想法是如果检测两个过零信号之间的时间,然后把这个时间分成50或者100段,1段导通的时候可控硅导通时间最长,灯泡最亮,100段导通的时候,可控硅导通时间最短,灯泡最暗。这种导通方式只适合电阻负载,不适合容性和感性负载,因为不是过零后导通。过零导通不是控制可控硅的导通角度,而是控制减少可控硅的导通周期。所以控制灯泡的时候会闪烁。仅供参考。
作者: wsh62    时间: 2019-11-14 11:21
能否把上面的程序改为一个按键,从暗到明4档,又从明到暗4档,多谢大师们指点。
作者: ziyueboy    时间: 2019-11-16 18:06
wsh62 发表于 2019-11-14 11:21
能否把上面的程序改为一个按键,从暗到明4档,又从明到暗4档,多谢大师们指点。

楼主这个图调光有很多弊端,1:过零检测电路检测的过零时间和实际过零时间会有差异,解决方法可以,程序做 延时补偿,能达到调光效果!  2:过零检测使用运放来做,时间偏差会小很多! 3: 我做过此类调光,做了很多措施,最终还是在低亮度有所频闪!想了很多手段都没找到原因! 4:这个电路调光用作电动机类和热惯性大的应用是没问题的!白炽灯调光的频闪,真心无法忍受!


作者: ymxfx520    时间: 2019-11-17 19:38
感谢楼主分享,学习下
作者: pcbboy    时间: 2019-11-22 14:42
终于淘汰了可控硅调光产品,不用再劳神费心了。
作者: wsh62    时间: 2019-12-3 11:59
改为一个按键,从暗到明4档,又从明到暗4档,已搞定。
作者: TZTtt    时间: 2019-12-9 16:15
wsh62 发表于 2019-12-3 11:59
改为一个按键,从暗到明4档,又从明到暗4档,已搞定。

可以把你的原理图和程序发来看看嘛,非常感谢
作者: wsh62    时间: 2019-12-14 07:33
void timer_init()
{
        inc=0;
        TMOD|=0x01;
        TH0=(65536-inc)/256;
        TL0=(65536-inc)%256;
        IT0=1;                   //INT0下降沿触发
        EX0=1;                   //外部中断允许
        ET0=1;
        EA=1;                    //开总中断   
}
void INT0s()interrupt 0 using 0//INT0外部中断,过零检测触发
{       
        TH0=(65536-inc)/256;
        TL0=(65536-inc)%256;
        TR0=1;
        if(!SW4)               //降低亮度
        {
                delay_ms(20);
                if(!SW4)
                {                       
                        while(!SW4)
                        switch(m)
                        {
                                case 0:inc=6000; m++;break;
                                case 1:inc=4000; m++;break;
                                case 2:inc=2000; m++;break;
                                case 3:inc=5; m++;break;
                                case 4:m=0; break;
                                default: break;
                        }
                }                       
         }
}

void timer1()interrupt 1 using 0//可控硅触发中断
{
        unsigned char i;
        P44=0;                 //灯亮
        for(i=0;i<2;i++);      //延时2us
        P44=1;                 //灯灭
}
我用100W的灯泡测试过,效果还可以;原理图就是楼上的图。
作者: 51黑电子会员    时间: 2020-4-10 21:28
楼主  你那两个光耦用啥型号的  可控硅又是啥型号
作者: csgtli    时间: 2020-4-12 14:03
盉飞沙 发表于 2019-3-22 14:47
moc3021等一些光耦是自带过零检测的。但要像可控硅电路那样调光不实际。原因1,模拟调光是不稳定的,不能保 ...

现在有很多可控硅调光的LED灯,一般分为前沿触发或后沿触发,发须要单独的过零检测电路,不然LED的闪得很严重或电源异响
作者: carlhongyao    时间: 2021-1-20 17:07

以下这些是不过零的:




总结:型号倒数第1个数字代表启动电流大小,1是15ma,2是10ma,3是5ma,CT301X系列的除外;
倒数第2个数字代表峰值电压,1是250V,2是400V,5是600V;倒数第2个数字为1,2,5的系列为不过零;



以下这些都事过零的:




总结:型号倒数第1个数字代表启动电流大小,1是15ma,2是10ma,3是5ma;
倒数第2个数字代表峰值电压,3是250V,4是400V,6是600V,8是800V;倒数第2个数字为3,4,6,8的系列为过零;



作者: zhangleixbyl    时间: 2021-3-10 10:52
dj3365191 发表于 2019-8-20 10:46
我完全按照你给的原理图搭建的电路,而且还反复仔细分析过你的实物电路,也是和原理图一致的,但是烧录程序 ...

我的也是和你一样的现象灯不亮
作者: lzl12399    时间: 2021-6-3 16:59
首先感谢楼主分享。
1.这个不带有过零检测,会有抖动
2.制作成本太高了,可以考虑精简下
作者: dianziren12    时间: 2023-6-15 10:57
图中C1电容是什么作用,请大神指教
作者: 电子辉    时间: 2023-7-13 15:40
dianziren12 发表于 2023-6-15 10:57
图中C1电容是什么作用,请大神指教

保持可控硅驱动电压,避免过零或者电压低时可控硅无法导通,如果电路采用rc降压热地还可以省掉两个光耦,
作者: 派大星254    时间: 2024-11-26 19:45
现在看依旧很有说法
作者: plsfx3037    时间: 2025-4-17 08:29
很不错,非常好的东西啊
作者: 七年修路    时间: 2025-5-26 09:42
我也仿制成功了,代码做了一些修改,我用的是STC15W402AS单片机

#include "STC15.h"

sbit lamp_pwm=P3^4;//可控硅位
sbit key1=P1^2;//降低亮度按键位
sbit key2=P1^3;//增加亮度按键位

unsigned int inc;
unsigned char trg1=0, trg2=0,cont1=0,cont2=0;//一定是全局变量



key1scan()
{
        unsigned char a=!key1;//网上是异或运算a=key1^0x01,对于一位按键可以直接写成取反
        trg1= a&(a^cont1);
        cont1=a;
        if(trg1&!key1) //网上是(trg1&key1)实际测试不能使用!!因为任何时候都不可能为真。只有改成(trg1&!key1)才可以完美执行!!!
       
        {
                        inc+=1000;
                        if(inc>=8000)inc=8000;//此处可以是自己需要执行的程序。(去掉前面的返回)
        }

}

key2scan()
{
        unsigned char a=!key2;//网上是异或运算a=key2^0x01,对于一位按键可以直接写成取反
        trg2= a&(a^cont2);
        cont2=a;
        if(trg2&!key2)  
       
        {
             inc-=1000;
             if(inc<=1000)inc=1000;//此处可以是自己需要执行的程序。(去掉前面的返回)
        }

}



void timer_init()
{
        inc=7000;
        TMOD|=0x01;
        TH0=(65536-inc)/256;
        TL0=(65536-inc)%256;
        IT0=1;                   //INT0下降沿触发
        EX0=1;                   //外部中断允许
        ET0=1;
        EA=1;                                          //开总中断  
                AUXR &=~0X40;                  
}



void main()
{
                unsigned int i;
                timer_init();

        while(1)
        {
                key1scan();
                        key2scan();      

                for(i=0;i<60000;i++);      //延时2us         

        }
}

void INT0s()interrupt 0        using 0//INT0外部中断,过零检测触发
{
        TR0=0;

        TH0=(65536-inc)/256;
        TL0=(65536-inc)%256;
        TR0=1;
}


void timer1()interrupt 1 using 0//可控硅触发中断
{
        unsigned char i;
        lamp_pwm=0;//灯亮
        for(i=0;i<20;i++);//延时2us
        lamp_pwm=1;//灯灭
}
作者: 七年修路    时间: 2025-5-26 09:50
我也仿制成功了,

51hei图片_20250526093938.jpg (685.12 KB, 下载次数: 0)

51hei图片_20250526093938.jpg

51hei图片_20250526093929.jpg (692.51 KB, 下载次数: 0)

51hei图片_20250526093929.jpg

51hei图片_20250526093837.jpg (909.99 KB, 下载次数: 0)

51hei图片_20250526093837.jpg

作者: 刘佑红    时间: 2025-5-28 09:54
标题: 分享一个过零信号获取电路
本帖最后由 刘佑红 于 2025-5-30 11:33 编辑

      看到有朋友对过零信号还不太清楚,特发一个刚画的过零信号获得电路,虽没有实际测试,但应该没有问题。采用电容限流,可以避免电阻限流发热的问题。

  如想简化电路,可以使用内部是双发光二极管的光耦LTV354T等型号的,可以省去的D1-D4四个二极管。采用LTV354T光耦正脉冲过零信号,上升沿触发中断,可以简化外围电路,简化代码。如电路采用低压交流供电,则过零信号的取得就更简单了,如下图所示,我已应用在了交流点焊机控制板上。
作者: yangkang0712    时间: 2025-5-28 21:27
jkangk123 发表于 2018-8-20 09:38
请问各路前辈们  有没有不用硬件的过零检测  直接用软件做过零检测

直接用带过零检测的光耦即可,例如:MOC3061
作者: 太阳雨ZW    时间: 2025-7-11 17:28
刘佑红 发表于 2025-5-28 09:54
看到有朋友对过零信号还不太清楚,特发一个刚画的过零信号获得电路,虽没有实际测试,但应该没有问题 ...

桥式整流的交流输入与直流输出弄反了吧!能输出过零信号吗
作者: 老愚童63    时间: 2025-7-12 20:32
50Hz市电使用可控硅过零触发调光?会不会出现闪烁?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1