打印

怎么利用声音的强弱调节灯光的暗弱

[复制链接]
3950|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小财迷|  楼主 | 2013-7-18 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
maychang| | 2013-7-18 23:18 | 只看该作者
按照你的叙述,将声音信号放大,直接驱动灯即可。
如果嫌灯闪烁,声音信号检波,加个比较大的时间常数滤波。

使用特权

评论回复
板凳
tyw| | 2013-7-19 06:31 | 只看该作者
声音轻灯暗,哈哈,偷爷要谢谢泥们老师了.

1. 声音放大后经A/D转换成数字量,用这个去控制可控硅的导通角,实现灯光控制.
2. 声音放大后经多个比较器转换几档输出信号,用这个去控制可控硅的导通角,实现灯光控制.(可用1~2个LM324运放实现)

使用特权

评论回复
评论
我是土匪 2013-7-19 13:17 回复TA
赞 
地板
chenzhi658| | 2013-7-19 07:45 | 只看该作者
tyw 发表于 2013-7-19 06:31
声音轻灯暗,哈哈,偷爷要谢谢泥们老师了.

1. 声音放大后经A/D转换成数字量,用这个去控制可控硅的导通角,实 ...

厉害

使用特权

评论回复
5
airwill| | 2013-7-19 15:31 | 只看该作者
3楼真幽默.

我感觉应该还要考虑一个 "拖尾" 效果.
就是声音响过后, 灯要慢慢地暗下来.

使用特权

评论回复
6
小财迷|  楼主 | 2013-7-20 14:14 | 只看该作者
tyw 发表于 2013-7-19 06:31
声音轻灯暗,哈哈,偷爷要谢谢泥们老师了.

1. 声音放大后经A/D转换成数字量,用这个去控制可控硅的导通角,实 ...

导通角应该怎么控制呢,在编程怎么里怎么去实现

使用特权

评论回复
7
小财迷|  楼主 | 2013-7-20 14:14 | 只看该作者
tyw 发表于 2013-7-19 06:31
声音轻灯暗,哈哈,偷爷要谢谢泥们老师了.

1. 声音放大后经A/D转换成数字量,用这个去控制可控硅的导通角,实 ...

导通角应该怎么控制呢,在编程怎么里怎么去实现

使用特权

评论回复
8
tyw| | 2013-7-20 14:25 | 只看该作者
本帖最后由 tyw 于 2013-7-20 15:31 编辑

    普通电风扇电机一般用调相法调速,对于象电加热器之类热惯量较大的,还可用调 功 法来调温,即控制每秒内正弦波形个数.
    调 功 法当每秒内完整波形少于25个时,平均电压波动较大,负载的热惯性会起一个平衡作用,一般不低于10个.但用于惯量较小的风扇,就会有明显的抖晃了.
    调相法调速缺点是不能过零触发,因此干扰毛刺较大.而调 功 法可过零触发,干扰很小.

下面是俺以前做过的一个小产品,可参考一下.

lc.sch →  https://bbs.21ic.com/upfiles/img/200711/2007112282813673.rar

lc.asm → https://bbs.21ic.com/upfiles/img/200711/200711228352463.rar


;
; ┏━━━━━━━━━━━┓
; ┃┏━━━━━━━━━┓┃
; ┃┃无线遥控开关接收器┃┃
; ┃┃      源程序      ┃┃
; ┃┃  V1.0  01.03.18  ┃┃
; ┃┗━━━━━━━━━┛┃
; ┗━━━━━━━━━━━┛
;
        ORG     0000H
        AJMP    CSH             ;主程序进入点
        ORG     0003H
        LJMP    WT0             ;外部中断WT0入口
        ORG     000BH
        AJMP    TI0             ;定时中断T0入口
        ORG     001BH
        AJMP    TI1             ;定时中断T1入口
;
;**********
;* 初始化 *
;**********
;
        ORG     0020H
