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
電容
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
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
程序說明:主機與從機程序盡可能一樣,避免運行不同程序帶來的不同步效果。
主機只發送同步信號,以自己的時鐘運行 從機接收同步信號,
在約定的時間開始查詢中斷,體現“快等慢”這一原則
程序下載: http://www.zg4o1577.cn/f/tbdd.rar
燈光效果子程序見:http://www.zg4o1577.cn/mcu/1178.html
附錄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; }