基于51單片機(jī)的設(shè)計(jì)(花樣流水燈、交通燈控制系統(tǒng)、變頻調(diào)速控制系統(tǒng)、呼吸燈)


基于51單片機(jī)設(shè)計(jì)的花樣流水燈設(shè)計(jì)
一、項(xiàng)目介紹
花樣流水燈是一種常見的LED燈效果,被廣泛應(yīng)用于舞臺(tái)表演、節(jié)日慶典、晚會(huì)演出等場(chǎng)合。在現(xiàn)代智能家居、電子產(chǎn)品中,花樣流水燈也被廣泛使用,通過(guò)調(diào)整亮滅順序和時(shí)間,可以實(shí)現(xiàn)各種炫酷的燈光效果,增強(qiáng)用戶體驗(yàn)。而51單片機(jī)作為一種常見的嵌入式開發(fā)平臺(tái),具有體積小、功耗低、可編程性強(qiáng)等優(yōu)點(diǎn),非常適合用于開發(fā)花樣流水燈及其他嵌入式應(yīng)用。
以下場(chǎng)景中流水燈得到了廣泛的應(yīng)用:
舞臺(tái)表演:花樣流水燈可用于舞臺(tái)背景、音樂(lè)MV等場(chǎng)合,配合音樂(lè)和舞蹈,營(yíng)造出炫酷、動(dòng)感的視覺(jué)效果。
節(jié)日慶典:在傳統(tǒng)節(jié)日如春節(jié)、中秋節(jié)等場(chǎng)合,花樣流水燈可以用于燈籠、彩燈等裝飾,為節(jié)日增添喜慶氛圍。
晚會(huì)演出:在各種晚會(huì)、派對(duì)、聚會(huì)等場(chǎng)合,花樣流水燈可以用于舞臺(tái)效果、音樂(lè)燈光秀等,增強(qiáng)整個(gè)活動(dòng)的氛圍和趣味性。
智能家居:花樣流水燈可以使用在居家燈光控制中,實(shí)現(xiàn)遠(yuǎn)程控制、定時(shí)開關(guān)、自動(dòng)調(diào)節(jié)等功能,提升居住環(huán)境的科技感和人性化。
二、設(shè)計(jì)原理
2.1 基本原理
花樣流水燈是一種常見的LED燈效果,通常由多個(gè)LED燈組成,通過(guò)控制每個(gè)LED燈的亮滅順序和時(shí)間,實(shí)現(xiàn)花樣流水燈的效果。在51單片機(jī)中,可以使用定時(shí)器和端口控制來(lái)實(shí)現(xiàn)這一效果。
2.2 硬件搭建
為了實(shí)現(xiàn)花樣流水燈,需要將多個(gè)LED燈按照一定的順序連接到51單片機(jī)的IO引腳上。電路設(shè)計(jì)上,為每個(gè)LED燈配備一個(gè)電阻,并將它們連接到5V電源引腳和地線上。
具體硬件搭建方法如下:
(1)將多個(gè)LED燈依次連接起來(lái)組成一個(gè)電路鏈,將第一個(gè)LED的正極接到P1.0口,第二個(gè)LED的正極接到P1.1口,第三個(gè)LED的正極接到P1.2口,以此類推,一共連接7個(gè)LED燈。
(2)為每個(gè)LED燈配備一個(gè)適當(dāng)?shù)碾娮瑁脕?lái)限制電流,防止損壞LED。
(3)將每個(gè)LED的負(fù)極連接到5V電源引腳附近的地線上,形成一個(gè)完整的電路。
2.3 軟件實(shí)現(xiàn)
在軟件實(shí)現(xiàn)上,使用51單片機(jī)的定時(shí)器和端口控制來(lái)控制LED燈的亮滅順序和時(shí)間。
具體方法如下:
(1)設(shè)置一個(gè)計(jì)數(shù)器變量count,用來(lái)保存當(dāng)前亮起的LED燈的編號(hào)(從0開始)。
(2)在定時(shí)器中斷處理函數(shù)中,每次計(jì)數(shù)器溢出時(shí),將當(dāng)前亮起的LED燈熄滅,并將count加1;當(dāng)count等于LED燈總數(shù)時(shí),將count重置為0。
(3)然后,再將下一個(gè)LED燈亮起,以此類推。
(4)通過(guò)控制定時(shí)器的計(jì)數(shù)周期和每個(gè)燈亮起的時(shí)間,可以調(diào)整花樣流水燈的效果。
三、代碼實(shí)現(xiàn)
3.1 流水燈代碼實(shí)現(xiàn)1
#include
#define LED_NUM 8 // LED燈總數(shù)
#define TIMER_TICK 500 // 定時(shí)器計(jì)數(shù)初值,控制亮滅時(shí)間
#define HIGH 0 // 高電平
#define LOW 1 // 低電平
unsigned int count = 0;
// 定時(shí)器中斷處理函數(shù)
void TimerInterrupt() interrupt 1
{
static unsigned long tick = 0;
tick++;
if (tick >= TIMER_TICK)
{
P1 &= ~(1 << count); // 熄滅當(dāng)前LED
count++; // 切換到下一個(gè)LED
if (count >= LED_NUM)
{
count = 0; // 重置計(jì)數(shù)器
}
P1 |= (1 << count); // 亮起下一個(gè)LED
tick = 0; // 重置計(jì)時(shí)器
}
}
// 主函數(shù)
void main()
{
unsigned int i;
P1 = 0xFF; // 所有IO口初始化為高電平
TMOD |= 0x01; // 定時(shí)器0,模式1,16位自動(dòng)重載
TH0 = (65536 - TIMER_TICK) / 256;
TL0 = (65536 - TIMER_TICK) % 256;
ET0 = 1; // 定時(shí)器中斷允許
EA = 1; // 總中斷允許
TR0 = 1; // 定時(shí)器開始計(jì)數(shù)
while (1)
{
// 等待中斷事件
}
}
3.2 流水燈實(shí)現(xiàn)效果2
【1】逐個(gè)點(diǎn)亮
#include
void Delay(unsigned int t) // 延時(shí)函數(shù)
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void main()
{
while (1)
{
unsigned char i; // 定義計(jì)數(shù)器i
for (i = 0; i < 8; i++) // 循環(huán)8次,依次點(diǎn)亮LED燈
{
P0 = ~(1 << i); // 通過(guò)位運(yùn)算生成控制信號(hào),輸出到P0口,控制LED燈點(diǎn)亮
Delay(500); // 延時(shí)500ms
}
}
}
【2】逐個(gè)熄滅
#include
void Delay(unsigned int t) // 延時(shí)函數(shù)
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void main()
{
while (1)
{
unsigned char i; // 定義計(jì)數(shù)器i
for (i = 7; i < 8; i--) // 循環(huán)8次,依次熄滅LED燈
{
P0 = ~(1 << i); // 通過(guò)位運(yùn)算生成控制信號(hào),輸出到P0口,控制LED燈熄滅
Delay(500); // 延時(shí)500ms
}
}
}
【3】來(lái)回流動(dòng)
#include
void Delay(unsigned int t) // 延時(shí)函數(shù)
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void main()
{
while (1)
{
unsigned char i; // 定義計(jì)數(shù)器i
for (i = 0; i < 8; i++) // 循環(huán)8次,依次點(diǎn)亮LED燈
{
P0 = ~(1 << i); // 通過(guò)位運(yùn)算生成控制信號(hào),輸出到P0口,控制LED燈點(diǎn)亮
Delay(500); // 延時(shí)500ms
}
for (i = 6; i > 0; i--) // 循環(huán)6次,依次熄滅LED燈
{
P0 = ~(1 << i); // 通過(guò)位運(yùn)算生成控制信號(hào),輸出到P0口,控制LED燈熄滅
Delay(500); // 延時(shí)500ms
}
}
}
3.3 閃光燈的實(shí)現(xiàn)
下面是三個(gè)不同的閃光燈效果的代碼,分別為常亮、快閃和慢閃。
【1】常亮閃光燈
#include
sbit LED = P1 ^ 0;
void main() {
while (1) {
LED = 0; // LED常亮
}
}
【2】快閃閃光燈
#include
sbit LED = P1 ^ 0;
void delay(unsigned int i) {
while (i--);
}
void main() {
while (1) {
LED = 0; // LED亮
delay(50000); // 延時(shí)一段時(shí)間
LED = 1; // LED滅
delay(50000); // 延時(shí)一段時(shí)間
}
}
【2】慢閃閃光燈
#include
sbit LED = P1 ^ 0;
void delay(unsigned int i) {
while (i--);
}
void main() {
while (1) {
LED = 0; // LED亮
delay(100000); // 延時(shí)一段時(shí)間
LED = 1; // LED滅
delay(100000); // 延時(shí)一段時(shí)間
}
}
以上三個(gè)代碼中,都使用了P1口的第0位來(lái)控制LED燈的亮滅。其中,第一個(gè)代碼是常亮閃光燈,只需要將LED置為0。第二個(gè)代碼是快閃閃光燈,使用了一個(gè)delay函數(shù)來(lái)實(shí)現(xiàn)延時(shí),每次延時(shí)50000個(gè)時(shí)鐘周期,即約為500ms。第三個(gè)代碼是慢閃閃光燈,與第二個(gè)代碼類似,只是將延時(shí)時(shí)間改為了100000個(gè)時(shí)鐘周期,即約為1s。
基于51單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)
第一章 硬件設(shè)計(jì)與原理
以AT89C51單片機(jī)為核心,起著控制作用。系統(tǒng)包括數(shù)碼管顯示電路、復(fù)位電路、時(shí)鐘電路、發(fā)光二級(jí)管電路和按鍵電路。設(shè)計(jì)思路分為六個(gè)模塊:復(fù)位電路、晶振電路模塊、AT89C51、數(shù)碼管顯示電路、發(fā)光二級(jí)管電路和按鍵電路這六個(gè)模塊。
1.2 硬件設(shè)計(jì)分析
1.2.1 電源的設(shè)計(jì)
系統(tǒng)電源使用直流5伏。
由電腦USB接口提供電源。
USB是通用串行總線(Universal Serial Bus)接口的簡(jiǎn)稱。它是目前使用比較廣泛的電腦接口之一,主要版本有1.0、1.1和最新的2.0三種版本。根據(jù)USB總線的工業(yè)標(biāo)準(zhǔn),它可以提供額定功率為5V/500mA的電源供USB設(shè)備使用。
1.2.2 單片機(jī)最小系統(tǒng)
51單片機(jī)是對(duì)目前所有兼容intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是intel的8031單片機(jī),后來(lái)隨著技術(shù)的發(fā)展,成為目前廣泛應(yīng)用的8為單片機(jī)之一。單片機(jī)是在一塊芯片內(nèi)集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O口等計(jì)算機(jī)所需要的基本功能部件的大規(guī)模集成電路,又稱為MCU。51系列單片機(jī)內(nèi)包含以下幾個(gè)部件:
一個(gè)8位CPU;一個(gè)片內(nèi)振蕩器及時(shí)鐘電路;
4KB的ROM程序存儲(chǔ)器;
一個(gè)128B的RAM數(shù)據(jù)存儲(chǔ)器;
尋址64KB外部數(shù)據(jù)存儲(chǔ)器和64KB外部程序存儲(chǔ)空間的控制電路;
32條可編程的I/O口線;
兩個(gè)16位定時(shí)/計(jì)數(shù)器;
一個(gè)可編程全雙工串行口;
5個(gè)中斷源、兩個(gè)優(yōu)先級(jí)嵌套中斷結(jié)構(gòu)。
如圖1-2-1所示為AT89C51單片機(jī)基本構(gòu)造,其基本性能介紹如下:
AT89C51本身內(nèi)含40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中端口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,STC89C51RC可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲(chǔ)器可有效地降低開發(fā)成本。
AT89C51的主要特性如下表所示:
AT89C51為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19腳)和XTAL2(18腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40腳)和VSS(20腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0端口(32~39腳)被定義為N1功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13腳定義為IR輸入端,10腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12腳、27腳及28腳定義為握手信號(hào)功能端口,連接主板CPU的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。
P0口:P0口是一組8位漏極開路型雙向I/O 口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口P0寫“1”時(shí),可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在Flash 編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。
P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。與AT89C51不同之處是,P1.0和P1.1還可分別作為定時(shí)/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和輸入(P1.1/T2EX)。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。
P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口P2寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX @RI指令)時(shí),P2口輸出P2鎖存器的內(nèi)容。Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。
P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能P3口還接收一些用于Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)AL脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條 MOVX 和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。
PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。
EA/VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。
XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
單片機(jī)最小系統(tǒng)說(shuō)明:
時(shí)鐘信號(hào)的產(chǎn)生:在MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,這就是單片機(jī)的時(shí)鐘振蕩電路。
時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過(guò)觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。
一般地,電容C2和C3取30pF左右,晶體的振蕩頻率范圍是1.2-12MHz。如果晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)的運(yùn)行速度也就快。
單片機(jī)復(fù)位使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài)下,并從這個(gè)狀態(tài)開始工作。單片機(jī)復(fù)位條件:必須使9腳加上持續(xù)兩個(gè)機(jī)器周期(即24個(gè)振蕩周期)的高電平。
1.2.3 顯示系統(tǒng)
數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。
數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管。共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。
數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來(lái)驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類。
1) 靜態(tài)顯示驅(qū)動(dòng):靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來(lái)驅(qū)動(dòng)(要知道一個(gè)89C51單片機(jī)可用的I/O端口才32個(gè)呢),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。
2) 動(dòng)態(tài)顯示驅(qū)動(dòng):數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。
本設(shè)計(jì)中數(shù)碼管采用的是動(dòng)態(tài)驅(qū)動(dòng)方式。
1.2.4 發(fā)光二級(jí)管電路
1.2.5 按鍵電路
第二章 軟件設(shè)計(jì)與分析
2.1 軟件設(shè)計(jì)的組成
該系統(tǒng)由延時(shí)子函數(shù)、數(shù)碼管顯示子函數(shù)、定時(shí)器0中斷子函數(shù)、主函數(shù)和數(shù)據(jù)定義這幾部分組成。
//----------------------------------------------------------------------//
上傳過(guò)程感覺(jué)繁瑣,里面可能有不全面的地方,請(qǐng)見諒。下面的是實(shí)現(xiàn)的目的。以及電路原理圖
**本次設(shè)計(jì)的主要目的是設(shè)計(jì)一個(gè)城市十字路口的交通燈控制系統(tǒng),設(shè)計(jì)中將交通燈控制系統(tǒng)分為東西方向(主干道)和南北方向(次干道)兩個(gè)方向,且在東西南北四個(gè)路口的每個(gè)路口設(shè)置紅、綠、黃三個(gè)交通信號(hào)燈(用發(fā)光二極管模擬)和一個(gè)二位的LED數(shù)碼顯示管。設(shè)計(jì)的要求是規(guī)定在每一段時(shí)間內(nèi)東西和南北兩個(gè)方向中只有一個(gè)方向能夠通行,另一個(gè)方向處于禁行狀態(tài),然后在經(jīng)過(guò)一段時(shí)間后,禁行的方向和通行的方向互相轉(zhuǎn)換狀態(tài),原來(lái)通行的狀態(tài)變禁行狀態(tài),原來(lái)禁行的狀態(tài)變?yōu)橥ㄐ袪顟B(tài),如此循環(huán)下去。詳細(xì)過(guò)程如下圖2-1:
狀態(tài)① 狀態(tài)②
狀態(tài)①:東西方向的交通燈黃燈閃爍3秒后,紅燈熄滅,綠燈點(diǎn)亮(東西方向允許車輛和行人通行),同時(shí)南北方向綠燈熄滅,紅燈點(diǎn)亮(南北方向禁止車輛和行人通行),LED數(shù)碼管倒計(jì)時(shí)顯示40秒,在倒計(jì)時(shí)3秒時(shí)進(jìn)入狀態(tài)②。
狀態(tài)②:南北方向黃燈閃爍3秒后,紅燈熄滅綠燈點(diǎn)亮(南北允許車輛和行人通行);同時(shí)東西方向綠燈熄滅,紅燈點(diǎn)亮
(東西方向禁止車輛和行人通行),LED數(shù)碼管倒計(jì)時(shí)顯示40秒,在倒計(jì)時(shí)3秒時(shí)進(jìn)入狀態(tài)①。
接下來(lái)在沒(méi)有人為干涉下將會(huì)一直按照上述進(jìn)行循環(huán)。設(shè)計(jì)中還外設(shè)6個(gè)按鍵實(shí)現(xiàn)對(duì)交通燈控制系統(tǒng)的調(diào)控作用。
采用AT89C51單片機(jī)設(shè)計(jì)的變頻調(diào)速控制系統(tǒng)
摘 要:本文介紹了一種由AT89C51單片機(jī)為主控制器的變頻調(diào)速系統(tǒng),采用SA8281作為正弦波發(fā)生器。主回路采用交-直-交電壓型變頻電路。在論述系統(tǒng)的硬件結(jié)構(gòu)及軟件設(shè)計(jì)基礎(chǔ)之上,并給出了主要程序的流程圖。實(shí)踐表明:該系統(tǒng)可靠性高,組配靈活,具有很好的應(yīng)用前景。
1.概述
在電氣傳動(dòng)領(lǐng)域中,隨著自關(guān)斷器件技術(shù)水平的不斷提高,脈寬調(diào)制技術(shù)(簡(jiǎn)稱PWM技術(shù))也日趨成熟。PMW交流變頻調(diào)速以其高效率、高功率因數(shù)、輸出波形好、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn),在井下風(fēng)機(jī)、水泵、造紙機(jī)等設(shè)備中得到了廣泛的應(yīng)用。將單片機(jī)應(yīng)用于交流變頻調(diào)速系統(tǒng),可有效地避免傳統(tǒng)調(diào)速方案中的一些缺點(diǎn),達(dá)到了提高控制精度的目的[1],其特點(diǎn):
(1)采用單片機(jī)可以使絕大多數(shù)控制邏輯通過(guò)軟件實(shí)現(xiàn),簡(jiǎn)化了電路。
(2)單片機(jī)具有更強(qiáng)的邏輯功能,運(yùn)算速度快,精度高,有大容量的存儲(chǔ)單元,可以實(shí)現(xiàn)較為復(fù)雜的控制。
(3)無(wú)零點(diǎn)漂移,控制精度高。
(4)可以提供人機(jī)界面,多機(jī)連網(wǎng)工作。
根據(jù)國(guó)內(nèi)外有關(guān)變頻調(diào)速的最新研究成果及研究動(dòng)向,參閱大量的文獻(xiàn)、資料,本著先進(jìn)性與成熟性兼顧、標(biāo)準(zhǔn)化、可靠性、連續(xù)性、及時(shí)性的系統(tǒng)設(shè)計(jì)原則,設(shè)計(jì)了如圖1所示的系統(tǒng)結(jié)構(gòu)框圖。
整個(gè)電路分為三大部分:主回路、驅(qū)動(dòng)電路以及用單片機(jī)控制PWM產(chǎn)生器的控制電路,另外還有過(guò)流檢測(cè)和保護(hù)電路,這樣使得系統(tǒng)工作更穩(wěn)定、可靠。
2.系統(tǒng)主回路設(shè)計(jì)
2.1整流濾波電路的設(shè)計(jì)
為了給逆變器提供一個(gè)穩(wěn)定的直流電壓,需要將電網(wǎng)輸入的交流電進(jìn)行整流。通常整流電路可分為可控整流和不可控整流??煽卣骺梢允瓜到y(tǒng)的功率因數(shù)接近l,并且具有較小的紋波,頻率高,可降低較小幅值的濾波電容。但是采用可控整流電路會(huì)使得系統(tǒng)成本上升,并且控制電路復(fù)雜。
目前比較經(jīng)濟(jì)可靠的方案,一般都是采用二極管整流,使電網(wǎng)功率因數(shù)與逆變輸出電壓無(wú)關(guān)而接近于1。在本系統(tǒng)中,我們采用了三相二極管不可控整流,如圖2所示,采用它無(wú)需控制電路驅(qū)動(dòng),電路簡(jiǎn)單、可靠,成本低,缺點(diǎn)就是紋波較大,需采用較大幅值的濾波電容。
2.2 三相逆變電路的設(shè)計(jì)
三相交流負(fù)載需要三相逆變器,在三相逆變電路中,應(yīng)用最廣的是三相橋式逆變電路[2]。采用IGBT作為可控元件的電壓型三相逆變電路如圖3所示,可以看出電路由三個(gè)半橋組成。
電壓型三相逆變橋的基本工作方式與單相逆變橋相同,是 導(dǎo)電方式,即每個(gè)橋臂的導(dǎo)電角度為 ,同一相(同一半橋)上下兩個(gè)臂交替導(dǎo)電,各相開始導(dǎo)電的時(shí)間依次相差 。這樣,在任一瞬間,將有三個(gè)橋臂同時(shí)導(dǎo)通??赡苁巧厦嬉粋€(gè)臂,下面兩個(gè)臂,也可能是上面兩個(gè)臂下面一個(gè)臂同時(shí)導(dǎo)通。因?yàn)槊看螕Q流都是在同一相上下兩個(gè)橋臂之間進(jìn)行的,因此,也被稱為縱向換流。用T記為周期,只要注意三相之間互隔T/3(T是周期)就可以了,即B相比A相滯后T/3,C相又比B相滯后T/3。
具體的導(dǎo)通順序如下:
第1個(gè)T/6:V1,V6,V5導(dǎo)通,V4,V3,V2截至;第2個(gè)T/6:Vl,V6,V2導(dǎo)通,V4,V3,V5截至;
第3個(gè)T/6:V1,V3,V2導(dǎo)通,V4,V6,V5截至;第4個(gè)T/6:V4,V3,V2導(dǎo)通,V1,V6,V5截至;
第5個(gè)T/6:V4,V3,V5導(dǎo)通,V1,V6,V2截至;第6個(gè)T/6:V4,V6,V5導(dǎo)通,V1,V3,V2截至。
3 驅(qū)動(dòng)電路及系統(tǒng)保護(hù)電路的設(shè)計(jì)
3.1 驅(qū)動(dòng)電路的設(shè)計(jì)
作為功率開關(guān)器件,IGBT的工作狀態(tài)直接關(guān)系到整機(jī)的性能,所以選擇或設(shè)計(jì)合理的驅(qū)動(dòng)電路顯得尤為重要。采用一個(gè)性能良好的驅(qū)動(dòng)電路,可使IGBT工作在比較理想的開關(guān)狀態(tài),縮短開關(guān)時(shí)間,減小開關(guān)損耗,對(duì)提高整個(gè)裝置的運(yùn)行效率,可靠性和安全性都有重要的意義。
驅(qū)動(dòng)電路必須具備兩個(gè)功能:一是實(shí)現(xiàn)控制電路與被驅(qū)動(dòng)IGBT柵極的電隔離;二是提供合適的柵極驅(qū)動(dòng)脈沖[ 3]。
對(duì)驅(qū)動(dòng)電路的要求,可歸納如下:
1)IGBT和MOSFET都是電壓驅(qū)動(dòng),都具有一個(gè)2.5~5V值電壓,有一個(gè)容性輸入阻抗,因此IGBT對(duì)柵極電荷非常敏感,故驅(qū)動(dòng)電路必須很可靠,要保證有一條低阻抗值的放電回路,即驅(qū)動(dòng)電路與IGBT的連線要盡量短。
2)用內(nèi)阻小的驅(qū)動(dòng)源對(duì)柵極電容充放電,以保證柵極控制電壓Uge,有足夠陡的前后沿,使IGBT的開關(guān)損耗盡量小。另外,IGBT開通后,柵極驅(qū)動(dòng)源應(yīng)能提供足夠的功率,使IGBT不退出飽和而損壞。
3)驅(qū)動(dòng)電路要能傳遞幾十kHz的脈沖信號(hào)。
4)在大電感負(fù)載下,IGBT的開關(guān)時(shí)間不能太短,以限制出di/dt形成的尖峰電壓,確保IGBT的安全。
5)IGBT的柵極驅(qū)動(dòng)電路應(yīng)盡可能簡(jiǎn)單實(shí)用,最好自身帶有對(duì)IGBT的保護(hù)功能,有較強(qiáng)的抗干擾能力。
本文采用美國(guó)IR公司推出的IR21lO集成驅(qū)動(dòng)器來(lái)驅(qū)動(dòng)IGBT,它兼有體積小,速度快,電路簡(jiǎn)單的優(yōu)點(diǎn),是中小功率變換裝置中驅(qū)動(dòng)器件的首選品種。
3.2 電流檢測(cè)及過(guò)流保護(hù)電路
當(dāng)流過(guò)IGBT的電流過(guò)流,一旦超出安全區(qū),IGBT將永久損壞,因此系統(tǒng)要設(shè)置電流過(guò)流保護(hù)電路,系統(tǒng)在變頻器的直流部分串電流互感器將電流轉(zhuǎn)換為電壓信號(hào)再通過(guò)比較器比較,將過(guò)流信號(hào)檢測(cè)出來(lái)后,送到SA828l的脈沖封鎖端(電平信號(hào)),那么SA828l就會(huì)停止輸出PWM脈沖,以保護(hù)IGBT。IGBT的過(guò)電流保護(hù)電路如圖5所示。
其中運(yùn)放C814組成電壓跟隨器,其輸入來(lái)自電流互感器的輸出。兩個(gè)電壓比較器C271組成窗口電壓比較器,比較器的輸出經(jīng)施密特反相器連接到與門的輸入端。當(dāng)IGBT沒(méi)有過(guò)電流時(shí),C814的輸入電壓比較低,窗口電壓比較器輸出高電平,因此EN信號(hào)為高電平,使IGBT驅(qū)動(dòng)信號(hào)有效;反之,當(dāng)IGBT過(guò)電流時(shí),EN信號(hào)變?yōu)榈碗娖?,封鎖了IGBT驅(qū)動(dòng)信號(hào)而使IGBT關(guān)斷,調(diào)節(jié)電位器RP,可以改變過(guò)流閥值的大小。
過(guò)壓保護(hù)電路的原理與電流保護(hù)電路類似,另外在主電路上應(yīng)配裝一個(gè)10A的快速熔斷保險(xiǎn),當(dāng)電路發(fā)生嚴(yán)重過(guò)流時(shí),快速熔斷保險(xiǎn)燒斷切斷電網(wǎng)電源,盡可能的保證主電路的安全。
4.控制電路軟硬件設(shè)計(jì)
三相SPWM發(fā)生器是控制電路的核心部分。在本設(shè)計(jì)中,我們選用了AT89C51單片機(jī)控制英國(guó)MITEL公司的專用集成芯片SA8281作為SPWM波形發(fā)生器,該芯片與微處理器接口方便,幾乎不用加任何的邏輯電路即可構(gòu)成完整的SPWM控制電路,結(jié)構(gòu)緊湊,提高了系統(tǒng)的集成度和可靠性,利于降低成本。
4.1 SA8281的功能介紹
SA8281芯片是MITEL公司設(shè)計(jì)的專門為交流電機(jī)的調(diào)速控制,UPS電源以及其他需要脈寬調(diào)制作為一種有效電源控制的電力電子器件[4]。引腳如圖6所示:
它可用于三相PWM波形產(chǎn)生的可編程微機(jī)外圍接口芯片,使用一組標(biāo)準(zhǔn)的MOTEL總線,適用于英特爾和摩托羅拉二種總線接口,接口通用性好,編程和操作簡(jiǎn)單,方便,快捷。
SA8281采用常用的對(duì)稱的雙邊緣采樣法產(chǎn)生全數(shù)字化PWM波形,無(wú)時(shí)漂,無(wú)溫漂,具有很高的精度和溫度穩(wěn)定性。
有6個(gè)標(biāo)準(zhǔn)的TTL電平輸出,用來(lái)驅(qū)動(dòng)逆變器的6個(gè)功率開關(guān)器件。
工作頻率范圍寬,精度高,三角載波頻率可調(diào)。
工作方式靈活,在電路不變的情況下,直接通過(guò)軟件設(shè)定載波頻率、調(diào)制頻率、調(diào)制比、最小脈寬、死區(qū)時(shí)間等工作參數(shù)就可改變逆變器的性能指標(biāo),驅(qū)動(dòng)不同負(fù)載或工作于不同工況??赏ㄟ^(guò)改變輸出SPWM脈沖的相序?qū)崿F(xiàn)電機(jī)的正反轉(zhuǎn),通過(guò)調(diào)制達(dá)到輸出頻率為OHz而給電機(jī)繞組通一直流電,實(shí)現(xiàn)電機(jī)的“直流插入制動(dòng)”。
獨(dú)立閉鎖端可瞬時(shí)閉鎖輸出SPWM脈沖,可處理電機(jī)突發(fā)情況的發(fā)生。
波形存儲(chǔ)在內(nèi)部ROM中,可以選擇可刪除的最小脈寬和死區(qū)時(shí)間。
4.2 控制硬件電路的實(shí)現(xiàn)
控制電路部分采用的單片機(jī)為ATMEL公司推出的AT89C51,它采用CMOS結(jié)構(gòu),耗能低,抗干擾能力強(qiáng),與MCS一5l系列完全兼容,且功能比一般的51系列芯片要強(qiáng)大許多。其內(nèi)部含有128字節(jié)的RAM和4K字節(jié)的EPROM完全滿足系統(tǒng)需要,不用外加RAM或EPROM存放數(shù)據(jù)或程序,但需要設(shè)定和保存的參數(shù)則存放在一片EEPROM中[ 5]。
正弦波發(fā)生器的原理圖如圖7所示,它以SA828l作為三相正弦波的發(fā)生芯片,單片機(jī)AT89C51作為SA8281的控制芯片。SA828l將大部分外圍電路都集成在芯片內(nèi)部,可以看出SA8281與微處理器接口簡(jiǎn)單,控制電路非常簡(jiǎn)單,結(jié)構(gòu)緊湊,這樣做從另一方面來(lái)講對(duì)芯片工作的穩(wěn)定性有很大幫助,提高了可靠性。
從整個(gè)電路來(lái)說(shuō),實(shí)現(xiàn)對(duì)SA828l的控制是通過(guò)按鍵輸入相應(yīng)的信息。本電路的設(shè)計(jì)要對(duì)SA8281輸入初始化參數(shù)和控制參數(shù),所以用到了三個(gè)按鍵0#鍵、1#鍵和2#鍵。在主程序中判斷鍵號(hào)用的是查詢式,0#鍵按下轉(zhuǎn)入初始化子程序:l#鍵按下轉(zhuǎn)入加速子程序:2#鍵按下轉(zhuǎn)入減速子程序。
AT89C51是地址與數(shù)據(jù)總線復(fù)用類的單片機(jī),為了隔離潛在的噪音干擾,設(shè)置輸出斷開引腳SETTRIP在通常情況下接地,同時(shí)設(shè)置了開關(guān),便于在緊急情況下迅速關(guān)斷所有PWM輸出;為使PWM輸出處于有效狀態(tài),輸出關(guān)斷引腳 接高電平。外部時(shí)鐘CLK引腳接獨(dú)立的12M有源晶振為SA8281芯片提供一時(shí)鐘基準(zhǔn)用于控制與PWM有關(guān)的各時(shí)序。
4.3控制電路軟件設(shè)計(jì)
對(duì)SA8281芯片的控制是通過(guò)微處理器接口將相應(yīng)的參數(shù)送入芯片內(nèi)部?jī)?4位的寄存器R4、R3來(lái)實(shí)現(xiàn)的,它們是初始化寄存器和控制寄存器。數(shù)據(jù)先被讀入一系列臨時(shí)寄存器R0~R2中,然后通過(guò)一條虛擬的寫操作將數(shù)據(jù)傳送至相應(yīng)的R4,R3寄存器。
初始化寄存器用于設(shè)定和電機(jī)及逆變器有關(guān)的一些基本參數(shù)。在正常情況下,這些參數(shù)在電機(jī)工作前就被初始化(例.在PWM輸出允許前),并且在電機(jī)工作時(shí)一般不允許改變。
控制寄存器在工作過(guò)程中控制輸出脈寬調(diào)制波的狀態(tài),從而進(jìn)一步控制電機(jī)的運(yùn)行,比如轉(zhuǎn)速、正/反轉(zhuǎn)、啟動(dòng)和停止等。通常在電機(jī)工作時(shí)該寄存器內(nèi)容經(jīng)常被改寫以實(shí)現(xiàn)對(duì)電機(jī)的實(shí)時(shí)控制。程序流程圖下面分別進(jìn)行說(shuō)明:
4.3.1主程序
主程序判斷鍵號(hào)用的是查詢式:
O#鍵按下轉(zhuǎn)入初始化子程序;1#鍵按下轉(zhuǎn)入加速子程序;2#鍵按下轉(zhuǎn)入減速子程序。
另外為了防止誤操作增加了延時(shí)去抖動(dòng)的再次判斷鍵號(hào)環(huán)節(jié)。主程序流程圖如圖8所示:
4.3.2初始化子程序
在初始化子程序要設(shè)定的是與電機(jī)和變頻器有關(guān)的基本參數(shù),包括載波頻率的設(shè)定、調(diào)制波頻率范圍設(shè)定、脈沖延遲時(shí)間設(shè)定、最小刪除脈寬的設(shè)定、調(diào)制波形選擇、幅值控制設(shè)定等。
初始化寄存器的數(shù)據(jù)先以8位格式存入臨時(shí)寄存器R0,R1和R2中,然后通過(guò)虛擬寫操作R4再被存入初始化寄存器。
通常情況下,這些參數(shù)在電機(jī)工作過(guò)程中不要改變。
4.3.3 調(diào)速子程序
調(diào)速子程序包括加速子程序和減速子程序,本文只介紹加速子程序,減速子程序類似于加速子程序。
控制參數(shù)包括調(diào)制波頻率控制字和調(diào)制波幅值控制字,它們要通過(guò)計(jì)算求得,方法:首先根據(jù)電機(jī)的U/F曲線得到調(diào)制波的頻率與幅值,然后通過(guò)公式計(jì)算出相應(yīng)的控制字并制成表格,本文的程序設(shè)計(jì)中利用查表法實(shí)現(xiàn)兩種控制參數(shù)的傳送。
5 總結(jié)
本文中,設(shè)計(jì)變頻調(diào)速控制系統(tǒng)時(shí),控制芯片采用單片機(jī)AT89C51,采用SA8281作為正弦波發(fā)生器,用IR2110芯片來(lái)驅(qū)動(dòng),另外考慮到系統(tǒng)的穩(wěn)定性,設(shè)計(jì)了系統(tǒng)的保護(hù)電路,這樣整個(gè)系統(tǒng)有成本低廉,功能齊全的特點(diǎn),并具有較大的實(shí)用價(jià)值。目前,我國(guó)的變頻調(diào)速市場(chǎng)逐漸增長(zhǎng),需求量日益廣泛。因而,對(duì)于變頻調(diào)速控制系統(tǒng)的研究具有重要的學(xué)術(shù)意義和應(yīng)用價(jià)值。
基于51單片機(jī)設(shè)計(jì)的呼吸燈
一、項(xiàng)目介紹
呼吸燈是一種常見的LED燈光效果,它可以模擬人類呼吸的變化,使燈光看起來(lái)更加柔和和自然。51單片機(jī)是一種廣泛使用的微控制器,具有體積小、功耗低、成本低等優(yōu)點(diǎn),非常適合用于控制LED呼吸燈。本項(xiàng)目的呼吸燈將使用PWM(脈沖寬度調(diào)制)技術(shù)控制LED亮度,從而實(shí)現(xiàn)呼吸燈的效果。
在本項(xiàng)目中,將使用51單片機(jī)作為主控制器,通過(guò)編程實(shí)現(xiàn)呼吸燈的控制。將使用C語(yǔ)言編寫代碼,并使用Keil C51集成開發(fā)環(huán)境進(jìn)行編譯和調(diào)試。使用Proteus仿真軟件進(jìn)行電路設(shè)計(jì)和仿真,確保電路的正確性和穩(wěn)定性。
二、設(shè)計(jì)原理
2.1 PWM技術(shù)
PWM是脈沖寬度調(diào)制(Pulse Width Modulation)的縮寫,是一種通過(guò)改變脈沖寬度來(lái)控制電路的技術(shù)。在數(shù)字電路中,PWM是一種非常常見的技術(shù),它可以用來(lái)控制電機(jī)、LED燈等電子設(shè)備的亮度、速度等參數(shù)。
PWM技術(shù)的基本原理是通過(guò)控制脈沖的寬度和周期來(lái)控制電路的輸出。在一個(gè)PWM周期內(nèi),電路會(huì)以一定的頻率(也就是PWM頻率)產(chǎn)生一系列脈沖,每個(gè)脈沖的寬度和高電平時(shí)間占整個(gè)周期的比例是由控制器根據(jù)需要設(shè)定的。通過(guò)這種方式,可以實(shí)現(xiàn)對(duì)電路輸出的精確控制。
在LED呼吸燈項(xiàng)目中,使用定時(shí)器模擬PWM技術(shù)可以實(shí)現(xiàn)呼吸燈效果。具體來(lái)說(shuō),就是通過(guò)定時(shí)器產(chǎn)生一定頻率的脈沖信號(hào),然后通過(guò)改變脈沖的占空比來(lái)控制LED燈的亮度。當(dāng)脈沖的占空比逐漸增大時(shí),LED燈的亮度也會(huì)逐漸增強(qiáng),直到達(dá)到最大亮度;當(dāng)脈沖的占空比逐漸減小時(shí),LED燈的亮度也會(huì)逐漸減弱,直到最終熄滅。這樣就可以實(shí)現(xiàn)類似于人類呼吸的漸變效果。
2.2 呼吸燈原理
呼吸燈是一種將 LED 燈光做成漸變效果的技術(shù),可以讓 LED 的亮度在一定時(shí)間內(nèi)慢慢地增加和減小,使得 LED 的亮度變化更加自然和柔和,適合用于需要漸變效果的場(chǎng)景,如燈光調(diào)節(jié)、音響節(jié)拍等。
呼吸燈的原理是通過(guò)改變 LED 的 PWM 信號(hào)的占空比來(lái)控制 LED 的亮度。PWM(Pulse Width Modulation,脈寬調(diào)制)是一種調(diào)節(jié)模擬信號(hào)幅度的常用技術(shù),它通過(guò)改變信號(hào)的脈沖寬度來(lái)實(shí)現(xiàn)對(duì)信號(hào)幅度的調(diào)節(jié)。在呼吸燈中,PWM 信號(hào)的頻率較高,而占空比則會(huì)隨著時(shí)間的推移而逐漸變化,從而實(shí)現(xiàn) LED 亮度的漸變效果。
呼吸燈的實(shí)現(xiàn)通常需要使用一個(gè)定時(shí)器和一個(gè) PWM 模塊。定時(shí)器用來(lái)定時(shí)觸發(fā)中斷事件,在中斷處理函數(shù)中改變 PWM 信號(hào)的占空比,從而控制 LED 的亮度。在定時(shí)器中斷處理函數(shù)中,可以通過(guò)數(shù)學(xué)函數(shù)(如正弦、余弦等)或者簡(jiǎn)單的數(shù)值計(jì)算來(lái)得到不同的 PWM 占空比,實(shí)現(xiàn)不同的呼吸燈效果。
2.3 51單片機(jī)
51單片機(jī)是一種廣泛使用的微控制器,具有體積小、功耗低、成本低等優(yōu)點(diǎn),非常適合用于控制LED呼吸燈。
STC89C52是一種基于MCS-51內(nèi)核的8位單片機(jī),由中國(guó)的STC公司生產(chǎn)。具有高性價(jià)比、易于編程、廣泛應(yīng)用等特點(diǎn),在工業(yè)控制、通信、家電控制等領(lǐng)域得到了廣泛應(yīng)用。
STC89C52單片機(jī)的主要特點(diǎn)如下:
采用MCS-51內(nèi)核,具有8位數(shù)據(jù)總線和16位地址總線,可以訪問(wèn)64KB的程序存儲(chǔ)器和64KB的數(shù)據(jù)存儲(chǔ)器。
內(nèi)置12MHz的晶振,可以通過(guò)軟件設(shè)置分頻系數(shù)來(lái)獲得不同的系統(tǒng)時(shí)鐘頻率。
具有多種外設(shè)接口,包括UART、SPI、I2C、定時(shí)器、中斷等,可以方便地實(shí)現(xiàn)各種應(yīng)用。
支持ISP(In-System Programming)編程方式,可以通過(guò)串口或并口進(jìn)行在線編程,方便快捷。
具有低功耗模式,可以通過(guò)軟件設(shè)置進(jìn)入不同的睡眠模式,以節(jié)省系統(tǒng)能耗。
STC89C52單片機(jī)可以使用C語(yǔ)言或匯編語(yǔ)言進(jìn)行編程,編寫的程序可以通過(guò)編譯器生成HEX文件,然后通過(guò)編程器燒錄到芯片中。由于STC89C52單片機(jī)的廣泛應(yīng)用和豐富的資料,因此學(xué)習(xí)和使用它相對(duì)來(lái)說(shuō)比較容易。
三、代碼實(shí)現(xiàn)
3.1 自動(dòng)呼吸燈
因?yàn)镾TC89C52單片機(jī)沒(méi)有PWM輸出功能,只能使用延時(shí)函數(shù)實(shí)現(xiàn),以下是基于STC89C52單片機(jī)實(shí)現(xiàn)呼吸燈效果的完整代碼:
#include < reg52.h >
#define LED P1
void delay(unsigned int xms)
{
unsigned int i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
unsigned char i;
while (1)
{
for (i = 0; i < 255; i++)
{
LED = i;
delay(10);
}
for (i = 255; i > 0; i--)
{
LED = i;
delay(10);
}
}
}
在這個(gè)代碼中,使用了STC89C52單片機(jī)的P1口來(lái)控制LED燈的亮度。通過(guò)一個(gè)循環(huán),讓LED燈的亮度從0到255逐漸增加,再?gòu)?55到0逐漸減小,這樣就實(shí)現(xiàn)了呼吸燈的效果。
在代碼中,使用了一個(gè)delay函數(shù)來(lái)控制循環(huán)的速度。這個(gè)函數(shù)可以讓程序延時(shí)一定的時(shí)間,從而控制LED燈的亮度變化速度。在這個(gè)代碼中,設(shè)置了每次延時(shí)10毫秒,可以根據(jù)需要調(diào)整這個(gè)值來(lái)改變呼吸燈的效果。
3.2 按鍵控制燈光亮度
以下是基于STC89C52單片機(jī)的LED燈亮度控制完整代碼,其中使用了兩個(gè)按鍵分別控制LED的亮度和滅度。
#include < reg52.h >
#define LED P1
sbit KEY_UP = P3 ^ 2;
sbit KEY_DOWN = P3 ^ 3;
unsigned char pwm = 0;
void delay(unsigned int i) {
while (i--);
}
void key_scan() {
if (KEY_UP == 0) {
delay(1000);
if (KEY_UP == 0) {
pwm += 10;
if (pwm >= 100) {
pwm = 100;
}
}
}
if (KEY_DOWN == 0) {
delay(1000);
if (KEY_DOWN == 0) {
pwm -= 10;
if (pwm <= 0) {
pwm = 0;
}
}
}
}
void main() {
TMOD = 0x01; // 設(shè)置定時(shí)器0為模式1
TH0 = 0xFC; // 定時(shí)器初值,用于產(chǎn)生PWM信號(hào)的頻率為50Hz
TL0 = 0x67;
TR0 = 1; // 啟動(dòng)定時(shí)器0
ET0 = 1; // 允許定時(shí)器0中斷
EA = 1; // 開啟總中斷
while (1) {
key_scan();
}
}
void timer0() interrupt 1 {
static unsigned char cnt = 0;
if (cnt >= 100) {
cnt = 0;
}
if (cnt < pwm) {
LED = 0;
} else {
LED = 1;
}
cnt++;
}
以上代碼中,使用了定時(shí)器0來(lái)產(chǎn)生PWM信號(hào),控制LED的亮度。使用了兩個(gè)按鍵來(lái)調(diào)整LED的亮度和滅度。其中,KEY_UP按鍵用于增加LED的亮度,KEY_DOWN按鍵用于減小LED的亮度。在每次定時(shí)器中斷時(shí),根據(jù)pwm的值來(lái)控制LED的亮度。當(dāng)cnt小于pwm時(shí),LED為低電平,LED亮度較高;當(dāng)cnt大于等于pwm時(shí),LED為高電平,LED亮度較低。
采用89C51單片機(jī)設(shè)計(jì)的噴油校泵臺(tái)調(diào)速系統(tǒng)方案
1 引言
燃油噴射系統(tǒng)的性能直接影響柴油機(jī)的工作過(guò)程和性能指標(biāo),是柴油機(jī)改善排放、降低油耗和提高性能的關(guān)鍵部分。傳統(tǒng)的內(nèi)燃機(jī)車柴油噴油校泵臺(tái)主要用于噴油泵的磨合及性能試驗(yàn),其驅(qū)動(dòng)部分采用晶閘管電磁轉(zhuǎn)差離合器無(wú)級(jí)調(diào)速系統(tǒng),控制和顯示噴油泵的主軸轉(zhuǎn)速。由于采用分離元件,測(cè)試靈敏度低,設(shè)定調(diào)整不方便且故障率高。目前,國(guó)外噴油校泵臺(tái)采用微機(jī)控制及數(shù)顯系統(tǒng)。為此,按國(guó)際標(biāo)準(zhǔn)采用89C51單片機(jī)設(shè)計(jì)了一種新型的校泵臺(tái)調(diào)速系統(tǒng),能夠?qū)崟r(shí)控制主軸轉(zhuǎn)速測(cè)試和調(diào)節(jié),并將相關(guān)測(cè)量數(shù)據(jù)傳輸給上位PC機(jī)進(jìn)行顯示,從而提高測(cè)試靈敏度。
2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
該系統(tǒng)設(shè)計(jì)采用轉(zhuǎn)速單閉環(huán)凋速系統(tǒng),如圖1所示。驅(qū)動(dòng)電路由晶閘管和電機(jī)構(gòu)成,而控制電路則由轉(zhuǎn)速給定、轉(zhuǎn)速反饋、比例一積分一微分(PID)調(diào)節(jié)器以及晶閘管脈沖觸發(fā)電路構(gòu)成。
虛線框?yàn)檐浖O(shè)計(jì)部分,主要完成轉(zhuǎn)速給定、轉(zhuǎn)速反饋、偏差信號(hào)的形成和PID運(yùn)算。
3 系統(tǒng)硬件電路設(shè)計(jì)
系統(tǒng)硬件設(shè)計(jì)是以89C51單片機(jī)為核心,并配以必要的外圍設(shè)備,如數(shù)據(jù)采集、電氣接口、執(zhí)行機(jī)構(gòu)、通信接口等電路,如圖2所示。選用3CT20/500型晶閘管,由于晶閘管工作于交流電路,不宜與微機(jī)直接相接,采用光電耦合器4N25隔離單片機(jī)與輸出部分(晶閘管一電動(dòng)機(jī)電路)。輸出部分的地線接地,而單片機(jī)系統(tǒng)的電源地線懸空,不能與交流電源的地線相接,以避免輸出部分電源變化對(duì)單片機(jī)電源的影響。
使用反相驅(qū)動(dòng)器7406作為4N25輸入端的驅(qū)動(dòng)。電磁轉(zhuǎn)差離合器中的勵(lì)磁線圈采用帶續(xù)流二極管的晶閘管半波整流電路供電。勵(lì)磁線圈是電感性負(fù)載,線圈兩端并聯(lián)一只續(xù)流二極管VD6使電流平滑。調(diào)節(jié)觸發(fā)裝置采用單結(jié)管VBG7。為了實(shí)現(xiàn)操作機(jī)構(gòu)的速度閉環(huán)控制,需要檢測(cè)主軸轉(zhuǎn)速。測(cè)速傳感器采用磁電式轉(zhuǎn)速傳感器。測(cè)速輪有120個(gè)齒,每轉(zhuǎn)過(guò)1個(gè)齒就在測(cè)速傳感器上感應(yīng)一個(gè)脈沖信號(hào)。這樣,主軸每轉(zhuǎn)一周,產(chǎn)生120個(gè)脈沖,其表達(dá)式為:
式中:P為測(cè)速傳感器每轉(zhuǎn)輸出的脈沖數(shù);T為規(guī)定時(shí)間;m1為轉(zhuǎn)速脈沖數(shù)。
取8155的定時(shí)器/計(jì)數(shù)器工作于定時(shí)方式,定時(shí)時(shí)間為lO ms,其輸入端接1 MHz時(shí)鐘信號(hào)為計(jì)數(shù)頻率,輸出端接89C51的中斷INT0申請(qǐng)端。89C51的定時(shí)器/計(jì)數(shù)器T1工作于計(jì)數(shù)方式,測(cè)速傳感器經(jīng)整形后的脈沖輸入T1,當(dāng)輸入信號(hào)發(fā)生負(fù)跳變,計(jì)數(shù)器加1。每當(dāng)10 ms到,通過(guò)INT0申請(qǐng)中斷,在中斷處理程序中得到Tl計(jì)數(shù)值。計(jì)數(shù)值再乘以50,測(cè)出電機(jī)當(dāng)前轉(zhuǎn)速。
噴油校泵臺(tái)動(dòng)力系統(tǒng)的主要部件是電磁調(diào)速電動(dòng)機(jī),由單速或多速鼠籠型異步電動(dòng)機(jī)和電磁轉(zhuǎn)差離合器組成,通過(guò)控制器可在較大范圍內(nèi)實(shí)現(xiàn)無(wú)級(jí)調(diào)速。其轉(zhuǎn)速表達(dá)式為:
式中:n1為同步轉(zhuǎn)速,r/min;f1為電源頻率,Hz;p為極對(duì)數(shù)s為轉(zhuǎn)差率。
在一定的負(fù)載范圍內(nèi)調(diào)節(jié)勵(lì)磁線圈中的勵(lì)磁電流,可以調(diào)節(jié)轉(zhuǎn)差率s,達(dá)到調(diào)節(jié)轉(zhuǎn)速的目的。勵(lì)磁電流越大,轉(zhuǎn)速越高;反之則轉(zhuǎn)速越低。
4 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件采用模塊化結(jié)構(gòu)設(shè)計(jì),主要由PC機(jī)、89C51單片機(jī)和通信3個(gè)模塊組成嘲。其中PC機(jī)模塊主要完成主軸轉(zhuǎn)速預(yù)置及顯示;通信模塊實(shí)現(xiàn)PC機(jī)與單片機(jī)之間數(shù)據(jù)傳輸;89C51單片機(jī)模塊完成定時(shí)采樣和自動(dòng)控制主軸轉(zhuǎn)速。其系統(tǒng)軟件的主程序如圖3所示。主程序主要完成系統(tǒng)初始化、與上位機(jī)握手、接收預(yù)置參數(shù)、調(diào)用主軸轉(zhuǎn)速程序、調(diào)用噴油計(jì)數(shù)程序以及調(diào)用數(shù)據(jù)采集發(fā)送程序。
由于控制對(duì)象是具有純滯后的一階慣性環(huán)節(jié),所以按要求設(shè)計(jì)為快速隨動(dòng)系統(tǒng)。為了提高跟蹤的快速性,調(diào)速范圍過(guò)大時(shí),在第一拍先使控制器輸出逼近給定要求,后啟動(dòng)PI控制算法。第一拍控制模型為:
式中:U(T)為當(dāng)前控制器輸出值;U(T-1)為上一次控制器輸出值;N(T)為當(dāng)前控制器給定值;N(T-1)為上一次控制器給定值。
PI控制算法的數(shù)學(xué)模型為:
式中:Kp為比例系數(shù);T為采樣周期;Ti為積分時(shí)間常數(shù)。
第二拍控制模型為:
式中:K0,K1,K2,K3,P1,P2,P3為系數(shù)。
由于加入了積分環(huán)節(jié),影響系統(tǒng)的動(dòng)態(tài)性能,可以消除余差,提高控制精度。
5 結(jié)論
該設(shè)計(jì)系統(tǒng)已成功應(yīng)用在某內(nèi)燃機(jī)車柴油機(jī)噴油泵的測(cè)試平臺(tái)。研究表明,該噴油校泵臺(tái)調(diào)速系統(tǒng)可自動(dòng)控制噴油計(jì)數(shù)、主軸轉(zhuǎn)速,實(shí)現(xiàn)量油時(shí)主軸轉(zhuǎn)速的數(shù)字顯示與屏幕顯示,使用維修方便,從而提高檢測(cè)精度和自動(dòng)化程度。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。