CSH:    MOV     R0,#7FH         ;内部RAM(00H~7FH)清零
CSH1:   MOV     @R0,#00H
        DJNZ    R0,CSH1
        MOV     SP,#60H         ;堆栈60H~7FH,【使用89C2051】
        MOV     TMOD,#00010010B ;T0作8位计数器 (自动装入),T1作16位计数器
        MOV     TH0,#155        ;FFH-9BH=100D,12M/12/100D=10000HZ(100us)
        MOV     TH1,#0ECH       ;FFFFH-1388H=EC77H
        MOV     TL1,#77H        ;T1频率为12M/12/5000D=200HZ(5ms)
;
        SETB    TCON.4          ;T0开始动作
        SETB    IE.1            ;T0允许中断
        SETB    TCON.6          ;T1开始动作
        SETB    IE.3            ;T1开始中断
        SETB    IE.0            ;INT0允许中断
        SETB    TCON.0          ;INT0低电平触发
        SETB    PT0             ;T0中断优先
        SETB    IE.7            ;系统允许中断
;
        MOV     46H,#03
        LCALL   BEL
;
        CLR     24H             ;24.4H←"0"开一短键标志复位(关)
        CLR     26H             ;24.6H←"0"开一短键标志复位(关)
        MOV     30H,#85         ;调相上电初始亮度(最暗)
        MOV     31H,#02         ;调功上电初始亮度(最暗)
;
;**********
;* 主程序 *
;**********
;
MAIN:   NOP
        LCALL   JS              ;调用PT2272解码信号接收子程序
        LCALL   DTCL            ;调用PT2272解码信号处理子程序
        LJMP    MAIN
;
;**********************
;* PT2272解码信号接收 *
;**********************
;
JS:     JNB     P1.2,JS5        1.2="0",解码信号无效,转JS5
;
        JNB     P1.4,JS2        ;不是调相键,转JS2继续
        SETB    0AH             ;调相键有效标志置位
JS2:    JNB     P1.5,JS3        ;不是调功键,转JS3继续
        SETB    0BH             ;调功键有效标志置位
JS3:    JNB     P1.6,JS4        ;不是开一键,转JS4继续
        SETB    0CH             ;开一键有效标志置位
JS4:    JNB     P1.7,JS0        ;不是开二键,转JS0出口
        SETB    0DH             ;开二键有效标志置位
JS0:    RET
;
JS5:    CLR     0AH             ;调相键有效标志复位
        CLR     0BH             ;调功键有效标志复位
        CLR     0CH             ;开一键有效标志复位
        CLR     0DH             ;开二键有效标志复位
        RET
;
;*************************************
;* 解码信号处理                      *
;*-----------------------------------*
;* 【调相键】  P14H="1"键按下       *
;* 【调功键】  P15H="1"键按下       *
;* 【开一键】  P16H="1"键按下       *
;* 【开二键】  P17H="1"键按下       *
;*-----------------------------------*
;* 短键作开、关用                    *
;* 长键作控制用(="0"减低,="1"增高) *
;*************************************
;
DTCL:   JB      06H,TXK3        ;转TXK3,检查调相长键有否放开?
        JB      11H,TXK2        ;正在作调相短键定时,转TXK2
        JNB     0AH,DTL1        ;不是调相键,转DTL1继续
;**************
;* 调相键处理 *
;**************
        JB      10H,TXK1        ;正在作调相键按下消抖动延时,转TXK1
        SETB    10H             ;22.0H←"1",调相键消抖动延时标志置位
        MOV     54H,#10         ;设置30ms键按下消抖动延时
TXK1:   MOV     A,54H
        CJNE    A,#00,TXK0      ;30ms定时未到,转TXK0出口
        CLR     10H             ;10H←"0",调相键消抖动延时标志复位
        JNB     0AH,TXK0        ;无效键入,转TXK0出口
        LCALL   BEL1            ;蜂鸣一次
        SETB    11H             ;11H←"1",调相长键定时已设置标志置位
        MOV     54H,#80         ;设置400ms长键定时
TXK2:   MOV     A,54H
        CJNE    A,#00,TXK4      ;400ms长键定时未到,转TXK4检查有否放键
        JB      20H,TXK5        ;20H="1",调相短键已打开
        SETB    20H             ;打开调相短键
        MOV     A,30H
        SETB    21H             ;30H<"50",蛮亮了,设置调暗方向
        CJNE    A,#50,TXK6
TXK6:   JC      TXK5
        CLR     21H             ;30H≥"50",蛮暗了,设置调亮方向
