wasdpkj 发表于 2012-11-4 16:50:51

花了点时间,把Arduino通过可控硅控制220V市电电压搞定了,含过零检测

本帖最后由 wasdpkj 于 2012-11-5 13:38 编辑

(很多朋友问这个电路有啥用,可以通过arduino稳定的、线性的控制电器市电电压,你说有什么用呢?)

本着共享的精神,还是发上来吧!让需要的人少走弯路
中间经历了挺多麻烦的,

先是两个PC817光耦烧掉了
再是买错了光耦(买成过零导通的MOC3041了,结果阴差阳错的实现了不用额外过零检测的功率调节)
最终,抽空买了MOC3021,终于搞定了电路

由于我是控制电灯,属于感性负载,所以在可控硅两级加了个RC稳定电路
过零检测部分,直接接应该也可以 ,但总觉得不太安全 ,我用了个220~18v的变压器
LED代表负载
原理图如下(最后的C1可根据电路稳定性调整或去掉)



先写了个测试程序,注释的很明白,自己定义两个按键就行了(我目前c语言很烂,如果哪位知道如何完美的把中断添加到主程序中,不被程序的延迟影响,请写出来分享吧!)
(现在程序延时到有的时候,灯还是会闪动,谁能帮忙看看是哪里的问题?)

int zdpin=0;                //中断0,对应引脚UNO的D2
volatile int zt=LOW;

int m=3000;                        //设置延时初始值,单位微秒
int mx=5200;                //设置延时最大值,单位微秒
int mi=900;                        //设置延时最小值,单位微秒

int x=0;                        //按键
int y=0;                        //按键

void setup ()
{
pinMode(11,OUTPUT);                //光耦控制端
pinMode(5,INPUT);                        //按键
pinMode(6,INPUT);                        //按键
attachInterrupt(zdpin,light,RISING);                //过零检测的中断
Serial.begin(9600);
}

void loop()
{
x=digitalRead(5);                //读取按键状态,D6
delayMicroseconds(100);                        //防抖
y=digitalRead(6);                //读取按键状态,D5
delayMicroseconds(100);                        //防抖

if (x==1)                //最大延时累加,以及封顶
{
   m=m+20;
   if (m>=mx)
   {
   m=mx;
   }
}

if (y==1)
{
   m=m-20;                //最小延时累减,以及封底
   if (m<=mi)
   {
   m=mi;
   }
}

digitalWrite(11,0);                //默认低电位

Serial.println(m);
}

void light()
{
delayMicroseconds(m);                        //过零检测延时
digitalWrite(11,1);                        //控制光耦导通
}

关于过零检测和延时:市电是50hz的,半个周期也就是10ms,考虑到误差,本程序的延时大概控制在1~6ms之间

一旦检测到过零信号,就在设置的延时时间后,通过光耦发出一个触发电平,使得可控硅导通(导通到下个零点),因此实现了调压。

小猪会轮滑 发表于 2012-11-4 17:04:50

:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol

micro_听海 发表于 2012-11-4 17:15:59

从小被电多了,现在看见强电都有点怵。回到正题,arduino的中断都有相应的库函数,你可以找找,很简单的

wasdpkj 发表于 2012-11-4 17:20:21

micro_听海 发表于 2012-11-4 17:15 static/image/common/back.gif
从小被电多了,现在看见强电都有点怵。回到正题,arduino的中断都有相应的库函数,你可以找找,很简单的

后面的话不是太理解,中断有相应的库函数?我原来有个程序,整个loop下来要几十毫秒,这个可控硅的程序直接加进去肯定控制不了50hz的交流电,所以我在想解决方法

tom 发表于 2012-11-4 18:24:16

搞不明白,楼主,这个东西是实现什么功能的??

wasdpkj 发表于 2012-11-4 18:29:08

tom 发表于 2012-11-4 18:24 static/image/common/back.gif
搞不明白,楼主,这个东西是实现什么功能的??

控制电器电压

迷你强 发表于 2012-11-4 19:26:46

过零检测。好东西啊

youzitang 发表于 2012-11-4 19:37:20

用继电器不行吗?

┏ωǒ┛菰独 发表于 2012-11-4 20:06:34

楼主是要实现什么功能呢? 可否讲一下? 调光吗?

Randy 发表于 2012-11-4 20:55:35

youzitang 发表于 2012-11-4 19:37 static/image/common/back.gif
用继电器不行吗?

继电器一样可以,但是这个电路也不错!

wasdpkj 发表于 2012-11-4 22:03:24

youzitang 发表于 2012-11-4 19:37 static/image/common/back.gif
用继电器不行吗?

继电器只是开断,这个可以实现线性电压变化哦

wasdpkj 发表于 2012-11-4 22:03:47

本帖最后由 wasdpkj 于 2012-11-4 22:08 编辑

┏ωǒ┛菰独 发表于 2012-11-4 20:06 static/image/common/back.gif
楼主是要实现什么功能呢? 可否讲一下? 调光吗?

对,调光,或者调整风扇转速,热得快功率都可以!

xigou 发表于 2012-11-4 22:53:59

学习了

话说兄弟你的mega16A搞定了吗?

wasdpkj 发表于 2012-11-5 06:56:17

xigou 发表于 2012-11-4 22:53 static/image/common/back.gif
学习了

话说兄弟你的mega16A搞定了吗?

惭愧,仍在那还没动呢。

erjiang 发表于 2012-11-5 08:03:35

这个我想到一个用途,就是实现一个简易版本的“低温慢煮”烹饪加热器,最好和温度传感器结合,如果连上yeelink,可以做远程遥控的低温慢煮器了,上班时候把东西都准备好,回家前遥控开关,然后回家就能开吃了,节省很多时间
页: [1] 2 3
查看完整版本: 花了点时间,把Arduino通过可控硅控制220V市电电压搞定了,含过零检测