单片机远程同步灯电路+程序
扫描二维码
随时随地手机看文章
1.概述
远程同步灯系统能够在300米的距离内实现多个单片机控制器的同步功能。整个同步系统分为三大组成部分:单片机控制器、LED灯板以及同步信号传输线路。
系统框架如下所示:
2.各部分组成
1)单片机控制器
使用飞利浦P89C52单片机作为主控芯片。在300米的传输线路上由一台控制器作为产生同步信号的主机,其余多台控制器作为从机,接收从主机传送来的同步信号。主机发送一次同步信号,所有控制器进行一次同步操作。
每一个控制器由89C52的最小系统加4个驱动芯片ULN2003组成,图2和图3显示出具体的电路构成和连接方式。带上驱动芯片后,一个控制器就可以同时驱动24盏LED灯。
2)LED灯板
每一块LED灯板带24个LED灯,分为8组,每组有红绿蓝灯珠各一颗,即为8*3=24颗。每一颗灯珠带300欧姆限流电阻。(参见图3)
3)同步信号传输线路
远程传输线路由传输导线和信号输出、信号输入端三部分组成。其中,主机与信号输出端相连,各个从机与各自的信号输入端相连。由于传输距离较远,我们需要将传输电压抬高至30伏特左右。具体输出端(升压)和输入端(降压)电路由图4与图5所示。
附加说明:在图4与图5的接口之间,可以接双绞线作为同步信号的传输介质。
3.同步系统软件设计流程
1)问题的提出
单片机的运行速度是不同的。即使是同一型号的单片机在同一频率标识的晶振下,同时上电开始运行同样的程序,也不可能做到精确的同步。这种运行速度的差异性一开始可能不会被察觉,但是当系统运行时间久了之后,各个单片机之间的运行速度的差异性就会逐渐积累起来,一直能够累计到我们不能容忍的程序。
因此,我们必须在这些的差异积累到一定程度之前,使所有的单片机在同一时刻运行到同样的程序位置,这样就可以清零正在积累的差异性,达到运行长时间都能够同步的效果。
2)程序流程图
初步设计同步系统中的主机和从机运行一轮效果(6个不同的灯光效果)之后,进行一次同步操作。用16MHZ晶振的实际测量效果是运行完一轮的时间为1分20秒左右。在进行同步操作之前,主机与从机运行相同的程序,以尽量减少不同程序引起的时间差异;在运行完6个效果之后,所有从机立刻进入等待状态,不断查询中断标志。而主机则在运行完效果之后再运行一段延时程序,这样做的目的,是有意造成主从之间的快慢差异--主机慢,从机快。这样从机就可以有充分的时间来响应由主机发送过来的同步信号,消除之前积累的各个单片机实际运行的速度差异。流程图如图6所示。
通过实际测量,我们在300米距离内运行10台控制器,并进行了24小时的同步测试,运行效果良好,可以达到预期目的。
4.实测同步系统特性参数
1)远程同步信号传输线路电路基本参数
传输电压:30v
传输电流:0.04A(介质为双绞网线,长度300米)
消耗功率:1.2w
2)单片控制器及灯板功耗:5w
3)最大可同步距离:500米
4)最大可同步控制器数:待测
附录A: 材料清单
从机材料清单
PART1、2电源部分:
器件种类
标号
型号参数
封装
数量
桥堆
D2
DB107
直插
1
高速开关
U6
LM2576
TO-263
1
二极管
D1
IN8175
DIODE-0.4
1
电感
L1
100uH
直插
1
电容
C1
47Uf
直插
1
电容
C2
220uF
直插
1
电容
C4
100nF
贴片0603
1
电阻
R26
3K
0805
1
电阻
R27
1K
0805
1
PART3单片机最小系统
单片机
U1
P89S52XBN
DIP40
1
晶振
Y1
16MHz
RAD0.2
1
电阻
R28
10K
AXIAL-0.3
1
电容
C3
47uF
直插
1
电容
C5C6
33pF
AXIAL-0.3
2
PART4普通IO口上拉电阻
电阻
R1-----R25
1K
贴片0805
25
PART5同步信号接收电路
三极管
Q1
9015
SOT54
1
可控硅
Q2
100-6
SOT54
1
电阻
R29
300欧姆
0805
1
电阻
R30
5.1K
0805
1
电阻
R31、R32
1K
0805
2
电阻
R33
10K
0805
1
PART6 LED驱动
驱动芯片
U2------U5
ULN2003
SOP16
4
主机材料清单
PART1、2电源部分:
器件种类
标号
型号参数
封装
数量
桥堆
D2
DB107
直插
1
高速开关
U6
LM2576
TO-263
1
二极管
D1
IN8175
DIODE-0.4
1
电感
L1
100uH
直插
1
电容
C1
47uF
直插
1
电容
C2
220uF
直插
1
电容
C4
100nF
贴片0603
1
电阻
R26
3K
0805
1
电阻
R27
1K
0805
1
PART3单片机最小系统
单片机
U1
P89S52XBN
DIP40
1
晶振
Y1
16MHz
RAD0.2
1
电阻
R28
10K
AXIAL-0.3
1
电容
C3
47uF
直插
1
电容
C5、C6
33pF
AXIAL-0.3
2
PART4普通IO口上拉电阻
电阻
R1-----R25
1K
贴片0805
25
PART5同步信号发生电路
三极管
Q1
9015
SOT54
1
可控硅
Q2
100-6
SOT54
1
电阻
R29
10K
0805
1
电阻
R30
5.1K
0805
1
电阻
R31
1K
0805
1
PART6 LED驱动
驱动芯片
U2------U5
ULN2003
SOP16
4
程序说明:主机与从机程序尽可能一样,避免运行不同程序带来的不同步效果。
主机只发送同步信号,以自己的时钟运行 从机接收同步信号,
在约定的时间开始查询中断,体现“快等慢”这一原则
附录B:试验程序清单
主机程序:
//============================
// 主机程序
//
//============================
#include"myhead.h"
sbit P36=P3^6;
bit flag;
void main(void)
{
uchar i;
flag=0;
P36=1;
P0=0x00;
P1=0x00;
P2=0x00;
EA=0;
IT0=1; //主机本身不中响应断
EX0=0;
while(1)
{
for(i=0;i<5;i++)
RGBjianbian();
lable: for(i=0;i<5;i++)
RGBjianbian();
for(i=0;i<5;i++)
zhuizhu();
for(i=0;i<5;i++)
liushui();
for(i=0;i<5;i++)
shanshuo();
for(i=0;i<5;i++)
kaolong();
for(i=0;i<5;i++)
liushui2();
delay2();
P36=0;
flag=0;
flag=0;
flag=0;
flag=0;
goto lable;
}
}
void delay(void)
{
uchar i,j;
for(i=0;i<MAX;i++)
{ for(j=0;j<MAX;j++)
;
}
}
效果程序略
从机程序:
#include"myhead.h"
sbit P36=P3^6;
bit flag;
void main(void)
{
uchar i;
flag=0;
P36=1;
P0=0x00;
P1=0x00;
P2=0x00;
IT0=1; //下降沿触发
EX0=1;
EA=1;
while(1)
{
for(i=0;i<5;i++)
RGBjianbian();
lable: for(i=0;i<5;i++)
RGBjianbian();
for(i=0;i<5;i++)
zhuizhu();
for(i=0;i<5;i++)
liushui();
for(i=0;i<5;i++)
shanshuo();
for(i=0;i<5;i++)
kaolong();
for(i=0;i<5;i++)
liushui2();
flag=0;
flag=0;
while(flag==0)
{ ; }
flag=0;
goto lable;
}
}
void delay(void)
{
uchar i,j;
for(i=0;i<MAX;i++)
{ for(j=0;j<MAX;j++)
;
}
}
效果程序略
void interrupt0(void) interrupt 0 using 2
{
flag=1;
}