TXK5:   CPL     21H             ;21H←"X"调相长键标志取反
        SETB    06H             ;06H←"1",调相长键标志置位
        MOV     46H,#01         ;长键蜂鸣
        LCALL   BEL
TXK3:   JB      0AH,TXK0        ;>400ms,键未放,保持长键,转TXK0
        CLR     11H             ;11H←"1",调相长键定时已设置标志复位
        CLR     06H             ;06H←"0",调相长键标志复位
TXK0:   RET
;
TXK4:   JB      0AH,TXK0       ;调相键未放,转TXK0
;************************
;* <400ms就放键,是短键 *
;************************
        CPL     20H             ;20H←"X"调相短键标志取反
        CLR     11H             ;11H←"1",调相长键定时已设置标志复位
        RET
;
DTL1:   JB      07H,TGK3        ;转TGK3,检查调功长键有否放开?
        JB      13H,TGK2        ;正在作调功短键定时,转TGK2
        JNB     0BH,DTL2        ;不是调功键,转DTL2继续
;**************
;* 调功键处理 *
;**************
        JB      12H,TGK1        ;正在作调功键按下消抖动延时,转TGK1
        SETB    12H             ;12H←"1",调功键消抖动延时标志置位
        MOV     54H,#10         ;设置10ms键按下消抖动延时
TGK1:   MOV     A,54H
        CJNE    A,#00,TGK0      ;10ms定时未到,转TGK0出口
        CLR     12H             ;12H←"0",调功键消抖动延时标志复位
        JNB     0BH,TGK0        ;无效键入,转TGK0出口
        SETB    13H             ;13H←"1",调功长键定时已设置标志置位
        LCALL   BEL1            ;蜂鸣一次
        MOV     54H,#80         ;设置400ms长键定时
TGK2:   MOV     A,54H
        CJNE    A,#00,TGK4      ;400ms长键定时未到,转TGK4检查有否放键
        JB      22H,TGX5
        SETB    22H             ;打开调功短键
        MOV     A,31H
        CLR     23H             ;31H≥"25",蛮暗了,设置调亮方向
        CJNE    A,#12,TGX6
TGX6:   JC      TGX5
        SETB    23H             ;31H<"25",蛮亮了,设置调暗方向
TGX5:   CPL     23H             ;23H←"X"调功长键标志取反
        SETB    07H             ;07H←"1",调功长键标志置位
        MOV     46H,#01         ;蜂鸣二次
        LCALL   BEL
TGK3:   JB      0BH,TGK0        ;>400ms,键未放,保持长键,转TGK0
        CLR     13H             ;13H←"1",调功长键定时已设置标志复位
        CLR     07H             ;07H←"0",调功长键标志复位
TGK0:   RET
;
TGK4:   JB      0BH,TGK0       ;调功键未放,转TGK0
;************************
;* <400ms就放键,是短键 *
;************************
        CPL     22H             ;22H←"X"调功短键标志取反
        CLR     13H             ;13H←"0",调功长键定时已设置标志复位
        RET
;
DTL2:   JB      08H,K1C2
        JNB     0CH,DTL3       ;不是开一键,转DTL3继续
;**************
;* 开一键处理 *
;**************
        JB      14H,K1C1        ;正在作开一键按下消抖动延时,转K1C1
        SETB    14H             ;22.4H←"1",开一键消抖动延时标志置位
        MOV     54H,#10         ;设置30ms键按下消抖动延时
K1C1:   MOV     A,54H
        CJNE    A,#00,K1C0      ;30ms定时未到,转K1C0出口
        CLR     14H             ;22.4H←"0",开一键消抖动延时标志复位
        JNB     0CH,K1C0        ;无效键入,转K1C0出口
        LCALL   BEL1            ;蜂鸣一次
        SETB    08H             ;禁止开一键连续蜂鸣
        CPL     24H             ;24.4H←"X"开一短键标志取反
K1C2:   JB      0CH,K1C0        ;键未放,转K1C0
        CLR     08H             ;允许开一键蜂鸣
K1C0:   RET
;
DTL3:   JB      09H,K2C2
        JNB     0DH,K2C0       ;不是开二键,转K2C0出口
