<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于TLC5620的數模轉換器設計

lPCU_elecfans ? 來源:未知 ? 作者:工程師飛燕 ? 2018-09-16 10:46 ? 次閱讀

設計背景:

數模轉換器(Digital to Analog Converter)即DAC,是數字世界和模擬世界之間的橋梁。人類生活在模擬世界中,雖然數字器件及設備的比重日益增強,但是DAC的發展仍是必不可少的。

從航空航天、國防軍事到民用通信、多媒體、數字信號處理等都涉及到DAC應用。DAC基本上由4個部分組成,即權電阻網絡、運算放大器、基準電源和模擬開關。它是一種將二進制數字量形式的離散信號轉換成以參考電壓為基準的模擬量的轉換器。

設計原理:

本設計采用串行數/模轉換芯片TLC5620,TLC5620是一個擁有四路輸出的數/模轉換器,時鐘頻率最大可達到1MHz。TLC5620芯片接口如下:

基于TLC5620的數模轉換器設計

該芯片主要有以下特點:四通道8位電壓輸出DA轉換器、5V單電源供電、串行接口、高阻抗基準輸入、可編程1或2輸出范圍、同時更新設備、內部上電復位、低功耗、半緩沖輸出。該芯片主要應用于:可編程電源、數字控制放大器/誤差器、移動通信、自動測試設備、研發過程檢測和控制和信號合成等。

轉換公式:V = REF*(CODE/256)* (1+RNG)

V:實際電壓;REF:基準電壓;CODE:輸入8位數據;RNG:范圍。

TLC5620的接口時序如下列圖所示:

基于TLC5620的數模轉換器設計

圖1 LOAD控制更新(LDAC為低電平)

圖2 LDAC控制更新(LDAC為低電平)

圖3 LOAD控制更新(使用8位串行數據,LOAD為低電平)

圖4 LDAC控制更新(使用8位串行數據)

如圖1所示:當LOAD為高電平時,數據在CLK的下降沿被鎖存至DATA,只要所有數據被鎖存,則將LOAD拉低,將數據從串行輸入寄存器傳送到所選擇的DAC。

如圖2所示:串行編程期間LDAC為高電平,數據在LOAD為低電平時進行鎖存,當LDAC變為低電平時傳送至DAC輸出。如圖3、4所示:輸入數據最高位(MSB)在前,數據傳輸使用兩個8個時鐘周期。

在本設計中運用的是圖1的工作時序:

數據通道選擇:

RNG:控制DAC輸出范圍。當RNG為低時,輸出范圍在基準電壓和GND之間;當RNG為高時,輸出范圍為兩倍的基準電壓和GND。

設計架構圖:

本設計驅動TLC5620將輸入的數字量轉換為實際的模擬量(電壓),通過四個按鍵控制四路輸出的電壓變化,每按一次,電壓值也隨之上升,同時在數碼管上也依次顯示相應的值(依次為A1,A0,RNG,輸入DATA)。本設計采用的開發板的基準電壓為2.5V。設計架構圖如下所示:

key_test模塊通過四個按鍵輸入的值,組合輸出兩個數據,11位的wr_data是TLC_DA模塊解碼所需的數據。20位的out_data是seg_num模塊數碼管顯示所需的數據。

設計代碼:

key_test模塊代碼如下:

0modulekey_test(//按鍵控制模塊

1//端口信號:模塊的輸入輸出接口

2inputclk,//50MHZ

3inputrst_n,//低電平復位

4input[3:0]key,//四個按鍵組合信號

5

6output[10:0]wr_data,//輸出一幀數據,為DA模塊的輸入數字量

7output[19:0]out_data //輸出數碼管顯示數據

8);

9

10//計數器時鐘分頻

11reg[30:0]cnt;

12regclk_r;//分頻時鐘:在消除抖動的時鐘頻率下進行按鍵的檢測

13always@(posedgeclkornegedgerst_n)//按鍵消抖,時間為0.2s進行一次檢測

