找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22272|回復: 2
收起左側

第10章 TLC5615數(shù)模轉換器DAC

[復制鏈接]
ID:111078 發(fā)表于 2016-3-28 03:27 | 顯示全部樓層 |閱讀模式
51單片機輕松入門—基于STC15W4K系列(C語言版)
李友全
編著:http://www.torrancerestoration.com/bbs/dpj-37954-1.html


第10章 數(shù)模轉換器DAC
1 D/A輸出電路圖
2 TLC5615基本測試實驗
3 TLC5615產生波形實驗
4 TLC5615播放音樂實驗
數(shù)模轉換就是將單片機輸出的數(shù)字信號轉換為模擬信號(比如正弦波、鋸齒波)

簡稱為D/A,實現(xiàn)數(shù)字信號轉換為模擬信號的器件稱為數(shù)模轉換器,簡稱DAC

DAC一般是由專用集成電路完成的。

1 D/A輸出電路圖
1號單片機與D/A輸出芯片TLC5615連接電路如圖所示 。
0.png
TLC5615的1、2、3腳用于與單片機進行通信(SPI接口),6腳是基準電壓輸入,
7腳是模擬信號輸出。圖中的MC1403是一個廉價的電壓基準芯片,簡單的說就是一 個穩(wěn)壓精度比L7805之類更高的穩(wěn)壓塊
2 TLC5615基本測試實驗

#include "STC15W4K.H" // 注意宏定義后面沒分號

#include
sbit CS=P5^5; sbit CLK=P4^0; sbit DIN=P3^4;
void DaConv(unsigned int value)
{
// 此函數(shù)內容固定,單片機晶振頻率在5-35MHz范圍內直接復制使用即可
}
void main()
{
unsigned int value; // 待轉換的數(shù)據(jù)
while(1)
{
value=511; // 這里輸入0--1023的數(shù)據(jù)觀察D/A轉換輸出電壓 DaConv(value); // 執(zhí)行D/A轉換,無任何返回值。
}
}
實驗結果如表所示,輸出電壓X = 2·Vref·Value /1023。
0.png

3 TLC5615產生鋸齒波、三角波、正弦波實驗

例10.4 TLC5615產生1000Hz鋸齒波、三角波、正弦波,R/C時鐘22.1184MHz。

1.png
觀察上圖波形,橫軸是時間,可用單片機定時器定時中斷進行控制,縱軸是模擬電壓值, 用TLC5615進行D/A轉換輸出即可。
要讓TLC5615輸出鋸齒波、三角波、正弦波等波形,我們可以對波形的一個周期抽樣一些 點進行D/A轉換輸出,把抽樣點建立成表格,定時器每中斷一次查表轉換輸出一個值。

比如我們將正弦函數(shù)從0°~360°范圍內按10°一個步進值進行等分,可得0、10、20、

30、…340、350,共36個點,這就確定了表格數(shù)組大小為36個整數(shù),

第1點輸出電壓值:511×sin(0)+512=512 // 511用于波形向上平移。 第2點輸出電壓值:511×sin(10)+512=601 // 511用于波形向上平移。 第3點輸出電壓值: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 %E7%AC%AC10%E7%AB%A0-%E6%95%B0%E6%A8%A1%E8%BD%AC%E6%8D%A2%E5%99%A8dac-10.jpg %E7%AC%AC10%E7%AB%A0-%E6%95%B0%E6%A8%A1%E8%BD%AC%E6%8D%A2%E5%99%A8dac-11.jpg 主要程序代碼如下:

void Timer0() interrupt 1
{
static unsigned char counter=0;


P35=!P35;
//
觀察定時器定時時間用的
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(); // 初始化并啟動定時器0
while(1); // 通過定時器0來控制產生電壓的時間間隔
}

當需要更換輸出波形時,只需要修改DaConv(SinTable[counter]);語句中的表格名稱即可,實測 D/A輸出波形如圖10-7所示。

4 TLC5615播放音樂實驗

將音樂文件(比如MP3文件)通過其它輔助軟件轉換成單片機內部的表格數(shù)組,然后通過不斷查 表+D/A的方式即可播放出音樂,通過調節(jié)TLC5615的輸入基準電壓就可調節(jié)輸出音量的大小。 主要代碼如下:

void Timer0() interrupt 1

{

static unsigned int counter=0; TH0=0xFE;

TL0=0x33;

DaConv(((unsigned int)wav[counter])<<1); // 將wav數(shù)組中的數(shù)據(jù)擴大2倍后寫入TLC5615 counter++; // 擴大2倍是為了使TLC5615的音頻輸出電壓范圍在0-2.5V之間 counter%=WAV_LEN; // counter在0到WAV_LEN-1之間循環(huán)變化使聲音循環(huán)播放

}

void main()

{

Timer0_Init(); // 初始化并啟動定時器0

while(1); // 通過定時器0來控制產生電壓的時間間隔

}


回復

使用道具 舉報

ID:85598 發(fā)表于 2018-6-5 12:05 | 顯示全部樓層
求教:“{ // 此函數(shù)內容固定,單片機晶振頻率在5-35MHz范圍內直接復制使用即可 }”具體內容,謝謝!
回復

使用道具 舉報

ID:685385 發(fā)表于 2020-12-17 11:18 | 顯示全部樓層
“通過其它輔助軟件轉換成單片機內部的表格數(shù)組,然后通過不斷查 表+D/A的方式即可播放出音樂,通過調節(jié)TLC5615的輸入基準電壓就可調節(jié)輸出音量的大小”
這個其他輔助軟件什么意思?可以舉個詳細的例子嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表