;**************
;* 开二键处理 *
;**************
        JB      16H,K2C1        ;正在作开二键按下消抖动延时,转K2C1
        SETB    16H             ;22.6H←"1",开二键消抖动延时标志置位
        MOV     54H,#10         ;设置30ms键按下消抖动延时
K2C1:   MOV     A,54H
        CJNE    A,#00,K2C0      ;30ms定时未到,转K2C0出口
        CLR     16H             ;22.6H←"0",开二键消抖动延时标志复位
        JNB     0DH,K2C0        ;无效键入,转K2C0出口
        SETB    09H             ;禁止开二键连续蜂鸣
        LCALL   BEL1            ;蜂鸣一次
        CPL     26H             ;24.6H←"X"开二短键标志取反
K2C2:   JB      0DH,K2C0        ;键未放,转K2C0
        CLR     09H             ;允许开二键蜂鸣
K2C0:   RET
;
;********
;* 蜂鸣 *
;********
;
BEL1:   MOV     46H,#01
BEL:    SETB    01H              ;允许蜂鸣
        MOV     38H,#30          ;150ms蜂鸣定时
        RET
;
;***************************
;* 100us时标T0定时中断处理 *
;***************************
;
TI0:    PUSH    PSW             SW进栈
        SETB    PSW.3           ;RS0←"1"
        CLR     PSW.4           ;RS1←"0",选工作寄存区1(R08H ̄R0FH)
        PUSH    ACC
        CPL     P3.1
        MOV     R1,#04          ;需延时计数器字节
        MOV     R0,#50H         ;延时计数器R50H~R53H
DY2:    MOV     A,@R0           ;读计数值
        JZ      DY1             ;=0?是转DY1处理下一位
        DEC     @R0             ;计数器减一
DY1:    INC     R0              ;计数器指针加一
        DJNZ    R1,DY2          ;3字节到?
;*************************************
;* 调相滞后触发处理 (脉宽0.1ms)      *
;* 40H装载当前调相触发滞后时间值     *
;* 40H每0.1ms减一,(40H最大为100)     *
;* 40H="01"时P3.7←"0",触发脉冲前沿 *
;* 40H="00"时P3.7←"1",触发脉冲后沿 *
;*************************************
        JNB     20H,TCL0        ;20H="0",调相输出关
        JNB     30H,TCL0        ;30H="0",电压未过零,禁止调相触发定时
        JB      04H,TCL1
        MOV     40H,30H         ;取出30H当前调相触发滞后时间值
        SETB    04H             ;20.4H←"1",滞后触发已置初值
TCL1:   DEC     40H             ;当前调相触发滞后时间值减0.1ms
        MOV     A,40H
        CJNE    A,#01,TCL2
        CLR     P3.7            3.7←"0",调相触发脉冲前沿(脉宽0.1ms)
TCL0:   POP     ACC             ;ACC出栈
        POP     PSW             SW出栈【恢复进栈前寄存器区】
        RETI                    ;中断返回
;
TCL2:   CJNE    A,#00,TCL0
        CLR     04H             ;04H←"0",触发定时器允许重置初值
        CLR     30H             ;30H←"0",禁止调相触发定时
        SETB    P3.7            3.7←"1",调相触发脉冲后沿
        SJMP    TCL0            ;出中断
;
;*************************
;* 5ms时标T1定时中断处理 *
;*************************
;
TI1:    MOV     TH1,#0ECH       ;FFFFH-1388H=EC77H
        MOV     TL1,#77H        ;T0频率为12M/12/5000D=1388H=200HZ(5ms)
        PUSH    PSW             SW进栈
        CLR     PSW.3           ;RS0←"0"
        SETB    PSW.4           ;RS1←"1",选工作寄存区2(R10H ̄R17H)
        PUSH    ACC
;
        CPL     P3.0            ;看门狗定时100Hz(10ms)
;
        MOV     R1,#02          ;需延时计数器字节
        MOV     R0,#54H         ;延时计数器R54H~R55H
DY4:    MOV     A,@R0           ;读计数值
        JZ      DY3             ;=0?是转DY1处理下一位
        DEC     @R0             ;计数器减一
DY3:    INC     R0              ;计数器指针加一
        DJNZ    R1,DY4          ;3字节到?