14if(!rst_n)

15begin

16cnt<=?0;

17clk_r<=?0;

18end

19elseif(cnt

20cnt<=?cnt?+?1'b1;

21else

22begin

23cnt<=?0;

24clk_r<=?~clk_r;

25end

26

27//按鍵為低電平有效,當檢測到對應按鍵之后,相應數值加1,并顯示相應的通道

28reg[7:0]data;//按鍵輸入數據

29reg[1:0]channel;//通道選擇

30reg[7:0]key1,key2,key3,key4;//相應四個按鍵

31always@(posedgeclk_rornegedgerst_n)

32if(!rst_n)

33begin

34key1<=?8'h00;

35key2<=?8'h00;

36key3<=?8'h00;

37key4<=?8'h00;

38data<=?8'h00;

39channel<=?2'b00;

40end

41else

42case(key)

434'b1110:begin//按鍵1:選擇通道A,且輸入數字量加1

44channel<=?2'b00;

45key1<=?key1?+?1'b1;

46data<=?key1;

47end

484'b1101:begin//按鍵2:選擇通道B,且輸入數字量加1

49channel<=?2'b01;

50key2<=?key2?+?1'b1;

51data<=?key2;

52end

534'b1011:begin//按鍵3:選擇通道C,且輸入數字量加1

54channel<=?2'b10;

55key3<=?key3?+?1'b1;

56data<=?key3;

57end

584'b0111:begin//按鍵4:選擇通道D,且輸入數字量加1

59channel<=?2'b11;

60key4<=?key4?+?1'b1;

61data<=?key4;

62end

63default:;

64endcase

65

66//用賦值語句將需要的數據組合起來,在此例中將RNG默認為1

67assignwr_data={channel,1'b1,data};assignout_data={{3'b000,channel[1]},3'b000,channel[0],4'h1,data};

68

69endmodule

TLC_DA模塊代碼如下:

0moduleTLC_DA(//輸入數字量轉換為模擬量模塊,本實驗用TLC5620

1//端口信號:模塊的輸入輸出接口

2inputclk,//系統時鐘50MHz

3inputrst_n,//低電平復位

4input[10:0]data_in,//輸入一幀數據

5outputda_data,//串行數據接口

6outputda_clk,//串行時鐘接口

7outputregda_ldac,//更新控制信號

8outputregda_load//串行加載控制接口

9);

10

11//計數器時鐘分頻:根據芯片內部的時序要求進行分頻

12reg[30:0]cnt;

13wireda_clk_r;//TLC 5620內部時鐘信號

14always@(posedgeclkornegedgerst_n)//滿足協議中的時鐘要求,在TLC 5620中時鐘要求不大于1MHZ

15if(!rst_n)

16cnt<=?6'd0;

17else

18cnt<=?cnt?+?1'b1;

19

20assignda_clk_r=cnt[5];

21

22//接收時序狀態機

23reg[2:0]state;

24reg[3:0]cnt_da;

25regda_data_r;

26regda_data_en;//限定da_data,da_clk的有效區域

27always@(posedgeda_clk_rornegedgerst_n)

28if(!rst_n)

29begin

30state<=?0;

31cnt_da<=?0;

32da_load<=?1;

33da_ldac<=?0;???????????

34da_data_r<=?1'b1;

35da_data_en<=?0;

36end

37else

38case(state)

390:state<=?1;

401:begin

41da_load<=?1;

42da_data_en<=?1;

43if(cnt_da<=?10)

44begin

45cnt_da<=?cnt_da?+?1'b1;

46case(cnt_da)

470:da_data_r<=?data_in[10];

481:da_data_r<=?data_in[9];

492:da_data_r<=?data_in[8];

503:da_data_r<=?data_in[7];

514:da_data_r<=?data_in[6];

525:da_data_r<=?data_in[5];

536:da_data_r<=?data_in[4];

