基于单片机实现的调光实验.docx
《基于单片机实现的调光实验.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的调光实验.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机实现的调光实验
基于单片机实现的调光
控制器设计
学院:
专业:
学号:
姓名:
目录
0.引言2
1.总体设计2
2.硬件实现3
2.1I/O通道的设计3
2.1.1同步信号采集电路3
2.1.2可控硅触发电路5
2.2单片机控制电路7
2.2.1STC89C52单片机7
2.2.2时钟电路11
2.2.3复位电路11
2.2.4按键控制电路12
2.2.5控制原理13
3.软件实现15
3.1主程序流程图15
3.2中断处理程序流程16
4.相关计算16
4.1同步信号采集电路相关参数计算16
4.1.1与DB107相连接的电路参数计算16
4.1.2与TLP521-1相连接的电路参数计算17
4.2可控硅触发电路相关参数计算17
4.2.1与可控硅相连的电阻回路计算17
4.2.2光耦MOC3022所在回路相关计算17
5.元器件的选型17
6.控制源程序18
7.原理图22
8.参考文献23
基于单片机实现的调光控制器设计
0.引言
现今很多学校、办公室、地铁里等地方,对照度要求比较高,但是在大部分时间里,外部环境的照明很高,如果经常全功率连续开灯运行来学习,办公或者运营,既会造成电能的浪费又增加运营的成本。
节能是照明灯光控制中的一项重要指标。
目前,存在模拟调光控制系统和数字调光控制系统。
本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。
双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。
所以需要在交流电的每个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。
调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。
这就要求要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。
1.总体设计
本数字式调光控制器总体设计如图1所示
控制部分:
为了便于灵活设计,选择可多次写入的可编程器件,本设计方案中选用的是宏晶科技STC89C52RD单片机。
驱动部分:
由于驱动的对象是交流负载,且为了实现连续调节的目的,本电路中采用了无触点开关元件双向可控硅。
双向可控硅能够对交流电源的导通进行无触点连续控制,以小电流控制大电流,且动作快、寿命长、可靠性高。
负载部分:
本电路的负载是白炽灯(纯阻负载)。
2.硬件实现
2.1I/O通道的设计
可以从本调光控制器的总体设计图看出,该设计应包括两部分。
一部分用于检测反映交流信号的过零点,以达到精确控制触发信号的在何时发出,此部分电路为同步信号采集电路;另一部分为驱动控制部分,单片机I/O口输出的电流为毫安级,基本不能去直接驱动负载,需要加入驱动电路用以控制负载(灯泡)的电压电流信号,此部分电路为可控硅触发电路。
2.1.1同步信号采集电路
交流电源同步信号的产生如图2电路所示,图中的同步信号就是我们需要的交流电压过零点信号。
各部分波形如图3所示。
图2同步信号提取电路
图3同步信号波形图
1.DF107(DB107)单相桥式整流器参数:
最大重复峰值反向电压:
1000V
最大有效值电压:
700V
最大直流隔离电压:
700V
平均正向电流:
1A
最大工作温度:
+150C
最小工作温度:
-55C
正向电压下降:
1.1V
几点电容:
25pF
2.TLP521-1详细参数:
工作温度:
-55℃—100℃
隔离电压:
2500V
工作电压:
5V
正向电流:
25mA
集电极电流:
10mA(最大)
LED:
正向电流:
6-15mA
反向电压:
5V
节点温度:
125℃
光敏三极管:
集射极电压:
55V
射集极电压:
7V
集电极电流:
50mA
集电极功率损耗:
150mW
2.1.2可控硅触发电路
图4可控硅接线图
图4中,L1_D是单片机输出的触发信号,该信号通过光控可控硅MOC3022去驱动可控硅T435。
受控的白炽灯接在Ll和零线之间。
MOC3022是DIP-6封装的光控可控硅。
其1、2脚分别为二极管的正、负极:
4、6脚为输出回路的两端;3、5脚不用连接。
1.MOC3022具体参数:
输入端:
反向电压:
3V
正向电流:
60mA
输出端:
截止输出端电压:
400V
最大重复浪涌电流:
1A
隔离浪涌电压:
7500V
总功率损耗:
330mV
工作温度范围:
-40—85℃
焊接温度:
260℃
2.BT136-600E具体参数:
可控硅是可控硅整流元件的简称,是一种具有三个PN结的四层结构的大功率半导体器件,一般由两晶闸管反向连接而成.它的功用不仅是整流,还可以用作无触点开关以快速接通或切断电路,实现将直流电变成交流电的逆变,将一种频率的交流电变成另一种频率的交流电等等。
可控硅和其它半导体器件一样,其有体积小、效率高、稳定性好、工作可靠等优点。
它的出现,使半导体技术从弱电领域进入了强电领域,成为工业、农业、交通运输、军事科研以至商业、民用电器等方面争相采用的元件。
参数如图4所示。
图4BT136-600E详细参数
2.2单片机控制电路
本次灯光亮度控制系统需要用到六个I/O口,四个用于按键输入,一个个外部中断输入以及一个脉冲出,STC89C52有32个通用I/O口,两个外部中断,STC89C52采用12M晶振,运行速度能满足设计要求,所以系统CPU选择STC89C52。
单片机AT89C52有内部RAM,可以作为各种数据区使用,内部闪电存储器存放灯光亮度控制的控制程序。
它的主要功能是已中断的方式采集到交流电压的过零点、扫描按键,通过一定的算法,延时输出一个低电平脉冲用于触发双向可控硅来控制灯光的亮度。
2.2.1STC89C52单片机
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
STC89C52具有下列主要性能参数:
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.用户应用程序空间为8K字节
5.片上集成512字节RAM
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
9.具有看门狗功能
10.共3个16位定时器/计数器。
即定时器T0、T1、T2
11.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
12.通用异步串行口(UART),还可用定时器软件实现多个UART
13.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
14.PDIP封装
(1)主电源引脚
(a).Vcc电源端
(b).GND接地端
(2)外接晶体引脚XTAL1和XTAL2
(a).XTAL1接外部晶体的一个引脚。
在单片机内部,它是构成片内振荡器的反相放大器的输入端。
当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。
(b).XTAL2接外部晶体的另一个引脚。
在单片机内部,它是上述振荡器的反相放大器的输出端。
(3).控制或与其它电源复用引脚RST、ALE//PROG、/PSEN和/EA/Vpp
(a).RES复位输入端。
当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
(b).ALE//PROG当访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
然而要注意的是:
每当访问外部数据存储器时,将跳过一个ALE脉冲。
在对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。
如果需要的话,通过对专用寄存器(SFR)区中8EH单元的D0位置数,可禁止ALE操作。
该位置数后,只有在执行一条MOVX或MOVC指令期间,ALE才会被激活。
另外,该引脚会被微弱拉高,单片机执行外部程序时,该设定禁止ALE位无效。
(c)./PSEN程序存储允许(/PSEN)输出是外部程序存储器的读选通信号。
当STC89C52/LV51由外部程序存储器取指令(或常数)时,每个机器周期两次/PSEN有效(既输出2个脉冲)。
但在此期间内,每当访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(d)./EA/Vpp外部访问允许端。
要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则/EA端必须保持低电平(接到GND端)。
然而要注意的是,如果保密位LB1被编程,复位时在内部会锁存/EA端的状态。
当/EA端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序。
在Flash存储器编程期间,该引脚也用于施加12V的编程允许电源Vpp(如果选用12V编程)。
(4)输入/输出引脚P0.0~P0.7、P10.~P1.7、P2.0~P2.7和P3.0~P3.7
(a).P0端口(P0.0~P0.7)P0是一个8位漏极开路型双向I/O端口。
作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。
在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。
在Flash编程时,P0端口接收指令字节;而在验证程序时,则输出指令字节。
验证时,要求外接上拉电阻。
(b).P1端口(P1.0~P1.7)P1是一个带有内部上拉电阻的8位双向I/O端口。
P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在对Flash编程和程序验证时,P1接收低8位地址。
(c).P2端口(P2.0~P2.7)P2是一个带有内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX@DPIR指令)时,P2送出高8位地址。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。
在对Flash编程和程序验证期间,P2也接收高位地址和一些控制信号。
(d).P3端口(P3.0~P3.7)P3是一个带有内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P3作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在STC89C52中,P3端口还用于一些专门功能,这些兼用功能见表1
表1
端口引脚
兼用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
2.2.2时钟电路
在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式,如图所示。
内部时钟原理图(就是一个自激振荡电路)在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30-50pF,晶振的频率取值在1.2MHz~12MHz之间。
对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。
晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。
时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。
CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。
2.2.3复位电路
单片机复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
STC89C52的上电复位电路如图所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。
对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至10uF。
上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。
为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。
手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。
手动按钮复位的电路如所示。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
2.2.4按键控制电路
对于单片机I/O内部有上拉电阻的微控制器而言,还可以省掉外部的那个上拉电阻。
简单分析一下按键检测的原理。
当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平);当按键S按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平)。
这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。
所以我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。
按键的配置见表2
表2:
P1^0
按键SB1(开)
P1^1
按键SB2(关)
P1^2
按键SB3(减光)
P1^3
按键SB4(增光)
在我们通过上面的按键检测原理检测按键时,其实忽略了一个重要的问题,那就是现实中按键按下时候的电平变化状态。
我们的结论是基于理想的情况得出来的,而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动,尽管这个时间非常的短暂,但是对于我们执行时间以us为计算单位的微控制器来说,这个抖动很漫长可能引起误动作。
因此需要在程序中加以处理,用软件来延时一小段时间(10ms)在判断按键的状态。
这样才能得到一个准确的按键状态。
2.2.5控制原理
本控制器主控单元以STC89C52单片机为核心,同步信号采集电路中产生的同步信号SYN接到STC89C52的INT0,此信号的下降沿将使STC89C52产生中断,以此为延时时间的起点。
四个按键只用于控制一路灯:
两个为开和关,另外两个分别为提高亮度和降低亮度。
单片机整体控制电路如图5所示。
图5单片机控制电路
220V交流主电源导通区间、同步信号和触发信号的时序关系如图6所示。
图中的阴影部分表示可控硅的导通区间,它的大小决定了灯的亮度。
改变延时时间可改变触发信号和同步信号的相位关系,也改变了可控硅的导通区间的大小,达到调光的目的。
图6主电源导通区、同步信号和触发信号时序图
3.软件实现
3.1主程序流程图
3.2中断处理程序流程
4.相关计算
4.1同步信号采集电路相关参数计算
4.1.1与DB107相连接的电路参数计算
选择15K2W电阻的原因:
由于DB107的正向压降为1.1V,可计算
因此选择2W,15K的电阻合适。
由于夹在DB107交流测的电压为1.1V,所以直流输出侧的电压为输入侧的0.9倍。
可以直接去驱动TLP521-1。
4.1.2与TLP521-1相连接的电路参数计算
光敏三极管的饱和压降按1V计算,集电极最大电流为10mA,可得
因此选择5.1KΩ的电阻合适。
当光敏三极管截止时,灌电流
;符合要求。
4.2可控硅触发电路相关参数计算
4.2.1与可控硅相连的电阻回路计算
选择的灯泡为220V/60W,计算可得其热态电阻为
,冷态电阻为热态电阻的1/16,所以冷态电阻为50Ω。
当MOC3022导通时通态电压为3V,可控硅门极所加电压:
可以驱动可控硅所以选1k
和180
4.2.2光耦MOC3022所在回路相关计算
选择电阻270
的原因:
MOC3022发光二极管侧最小触发电流为10mA,触发电压为1.5V,极限条件下
,所以电阻应该比350小,应该选270
。
因为MOC3022的发光灯驱动电流是10mA,所以可以驱动MOC3022.
5.元器件的选型
1、单片机最小系统
表3
元器件名称
型号/规格
数量
51单片机芯片
STC89C52RC
1片
开关
触点型
1个
电解电容
10uF
1个
电阻
碳膜型,1/4W,10K
1个
瓷片电容
30pF
2个
晶振
12M
1个
2、过零点检测单元
表4
元器件名称
型号/规格
数量
整流桥
DB107
1个
光电隔离器
TLP521-1
1个
电阻
金属膜,2W,15K
2个
电阻
碳膜,1/4W,5.1K
1个
3、按键控制单元
表5
元器件名称
型号/规格
数量
开关
触点型
4个
电阻
碳膜型,1/4W,10K
4个
4、驱动电路单元
表6
元器件名称
型号/规格
数量
电阻
碳膜型,1/4W,5.1K
1个
电阻
碳膜型,1/4W,270
1个
电阻
碳膜型,1/4W,1K
1个
电阻
金属膜,2W,1K
1个
电阻
金属膜,2W,180
1个
光电隔离器
MOC3022
1片
双向可控硅
BT136
1个
白炽灯
220V/60W
1个
6.控制源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitkey1=P1^0;//开
sbitkey2=P1^1;//关
sbitkey3=P1^2;//减
sbitkey4=P1^3;//增
sbitout=P2^0;
uintup=1;
//-------------------------------------------------------------------
//**延时子程序**
//-------------------------------------------------------------------
voidDelayms(uintn)//延时n*0.5毫秒
{
uinti,j;
for(j=n;j>0;j--)
for(i=60;i>0;i--);
}
voidDelay500us(void)//脉冲宽度延时500us
{
uintj;
for(j=60;j>0;j--);
}
//-------------------------------------------------------------------
//**外部中断0服务程序**
//-------------------------------------------------------------------
voidintersvr0(void)interrupt0using1
{
Delayms(up);//延时up*0.5毫秒后再给触发脉冲
out=0;
Delay500us();//给触发脉冲500us的宽度
out=1;
}
//-------------------------------------------------------------------
//**主程序**
//-------------------------------------------------------------------
voidmain(void)
{
IT0=1;//外部中断0初始化
EX0=1;
while
(1)
{
/****************************/
if(key1==0)//开关打开
{
Delayms(20);//按键消抖
if(key1==0)
{
up=0;
EA=1;
out=0;
}
}
while(key1==0);
/****************************/
if(key2==0)//开关关断
{
Delayms(20);//按键消抖
if(key