;****************
;* 蜂鸣定时处理 *
;****************
        JB      05H,TT9         ;05H="1",正在作关蜂鸣定时,转TT9
        JB      02H,TT9K        ;02H="1",正在作开蜂鸣定时,转TT9K
        JNB     01H,TT8         ;01H="0",禁止蜂鸣处理,转TT8继续
        CLR     P1.3            ;开蜂鸣
        SETB    02H             ;02H←"1",开蜂鸣定时
TT9K:   DEC     38H             ;蜂鸣10ms计数器减一
        MOV     A,38H           ;取出蜂鸣10ms计数器
        CJNE    A,#10,TT8       ;开蜂鸣100ms未到,转TT8继续
        SETB    05H             ;05H←"1",关蜂鸣定时
        SETB    P1.3            ;关蜂鸣
TT9:    DEC     38H             ;蜂鸣10ms计数器减一
        MOV     A,38H           ;取出蜂鸣10ms计数器
        CJNE    A,#00,TT8       ;关蜂鸣50ms未到,转TT8继续
        CLR     05H             ;05H←"0",关蜂鸣定时标志复位
        CLR     02H             ;02H←"0",开蜂鸣定时标志复位
        MOV     38H,#30         ;重置蜂鸣定时150ms常数
        DJNZ    46H,TT8         ;蜂鸣次数未到,转TT8继续
        CLR     01H             ;01H←"0",禁止蜂鸣处理
;**********************************
;* 调相触发滞后时间调整           *
;*--------------------------------*
;* 每20ms调整一档,每档0.1ms       *
;* 半周期共调整10ms÷0.1ms=100档  *
;* 20msX100=2s调完半程,4s调完全程 *
;**********************************
TT8:    JNB     20H,DY5         ;20H="0",调相关,转DY5不调整
        INC     56H             ;5ms计数器加一
        MOV     A,56H           ;取出5ms计数器值
        CJNE    A,#12,DY5       ;20ms未到,转DY5出口
        MOV     56H,#00
        JNB     06H,DY5         ;06H="0",禁止调相,转DY5不调整
        JNB     21H,DY6         ;21H="0",转DY6电压调低
        MOV     A,30H           ;取出当前调相触发滞后时间值
        CJNE    A,#08,DY7       ;30H="02",电压最高值
        SJMP    DY5             ;30H="0",电压已调到最高了,转DY5出口
;
DY7:    DEC     30H             ;每20ms调相触发延时减一档(每档0.1ms),电压调高
        SJMP    DY5
;
DY6:    MOV     A,30H           ;取出当前调相触发滞后时间值
        INC     30H             ;每20ms调相触发延时加一档(每档0.1ms),电压调低
        CJNE    A,#85,DY5       ;100usX100=10ms未到,转DY5出口
        MOV     30H,#85         ;30H="97",电压已调到最低了,不再增加
;
DY5:    POP     ACC             ;ACC出栈
        POP     PSW             SW出栈【恢复进栈前寄存器区】
        RETI                    ;定时中断返回
;
;****************
;* 外部中断处理 *
;****************
;
WT0:    PUSH    PSW             SW进栈
        PUSH    ACC             ;ACC进栈
        SETB    PSW.3           ;RS0←"1"
        SETB    PSW.4           ;RS1←"1",选工作寄存区3(R18H ̄R1FH)
;*************************
;* 电压过零,允许调相触发 *
;*************************
        JNB     20H,TOFF1       ;20H="0",调相关,转TOFF1
        SETB    30H             ;30H←"1",电压过零,允许调相触发定时
;********************
;* 调功周期触发处理 *
;********************
TOFF1:  JNB     22H,TOFF2       ;22H="0",调功关,转TOFF2
        INC     33H             ;21H="0",当前周期触发步进定时计数器加一
        MOV     A,33H           ;读取当前周期触发步进定时计数器
        CJNE    A,#50,TF13      ;未到250ms设定数
        MOV     33H,#01         ;周期触发脉冲计数器清"0"