547:da_data_r<=?data_in[3];

558:da_data_r<=?data_in[2];

569:da_data_r<=?data_in[1];

5710:da_data_r<=?data_in[0];

58default:;

59endcase

60state<=?1;

61end

62else

63begin

64cnt_da<=?0;

65state<=?2;

66da_data_en<=?0;

67end

68end

692:begin

70da_load<=?0;

71state<=?3;

72end

733:begin

74da_load<=?1;

75state<=?0;

76end

77default:state<=?0;

78endcase

79

80assignda_data=(da_data_en)?da_data_r:1'b1;

81assignda_clk=(da_data_en)?da_clk_r:1'b0;

82

83endmodule

seg_num模塊代碼如下:

0moduleseg_num(//數碼管顯示模塊:選擇數碼管0-4共5個數碼管顯示{A1,A0,RNG,DATA}

1//端口信號:模塊的輸入輸出接口

2inputclk,//系統時鐘50MHz

3inputrst_n,//低電平復位

4input[19:0]data_in,//20位輸入數據

5

6outputreg[7:0]seg,//數碼管段選

7outputreg[2:0]sel//數碼管位選

8);

9

10//通過查找表的方式,將相應位的數碼管與數據的相應位一一對應

11reg[3:0]num;

12always@(*)

13case(sel)

144:num=data_in[3:0];//第五個數碼管顯示數據的低四位[3:0]

153:num=data_in[7:4];//第四個數碼管顯示數據的低四位[7:4]

162:num=data_in[11:8];//第三個數碼管顯示數據的低四位[11:8]

171:num=data_in[15:12];//第二個數碼管顯示數據的低四位[15:12]

180:num=data_in[19:16];//第一個數碼管顯示數據的低四位[19:16]

19default:;

20endcase

21

22//通過查找表的方式,將數據與數碼管的顯示方式一一對應

23always@(*)

24case(num)

250:seg<=?8'hC0;???//8'b1100_0000

261:seg<=?8'hF9;???//8'b1111_1001

272:seg<=?8'hA4;??//8'b1010_0100 ?

283:seg<=?8'hB0;???//8'b1011_0000

294:seg<=?8'h99;???//8'b1001_1001

305:seg<=?8'h92;???//8'b1001_0010

316:seg<=?8'h82;???//8'b1000_0010

327:seg<=?8'hF8;???//8'b1111_1000

338:seg<=?8'h80;???//8'b1000_0000

349:seg<=?8'h90;???//8'b1001_0000

35default:seg<=?8'hFF;?//8'b1111_1111

36endcase

37

38//計數器時鐘分頻:用cnt第10位的變化作為分頻時鐘

39reg[23:0]cnt;

40always@(posedgeclkornegedgerst_n)

41if(!rst_n)

42cnt<=?4'd0;

43else

44cnt<=?cnt?+?1'b1;

45//在分頻時鐘下,數碼管的0-5位依次循環

46always@(posedgecnt[10]ornegedgerst_n)//分頻時鐘為2^10/50M

47if(!rst_n)

48sel<=?0;

