51單片機(jī)輕松入門—基于STC15W4K系列(C語(yǔ)言版)
李友全 編著:http://www.zg4o1577.cn/bbs/dpj-37954-1.html
第10章 數(shù)模轉(zhuǎn)換器DAC 1 D/A輸出電路圖 2 TLC5615基本測(cè)試實(shí)驗(yàn) 3 TLC5615產(chǎn)生波形實(shí)驗(yàn) 4 TLC5615播放音樂實(shí)驗(yàn) 數(shù)模轉(zhuǎn)換就是將單片機(jī)輸出的數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)(比如正弦波、鋸齒波), 簡(jiǎn)稱為D/A,實(shí)現(xiàn)數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)的器件稱為數(shù)模轉(zhuǎn)換器,簡(jiǎn)稱DAC, DAC一般是由專用集成電路完成的。 1 D/A輸出電路圖 1號(hào)單片機(jī)與D/A輸出芯片TLC5615連接電路如圖所示 。
0.png (190.41 KB, 下載次數(shù): 170)
下載附件
2016-3-28 03:24 上傳
TLC5615的1、2、3腳用于與單片機(jī)進(jìn)行通信(SPI接口),6腳是基準(zhǔn)電壓輸入, 7腳是模擬信號(hào)輸出。圖中的MC1403是一個(gè)廉價(jià)的電壓基準(zhǔn)芯片,簡(jiǎn)單的說就是一 個(gè)穩(wěn)壓精度比L7805之類更高的穩(wěn)壓塊 2 TLC5615基本測(cè)試實(shí)驗(yàn) #include "STC15W4K.H" // 注意宏定義后面沒分號(hào) #include sbit CS=P5^5; sbit CLK=P4^0; sbit DIN=P3^4; void DaConv(unsigned int value) { // 此函數(shù)內(nèi)容固定,單片機(jī)晶振頻率在5-35MHz范圍內(nèi)直接復(fù)制使用即可 } void main() { unsigned int value; // 待轉(zhuǎn)換的數(shù)據(jù) while(1) { value=511; // 這里輸入0--1023的數(shù)據(jù)觀察D/A轉(zhuǎn)換輸出電壓 DaConv(value); // 執(zhí)行D/A轉(zhuǎn)換,無任何返回值。 } } 實(shí)驗(yàn)結(jié)果如表所示,輸出電壓X = 2·Vref·Value /1023。
0.png (118.12 KB, 下載次數(shù): 153)
下載附件
2016-3-28 03:25 上傳
3 TLC5615產(chǎn)生鋸齒波、三角波、正弦波實(shí)驗(yàn) 例10.4 TLC5615產(chǎn)生1000Hz鋸齒波、三角波、正弦波,R/C時(shí)鐘22.1184MHz。
1.png (115.47 KB, 下載次數(shù): 152)
下載附件
2016-3-28 03:25 上傳
觀察上圖波形,橫軸是時(shí)間,可用單片機(jī)定時(shí)器定時(shí)中斷進(jìn)行控制,縱軸是模擬電壓值, 用TLC5615進(jìn)行D/A轉(zhuǎn)換輸出即可。 要讓TLC5615輸出鋸齒波、三角波、正弦波等波形,我們可以對(duì)波形的一個(gè)周期抽樣一些 點(diǎn)進(jìn)行D/A轉(zhuǎn)換輸出,把抽樣點(diǎn)建立成表格,定時(shí)器每中斷一次查表轉(zhuǎn)換輸出一個(gè)值。 比如我們將正弦函數(shù)從0°~360°范圍內(nèi)按10°一個(gè)步進(jìn)值進(jìn)行等分,可得0、10、20、 30、…340、350,共36個(gè)點(diǎn),這就確定了表格數(shù)組大小為36個(gè)整數(shù), 第1點(diǎn)輸出電壓值:511×sin(0)+512=512 // 511用于波形向上平移。 第2點(diǎn)輸出電壓值:511×sin(10)+512=601 // 511用于波形向上平移。 第3點(diǎn)輸出電壓值:511×sin(20)+512=687 // 511用于波形向上平移。 unsigned int code SinTable[] = // 正弦波表格 { 512,601,687,768,840,903,955,992,1015,1023,1015,992,955,903,840,768,687,601,512, 423,337,257,183,121,69,32,9,1,9,32,69,121,183,257,337,423, };
%E7%AC%AC10%E7%AB%A0-%E6%95%B0%E6%A8%A1%E8%BD%AC%E6%8D%A2%E5%99%A8dac-9.jpg (9.45 KB, 下載次數(shù): 142)
下載附件
2016-3-28 03:29 上傳
%E7%AC%AC10%E7%AB%A0-%E6%95%B0%E6%A8%A1%E8%BD%AC%E6%8D%A2%E5%99%A8dac-10.jpg (9.88 KB, 下載次數(shù): 155)
下載附件
2016-3-28 03:29 上傳
%E7%AC%AC10%E7%AB%A0-%E6%95%B0%E6%A8%A1%E8%BD%AC%E6%8D%A2%E5%99%A8dac-11.jpg (10.59 KB, 下載次數(shù): 142)
下載附件
2016-3-28 03:29 上傳
主要程序代碼如下:
void Timer0() interrupt 1 { static unsigned char counter=0; |
|
P35=!P35; | // | 觀察定時(shí)器定時(shí)時(shí)間用的 | TH0=0xff; | // | TH0=0xff; | TL0=0xCD; | // | TL0=0x2c; | DaConv(SinTable[counter]); | // | D/A輸出 | counter++; |
|
|
counter%=36; // counter在0到36之間循環(huán)變化使波形循環(huán)輸出 } void main() { Timer0_Init(); // 初始化并啟動(dòng)定時(shí)器0 while(1); // 通過定時(shí)器0來控制產(chǎn)生電壓的時(shí)間間隔 } 當(dāng)需要更換輸出波形時(shí),只需要修改DaConv(SinTable[counter]);語(yǔ)句中的表格名稱即可,實(shí)測(cè) D/A輸出波形如圖10-7所示。 4 TLC5615播放音樂實(shí)驗(yàn) 將音樂文件(比如MP3文件)通過其它輔助軟件轉(zhuǎn)換成單片機(jī)內(nèi)部的表格數(shù)組,然后通過不斷查 表+D/A的方式即可播放出音樂,通過調(diào)節(jié)TLC5615的輸入基準(zhǔn)電壓就可調(diào)節(jié)輸出音量的大小。 主要代碼如下: void Timer0() interrupt 1 { static unsigned int counter=0; TH0=0xFE; TL0=0x33; DaConv(((unsigned int)wav[counter])<<1); // 將wav數(shù)組中的數(shù)據(jù)擴(kuò)大2倍后寫入TLC5615 counter++; // 擴(kuò)大2倍是為了使TLC5615的音頻輸出電壓范圍在0-2.5V之間 counter%=WAV_LEN; // counter在0到WAV_LEN-1之間循環(huán)變化使聲音循環(huán)播放 } void main() { Timer0_Init(); // 初始化并啟動(dòng)定時(shí)器0 while(1); // 通過定時(shí)器0來控制產(chǎn)生電壓的時(shí)間間隔 }
|