;**************************
;* 周期触发脉冲数调整环节 *
;**************************
        JNB     07H,TF13        ;07H="0",禁止调功,转TF13直接触发
        MOV     A,31H           ;读取开周期计数器
        JB      23H,TF12        ;23H="1",递增
        DEC     31H             ;开周期计数器减一
        CJNE    A,#02,TF13      ;未到开周期设定数下限(20%)
        MOV     31H,#02         ;到设定数下限,不再减少
        SJMP    TF13
TF12:   INC     31H             ;开周期计数器加一
        CJNE    A,#20,TF13      ;未到开周期设定数上限(100%)
        MOV     31H,#20         ;到设定数上限,不再增加
;****************
;* 周期脉冲触发 *
;****************
TF13:   MOV     A,32H           ;读取周期触发脉冲计数器
        INC     32H             ;21H="0",调功触发计数器加一
        JB      29H,TF10
        CLR     29H             ;29H←"0",当前周期触发开
        CJNE    A,31H,TF10      ;未到开周期设定数
        SETB    29H             ;29H←"1",当前周期触发关
TF10:   CJNE    A,#20,TF11      ;未到周期
        MOV     32H,#00         ;加载周期触发脉冲计数器
        CLR     29H             ;29H←"0",当前周期触发开
;
TF11:   JB      29H,TOFF2       ;29H="1",调功间隙,禁止触发
        CLR     P3.3            3.3←"0",调功触发脉冲前沿
;
TOFF2:  JNB     24H,TOFF3       ;24H="0",开1关,转TOFF3
        CLR     P3.4            3.4←"0",开1触发脉冲前沿
;
TOFF3:  JNB     26H,TOFF4       ;26H="0",开2关,转TOFF4
        CLR     P3.5            ;P3.5←"0",开2触发脉冲前沿
;
TOFF4:  MOV     R7,#50          ;设置100us触发脉宽软件延时
WAIT:   DJNZ    R7,WAIT         ;产生100us触发脉宽
        SETB    P3.3            ;P3.3←"1",调功触发脉冲后沿
        SETB    P3.4            ;P3.4←"1",开1触发脉冲后沿
        SETB    P3.5            ;P3.5←"1",开2触发脉冲后沿
;
        POP     ACC             ;ACC出栈
        POP     PSW             ;PSW出栈=【恢复进栈前寄存器区】
        RETI                    ;外部中断返回
;
        END




使用特权

评论回复
9
turf123| | 2013-7-21 01:51 | 只看该作者
你也没说灯是直流电还是交流电。直流电用比较器+三角波生成硬件PWM就行了。

使用特权

评论回复
10
小财迷|  楼主 | 2013-7-21 10:43 | 只看该作者
我的电路图在附件,这个电路图需要什么零点检测电路吗

图形.jpg (375.51 KB )

图形.jpg

使用特权

评论回复
11
小财迷|  楼主 | 2013-7-21 10:49 | 只看该作者
turf123 发表于 2013-7-21 01:51
你也没说灯是直流电还是交流电。直流电用比较器+三角波生成硬件PWM就行了。 ...

需要零点检测电路不

使用特权

评论回复
12
tyw| | 2013-7-21 11:25 | 只看该作者
本帖最后由 tyw 于 2013-7-21 11:36 编辑

需要的.

单片机的调光控制器设计.pdf (493.29 KB)

单片机的调光控制器设计1 调光控制器设计
    在日常生活中,我们常常需要对灯光的亮度进行调节。本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。所以需要在交流电的每个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。
    调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。
    这就要求要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。
1.1 硬件部分
    本调光控制器的框图如下:

    控制部分:为了便于灵活设计,选择可多次写入的可编程器件,这里选用的是ATMEL的AT89C51单片机。
    驱动部分:由于要驱动的是交流,所以可以用继电器或光耦+可控硅(晶闸管SCR)来驱动。继电器由于是机械动作,响应速度慢,不能满足其需要。可控硅在电路中能够实现交流电的无触点控制,以小电流控制大电流,并且不象继电器那样控制时有火花产生,而且动作快、寿命长、可靠性高。所以这里选用的是可控硅。
    负载部分:本电路只能控制白炽灯(纯阻负载)的亮度。