49elseif(sel

50sel<=?sel?+?1'b1;

51else

52sel<=?0;???

53

54endmodule

top頂層模塊代碼如下:

0moduletop(//頂層模塊:將各個模塊組合

1//外部接口

2inputclk,//系統時鐘50MHz

3inputrst_n,//低電平復位

4input[3:0]key,//四個按鍵組成的按鍵信號,低電平有效

5

6outputda_data,//DA串行接口數據

7outputda_clk,//DA串行接口時鐘

8outputda_ldac,//DA更新信號

9outputda_load,//DA串行接口加載控制信號

10output[7:0]seg,//數碼管段選

11output[2:0]sel//數碼管位選

12);

13//內部信號:模塊內部的接口信號,比如模塊TLC_DA的輸出信號data_in,通過內部信號r_data與模塊key_test的輸入信號wr_data相連

14wire[10:0]wr_data;

15wire[19:0]out_data;//輸入給數碼管的數據

16

17//模塊例化

18TLC_DATLC_DA_inst(//輸入數字量轉換為模擬量模塊

19.clk(clk),

20.rst_n(rst_n),

21.da_clk(da_clk),

22.da_data(da_data),

23.da_ldac(da_ldac),

24.da_load(da_load),

25.data_in(wr_data)

26);

27

28key_testkey_test_inst(//按鍵控制模塊

29.clk(clk),

30.rst_n(rst_n),

31.key(key),

32.wr_data(wr_data),

33.out_data(out_data)

34);

35

36seg_numseg_num_inst(//數碼管顯示模塊

37.clk(clk),

38.rst_n(rst_n),

39.data_in(out_data),

40.seg(seg),

41.sel(sel)

42);

43

44endmodule

test頂層模塊測試代碼:

0`timescale1ns/1ns//設置仿真時間單位與精度分別為1ns/1ns

1//若設為`timescale 1ns/1ps (#200就是延時200 ns; 1ps就是仿真的精度)

2moduletest;//測試模塊:主要是將激勵信號賦相應的值,仿真之后觀察波形,驗證與實際功能是否一樣

3

4//端口信號定義,激勵信號為reg型

5regclk;

6regrst_n;

7reg[3:0]key;

8wire[7:0]seg;

9wire[2:0]sel;

10

11//模塊例化

12toptop(

13.clk(clk),

14.rst_n(rst_n),

15.key(key),

16.seg(seg),

17.sel(sel)

18);

19

20//初始化激勵,以及給相應激勵賦值

21initial

22begin

23clk=0;rst_n=0;key=4'b1111;//在復位階段,將激勵賦初值

24

25#200rst_n=1;//在延時200ns后將復位信號置為1

26

27//實現按鍵1開,關

28#500000key=4'b1110;

29#500000key=4'b1111;

30

31end

32

33always#10clk=~clk;//時鐘的表示,即每隔10ns翻轉一次,一個周期的時間即為20ns,時鐘為1/20ns = 50MHZ

34

35endmodule

仿真圖:

由于仿真時間原因,這里只測試按鍵1按下時的數碼管顯示,顯示為00100,表示通道A,RNG為1,輸入數字量為00。之后實際下板驗證,用萬用表也可測出輸入數字量對應的電壓值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dac
    dac
    +關注

    關注

    43

    文章

    1973

    瀏覽量

    189577
  • 數字信號處理

    關注

    15

    文章

    520

    瀏覽量

    45313
  • 數模轉換器
    +關注

    關注

    13

    文章

    741

    瀏覽量

    82474

原文標題:【FPGA學習】一文教你輕松實現數模轉換的設計

文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數模轉換器TLC5615的輸出做基準電壓,紋波太大怎么處理?

    需要用數模轉換器TLC5615的輸出做基準電壓,紋波太大,有一百多mV,很什么好的濾波方法,或者有那款數模轉換器輸出紋波可以保持在20mV之內。
    發表于 11-05 18:31

    【小梅哥FPGA進階教程】第三章 TLC5620型DAC驅動設計

    三、TLC5620型DAC驅動設計TLC5620型DAC芯片概述:lTLC5620C是一個具有4個獨立8位電壓輸出型DAC的數模轉換器l單電源5V供電l采用串行接口時序l具備4個高阻抗
    發表于 01-10 18:58

    請問tlc5620四通道怎么同時輸出

    請問tlc5620四通道怎么同時輸出,類似的dac方法也可以,求借鑒
    發表于 09-11 16:14

    TLC5620型DAC驅動設計

    三、TLC5620型DAC驅動設計TLC5620型DAC芯片概述: lTLC5620C是一個具有4個獨立8位電壓輸出型DAC的數模轉換器l單電源5V供電l采用串行接口時序l具備4個高阻
    發表于 01-29 03:12

    數模轉換器是什么

    數模轉換器,又稱D/A轉換器,簡稱DAC,它是把數字量轉變成模擬的器件。D/A轉換器基本上由4個部分組成,即權電阻網絡、運算放大器、基準電源和模擬開關。模數轉換器中一般都要用到
    發表于 07-26 06:44

    TLC5620芯片有何作用

    TLC5620芯片,TLC5620內部有4個DAC,全部都是8位電壓輸出型。每個DAC有一個高輸入阻抗的參考電壓輸入端口,每個DAC可以輸出一倍或者兩倍的參考電壓與GND之間的電壓值
    發表于 07-29 09:03

    串行數模轉換器TLC5620I與TMS320F2812接口設

    串行數模轉換器TLC5620I與TMS320F2812接口設計  1 引言   近年來,數字信號處理器(DSP)的應用越來越廣泛,其中TMS320F2812作為目前數字控制領域
    發表于 02-01 10:52 ?2392次閱讀
    串行<b class='flag-5'>數模轉換器</b><b class='flag-5'>TLC5620</b>I與TMS320F2812接口設

    基于TLC5620信號發生器的設計

    分析了TI公司的4路串行8位數/模轉換器TLC5620的功能、特點、工作原理,提出了一種以芯片TLC5620和EPM3128為核心設計低頻函數信號發生器的方法,給出了具體的硬件連接框圖和軟件設計流程
    發表于 06-21 16:40 ?119次下載
    基于<b class='flag-5'>TLC5620</b>信號發生器的設計

    基于TLC5620的低頻函數信號發生器設計

    介紹了采用TI公司的串行數模轉換芯片TLC5620和AT89C51單片機來產生低頻函數信號發生器的一種設計方法。利用該方案產生的波形包括正弦波、矩形波、三角波。而且頻率可調,當選擇的波
    發表于 08-22 14:49 ?126次下載
    基于<b class='flag-5'>TLC5620</b>的低頻函數信號發生器設計

    基于單片TLC5620的兩組模數和數模轉換電路設計

    分析了TI公司的4路串行8位數/模轉換器(DAC)TLC5620的功能、特點、工作原理。提出了一種由單片TLC5620組成的兩組模/數、數/模轉換電路的設計,給出了該電路的硬件接線和軟
    發表于 08-25 16:22 ?169次下載
    基于單片<b class='flag-5'>TLC5620</b>的兩組模數和<b class='flag-5'>數模</b><b class='flag-5'>轉換</b>電路設計

    TLC5620英文

    TLC5620數據手冊,又需要 的可以下來看看。
    發表于 12-16 22:19 ?0次下載

    MS5620數模轉換器概述、特點及應用

    瑞盟 MS5620 是一款具有高阻抗緩沖基準輸入的四通道串行 8 位電壓輸出數模轉換器(DAC)。完美替代TLC5620。
    的頭像 發表于 07-22 16:03 ?1170次閱讀
    MS<b class='flag-5'>5620</b><b class='flag-5'>數模轉換器</b>概述、特點及應用

    瑞盟模數轉換器MS5620,兼容替代TLC5620

    瑞盟模數轉換器MS5620,兼容替代TLC5620
    發表于 12-07 15:52 ?0次下載

    瑞盟模數轉換器MS5620,兼容替代TLC5620 4 通道 8 位數模轉換器

    瑞盟模數轉換器MS5620,兼容替代TLC56204通道8位數模轉換器
    發表于 12-07 16:02 ?0次下載

    基于FPGA的TLC5620數模轉換(DA)設計

    本設計采用串行數/模轉換芯片TLC5620,TLC5620是一個擁有四路輸出的數/模轉換器,時鐘頻率最大可達到1MHz。
    發表于 04-08 10:13 ?247次閱讀
    基于FPGA的<b class='flag-5'>TLC5620</b><b class='flag-5'>數模</b><b class='flag-5'>轉換</b>(DA)設計
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>