|
针对网上很多用单片机控制双向可控硅来实现无极调光或无极调速的例子,自己亲自测试了很多是有问题的,不是出现不可调就是出现晃动等问题。自己研究了几天,经过自己亲自试验后确实可行的电路图和源代码发出了(在白炽灯与单相电风扇实测是可以的),供大家参考,一起学习。请大家批评指正!
特别注意问题:1、电路图左边了两个电路都为电压过零检测电路,可以选其一;2、双向可控硅驱动器芯必须是MOC3022/MOC3023(不带过零的);3、注意双向可控硅BTA06的引脚接线;
电路原理图如下:
单片机源程序如下:
- #include "STC15WXXX.h"
- sbit lamp_pwm=P3^6;//可控硅位
- sbit key0=P3^4;//降低亮度按键位
- sbit key1=P3^5;//增加亮度按键位
- unsigned int inc;
- void delay1ms(unsigned int t)
- {
- unsigned int i;
- while(t--)for(i=0;i<580;i++);
- }
- void INT0s()interrupt 0//INT0外部中断,过零检测触发
- {
- TR0=0;
- if(!key0)//降低亮度
- {
- inc+=100;
- if(inc>=9900)inc=9900;
- }
- if(!key1)//增加亮度
- {
- inc-=100;
- if(inc<=1000)inc=1000;
- }
- TH0=(65536-inc)/256;
- TL0=(65536-inc)%256;
- TR0=1;
- }
- void timer0()interrupt 1
- {
- unsigned char i;
- TR0=0;
- //给触发脉冲
- lamp_pwm=0;
- for(i=0;i<20;i++); //延时20us
- lamp_pwm=1;//灯灭
- }
- void main()
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
- P0=P1=P2=P3=P4=0xff;
-
- inc=9900;
- AUXR &= 0x7F; //定时器时钟12T模式
- TMOD &= 0xF0; //设置定时器模式
- TMOD |= 0x01; //设置定时器模式
- TH0=(65536-inc)/256;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
STC单相交流调光调压调速控制.zip
(88.17 KB, 下载次数: 170)
|
评分
-
查看全部评分
|