1.2 软件部分
    要控制的对象是50Hz的正弦交流电,通过光耦取出其过零点的信号(同步信号),将这个信号送至单片机的外中断,单片机每接收到这个同步信号后启动一个延时程序,延时的具体时间由按键来改变。当延时结束时,单片机产生触发信号,通过它让可控硅导通,电流经过可控硅流过白炽灯,使灯发光。延时越长,亮的时间就越短,灯的亮度越暗(并不会有闪烁的感觉,因为重复的频率为100Hz,且人的视觉有暂留效应)。由于延时的长短是由按键决定的,所以实际上就是按键控制了光的强弱。
    理论上讲,延时时间应该可以是0~10ms内的任意值。在程序中,将一个周期均分成N等份,每次按键只需要去改变其等份数,在这里,N越大越好,但由于受到单片机本身的限制和基于实际必要性的考虑,只需要分成大约100份左右即可,实际采用的值是95。
    可控硅的触发脉冲宽度要根据具体的光耦结合示波器观察而定,在本设计中取20 μs。程序中使用T1来控制这个时间。
    对两个调光按键的处理有两种方式:一种是每次按键,无论时间的长短,都只调整一个台阶(亮或暗);另一种是随按键时间的不同,调整方法不同:短按只调整一个台阶,长按可以连续调整。如前面所述,由于本设计中的台阶数为95(N=95),如果使用前一种方式,操作太麻烦,所以用后者较为合理。
2 各单元电路及说明
2.1 交流电压过零点信号提取
    交流电压过零点信号提取电路如图2所示,图中的同步信号就是我们需要的交流电压过零点信号。各部分波形如图3所示。

    图中整流后波形中的水平虚线表示光藕P52l输入二极管的门限电压。P521是TLP521的简称,下图是其引脚图。引脚图中器件名的后缀“-1”表示包含一组光藕。

2. 2 主控单元

    主控单元以AT89C51单片机为核心,交流电压过零点信号提取电路中产生的同步信号SYN接到AT89C5l的INT0,此信号的下降沿将使AT89-C51产生中断,以此为延时时间的起点。
    三个按键只用于控制一路灯:一个为开关,另外两个分别为提高亮度和降低亮度。
    74HC573用于输出控制可控硅的导通的触发信号。
    220V交流主电源导通区间、同步信号和触发信号的时序关系如图6所示。


    图中的阴影部分表示可控硅的导通区间,它的大小决定了灯的亮度。改变延时时间可改变触发信号和同步信号的相位关系,也改变了可控硅的导通区间的大小,达到调光的目的。
2.3 驱动单元

    图中,L1_D是单片机输出的触发信号,该信号通过光控可控硅MOC3022去驱动可控硅T435。受控的白炽灯接在Ll和零线(图中未画出)之间。
    MOC3022是DIP-6封装的光控可控硅。其1、2脚分别为二极管的正、负极:4、6脚为输出回路的两端;3、5脚不用连接。如图8所示。

    T435-400是可控硅,“4”表示主回路电流是4A;“35”表示触发端的最大电流是35mA,一般该端有最大电流的5%就可保证可靠地触发。T435-400外型图如图9所示。
3 程序流程图
4 结束语
    本控制器使用了三个开关控制一路灯,主要是为了在教学过程中降低难度。也可改为一个开关控制一路灯,比如短按为开、关,第一次长按为降低亮度,连续的第二次长按为提高亮度等。电路不用改动,只需修改程序即可。
    学生通过制作该调光控制器,可以掌握单片机、光藕和可控硅等方面的知识和使用技能,特别是后两者,学生较少接触。由于该调光控制器调光的效果比较好,对提高学生的学习兴趣有很大帮助,教学效果良好。

使用特权

评论回复
13
叶伤| | 2013-7-21 18:31 | 只看该作者
貌似为了忠实题意(题目暗含声音变化亮度也变化,即会闪烁)maychang大神说得不错,再来个339进行最大值比较,达到最大值就用一个触发器锁定,完美。不用编程什么的麻烦事,就是焊接麻烦。

如果是单片机试题,T叔是大行家,嘿嘿

使用特权

评论回复
14
pang7| | 2013-7-21 20:11 | 只看该作者
果断mark

使用特权

评论回复
15
双壳蜗牛| | 2013-7-22 10:47 | 只看该作者
不错,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

55

帖子

0

粉丝