標題: 第10章 TLC5615數模轉換器DAC [打印本頁]
作者: wul 時間: 2016-3-28 03:27
標題: 第10章 TLC5615數模轉換器DAC
51單片機輕松入門—基于STC15W4K系列(C語言版)
李友全 編著:http://m.zg4o1577.cn/bbs/dpj-37954-1.html
第10章 數模轉換器DAC
1 D/A輸出電路圖
2 TLC5615基本測試實驗
3 TLC5615產生波形實驗
4 TLC5615播放音樂實驗
數模轉換就是將單片機輸出的數字信號轉換為模擬信號(比如正弦波、鋸齒波),
簡稱為D/A,實現數字信號轉換為模擬信號的器件稱為數模轉換器,簡稱DAC,
DAC一般是由專用集成電路完成的。
1 D/A輸出電路圖
1號單片機與D/A輸出芯片TLC5615連接電路如圖所示 。
0.png (190.41 KB, 下載次數: 170)
下載附件
2016-3-28 03:24 上傳
TLC5615的1、2、3腳用于與單片機進行通信(SPI接口),6腳是基準電壓輸入,
7腳是模擬信號輸出。圖中的MC1403是一個廉價的電壓基準芯片,簡單的說就是一 個穩壓精度比L7805之類更高的穩壓塊
2 TLC5615基本測試實驗
#include "STC15W4K.H" // 注意宏定義后面沒分號
#include
sbit CS=P5^5; sbit CLK=P4^0; sbit DIN=P3^4;
void DaConv(unsigned int value)
{
// 此函數內容固定,單片機晶振頻率在5-35MHz范圍內直接復制使用即可
}
void main()
{
unsigned int value; // 待轉換的數據
while(1)
{
value=511; // 這里輸入0--1023的數據觀察D/A轉換輸出電壓 DaConv(value); // 執行D/A轉換,無任何返回值。
}
}
實驗結果如表所示,輸出電壓X = 2·Vref·Value /1023。
0.png (118.12 KB, 下載次數: 153)
下載附件
2016-3-28 03:25 上傳
3 TLC5615產生鋸齒波、三角波、正弦波實驗
例10.4 TLC5615產生1000Hz鋸齒波、三角波、正弦波,R/C時鐘22.1184MHz。
1.png (115.47 KB, 下載次數: 152)
下載附件
2016-3-28 03:25 上傳
觀察上圖波形,橫軸是時間,可用單片機定時器定時中斷進行控制,縱軸是模擬電壓值, 用TLC5615進行D/A轉換輸出即可。
要讓TLC5615輸出鋸齒波、三角波、正弦波等波形,我們可以對波形的一個周期抽樣一些 點進行D/A轉換輸出,把抽樣點建立成表格,定時器每中斷一次查表轉換輸出一個值。
比如我們將正弦函數從0°~360°范圍內按10°一個步進值進行等分,可得0、10、20、
30、…340、350,共36個點,這就確定了表格數組大小為36個整數,
第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 (9.45 KB, 下載次數: 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, 下載次數: 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, 下載次數: 142)
下載附件
2016-3-28 03:29 上傳
主要程序代碼如下:
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之間循環變化使波形循環輸出
}
void main()
{
Timer0_Init(); // 初始化并啟動定時器0
while(1); // 通過定時器0來控制產生電壓的時間間隔
}
當需要更換輸出波形時,只需要修改DaConv(SinTable[counter]);語句中的表格名稱即可,實測 D/A輸出波形如圖10-7所示。
4 TLC5615播放音樂實驗
將音樂文件(比如MP3文件)通過其它輔助軟件轉換成單片機內部的表格數組,然后通過不斷查 表+D/A的方式即可播放出音樂,通過調節TLC5615的輸入基準電壓就可調節輸出音量的大小。 主要代碼如下:
void Timer0() interrupt 1
{
static unsigned int counter=0; TH0=0xFE;
TL0=0x33;
DaConv(((unsigned int)wav[counter])<<1); // 將wav數組中的數據擴大2倍后寫入TLC5615 counter++; // 擴大2倍是為了使TLC5615的音頻輸出電壓范圍在0-2.5V之間 counter%=WAV_LEN; // counter在0到WAV_LEN-1之間循環變化使聲音循環播放
}
void main()
{
Timer0_Init(); // 初始化并啟動定時器0
while(1); // 通過定時器0來控制產生電壓的時間間隔
}
作者: hawkj 時間: 2018-6-5 12:05
求教:“{ // 此函數內容固定,單片機晶振頻率在5-35MHz范圍內直接復制使用即可 }”具體內容,謝謝!
作者: timixiaoyouxi 時間: 2020-12-17 11:18
“通過其它輔助軟件轉換成單片機內部的表格數組,然后通過不斷查 表+D/A的方式即可播放出音樂,通過調節TLC5615的輸入基準電壓就可調節輸出音量的大小”
這個其他輔助軟件什么意思?可以舉個詳細的例子嗎
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
免费久久久
|
精品欧美一区二区三区免费观看
|
国产精品久久久久久久7电影
|
国产99久久久久
|
国产精品五区
|
久久精品小视频
|
久久精品无码一区二区三区
|
久久成人国产精品
|
九色网址
|
亚洲免费视频在线观看
|
日本午夜网站
|
国产一区2区
|
久久69精品久久久久久久电影好
|
欧美一区二区网站
|
古典武侠第一页久久777
|
亚洲欧美视频一区
|
久久精品久久久
|
亚洲视频一区在线观看
|
日韩中文字幕免费在线
|
国产一区二区
|
亚洲国产成人在线视频
|
国产一级特黄真人毛片
|
亚洲视频中文字幕
|
91视频网址
|
精品国产乱码久久久久久蜜臀
|
国产九九精品视频
|
亚洲高清在线
|
亚洲精品一区二区三区中文字幕
|
亚洲一区二区三区乱码aⅴ
四虎在线视频
|
金莲网|
91精品国产综合久久久久久丝袜
|
免费在线视频一区二区
|
久久久久久蜜桃一区二区
|
亚洲激情在线
|
日韩欧美国产不卡
|
狠狠夜夜|
中文字幕免费在线
|
亚洲精品久久久久久久久久久
|
欧美日韩在线播放
|
91精品国产91久久综合桃花
|
91亚洲国产成人精品一区二三
|