基于单片机实现的普通灯泡调光控制器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1K 其它部件
*8
15W
四、软件部分: (一)软件设计:
数量
1 1 2 1
1 1 2 1 1 1
3 3
1 1 1排 1 1 1 1
备注 检测过零
整流用
双向导通
带有电源 螺旋式 带线
要控制的对象是 50Hz 的正弦交流电,通过光耦取出其过零点的信号(同步信号),将这
个信号送至单片机的外中断,单片机每接收到这个同步信号后启动一个延时程序,延时的具
限流电阻 上拉电阻
P521 DB107
光耦 可控硅 上拉电阻 限流电阻 可控硅电阻 可控硅电阻
MOC3023 BT136
按钮 上拉电阻
51 开发板 排线 排针
万用 PCB 板 灯泡
灯泡底座 插头
规格 过零检测模块
4 管脚
30K/2W 5.1K 脉冲触发模块
5.1K 270 1K/2W 180/2W 操作模块
在日常生活中,我们常常需要对灯光的亮度进行调节。本调光控制器通过单片机控制双 向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发 信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。所以需 要在交流电的每个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。 调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控 硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。这就需要提取出交流电压的过零点, 并以此为基础,确定触发信号的送出时间,达到调光的目的。 三、硬件部分:
delay500us(z);//控制角的大小由 z 决定 maichong();//发脉冲 }
五、 各单元电路及说明
1 交流电压过零点信号提取:
交流电压过零点信号提取电路如图 2 所示,图中的同步信号就是我们需要的交流电压 过零点信号。各部分波形如图 3 所示。
图中整流后波形中的水平虚线表示光藕 P52l 输入二极管的门限电压。P521 是 TLP521 的简称,下图是其引脚图。引脚图中器件名的后缀“-1”表示包含一组光藕。
经过组员的共同调试,最终解决问题。通过这次实验,让我对灯泡调光控制器有了深刻的认 识,了解 P521、BT136、MOC3022 等芯片的管脚和功能,并对灯泡调光控制原理有了一 定的认识,同时也增加了我学习单片机的兴趣,提升了我的专业能力。
MOC3022 是 DIP-6 封装的光控可控硅。其 1、2 脚分别为二极管的正、负极:4、6 脚 为输出回路的两端;3、5 脚不用连接。如图 8 所示。
T435-400 是可控硅,“4”表示主回路电流是 4A;“35”表示触发端的最大电流是 35mA, 一般该端有最大电流的 5%就可保证可靠地触发。T435-400 外型图如图 9 所示,G 为门极。
} }
/************2ms 按键防抖动延时函数**********/
void kdelay() {
for来自百度文库i=0;i<200;i++)
{ delay10us(); //调用 200 次 10us 约为 2ms
} }
/*将半周期 0.01 秒平均分成 20 等分,每等分为 0.5 毫秒,即 500us*/ /************0.5ms 倍数的子函数************/
void kdelay(); void maichong(); delay500us(uint z); void delay10us(); void liangmie(); uint x,y,z,k,i,j;
void main() {
IT0=1;//设定外部中断 0 为下降沿触发方式 EX0=1;//开外部中断 0
/************灯的亮灭控制函数***********/ void liangmie()
{ if(SW3==0)
{ kdelay(); if(SW3==0) { j++; if(j==2){j=0;} } while(!SW1);//等待按键弹起
} }
/**********外部中断 0 函数**********/ void Int0(void) interrupt 0 {
本调光控制器的框图如下:
控制部分:为了便于灵活设计,选择可多次写入的可编程器件,这里选用 STC89C52RC 型单片机。(本实验选用 STC89C52RC 为主芯片的开发板)
驱动部分:由于要驱动的是交流,所以可以用继电器或光耦+可控硅(晶闸管 SCR)来驱 动。继电器由于是机械动作,响应速度慢,不能满足其需要。可控硅在电路中能够实现交流 电的无触点控制,以小电流控制大电流,并且不象继电器那样控制时有火花产生,而且动作 快、寿命长、可靠性高。所以这里选用的是可控硅。
P2=0xff; z=10; j=0; while(1)
{ if(SW1==0) { kdelay(); //软件 2ms 延时防抖 if(SW1==0) { z--; if(z==0){z=19;}//灯达到最亮以后继续按下 SW2,灯会变到最暗 } while(!SW1);//等待按键弹起 } if(SW2==0) { kdelay(); if(SW2==0) { z++; if(z==20){z=0;}//灯达到最暗以后继续按下 SW1,灯会变到最亮 } while(!SW2); } liangmie(); if(j==0) { EA=1; //开总中断 } else { EA=0; //关总中断 }
六、系统软硬件联调: 1 运用 proteus 进行仿真,仿真效果图如下:
2 搭建的电路实物图及软硬件调试效果图如下:
七、 实验心得: 本次课程设计,我主要负责硬件,元器件的选型,电路板的焊接、调试部分。在查阅大
量资料之后,我们组确定了大体的思路,之后我们用 protel 软件画出电路图,经过老师的指 导,发现并修改了设计中的错误。硬件电路正确无误后,我们又开始进行软件设计,经过 3 天的设计与修改,程序设计成功,再用 proteus 软件进行仿真,得到预期的实验目的。至此, 我们拥有一个完整的设计方案。接着便是搭建电路,经过两天时间,我将硬件电路搭建好, 并用 keil 软件将程序烧入单片机,上电调试后,基本效果与预期一致,但还有一些小的缺陷,
单片机课程设计
——基于单片机实现的普通灯泡调光控制器
学院:电气与控制工程学院 班级:电气工程及其自动化 0801 班 学生: 指导老师:
基于单片机实现的普通灯泡调光控制器
一、实验要求: 用单片机控制一个普通灯泡的亮度,一路开关控制普通灯泡电源的通断,另外两路开关
分别控制普通灯泡亮度的增加和减小。 二、调光控制器设计原理:
负载部分:本电路只能控制白炽灯(纯阻负载)的亮度。
(一)硬件设计: 1、I/O 通道的设计: (1)同步信号采样电路
(2)过零点信号(同步信号)波形图。
(3)可控硅触发电路:
(4)主电源导通区间、同步信号和触发信号时序图 2、单片机控制电路原理图: 3、控制原理总图:
4、元器件清单:
名称
代码
光电耦合器 桥堆
2 主控单元: 主控单元以 STC89C52RC 单片机为核心,交流电压过零点信号提取电路中产生的同步 信号 SYN 接到 STC89C52RC 的 INT0,此信号的下降沿将使 STC89C52RC 产生中断,以 此为延时时间的起点。 三个按键只用于控制一路灯:一个为开关,另外两个分别为提高亮度和降低亮度。 220V 交流主电源导通区间、同步信号和触发信号的时序关系如图 6 所示。
体时间由按键来改变。当延时结束时,单片机产生触发信号,通过它让可控硅导通,电流经 过可控硅流过白炽灯,使灯发光。延时越长,亮的时间就越短,灯的亮度越暗(并不会有闪 烁的感觉,因为重复的频率为 100Hz,且人的视觉有暂留效应)。由于延时的长短是由按键
决定的,所以实际上就是按键控制了光的强弱。
理论上讲,延时时间应该可以是 0~10ms 内的任意值。在程序中,将一个周期均分成 N 等份,每次按键只需要去改变其等份数,在这里,N 越大越好,但由于受到单片机本身的 限制和基于实际必要性的考虑,实际采用的值是 20。可控硅的触发脉冲宽度要根据具体的 光耦结合示波器观察而定,在本设计中取 100µs。程序中使用 T1 来控制这个时间。对两个 调光按键的处理有两种方式:一种是每次按键,无论时间的长短,都只调整一个台阶(亮或 暗);另一种是随按键时间的不同,调整方法不同:短按只调整一个台阶,长按可以连续调
图中的阴影部分表示可控硅的导通区间,它的大小决定了灯的亮度。改变延时时间可改 变触发信号和同步信号的相位关系,也改变了可控硅的导通区间的大小,达到调光的目的。
3 驱动单元:
图中,L1_D 是单片机输出的触发信号,该信号通过光控可控硅 MOC3022 去驱动可控 硅 T435(BT136)。受控的白炽灯接在 Ll 和零线(图中未画出)之间。
delay500us(uint z) {
uchar x,y;
for(x=0;x<z;x++) {
for(y=0;y<50;y++) {
delay10us();//调用 50 次 10us 约为 502us } } }
/*************脉冲函数*****************/
void maichong() {
CF=0; for(k=0;k<10;k++)
{ delay10us();//调用 10 次 10us 约为 102us
} CF=1; }
/*************10us 延时函数**************/ void delay10us() { _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); }
整。本实验选取第一种方式。
(二)程序编写:
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char
sbit SW1=P2^0;//用于调高灯的亮度 sbit SW2=P2^1;//用于调低灯的亮度 sbit CF=P2^2;//用于触发可控硅 sbit SW3=P2^3;//用于控制灯的亮灭
相关文档
最新文档