欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18544|回復: 15
打印 上一主題 下一主題
收起左側

基于單片機+ADC0809的數字電流表Proteus仿真+源程序資料

  [復制鏈接]
跳轉到指定樓層
樓主

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


下面是設計文檔:
目錄


摘 要2

關鍵詞2

1 概述3

1.1設計意義

    1.2系統主要功能

2 硬件電路設計方案及描述3

2.1 設計方案

    2.2 主要元器件的介紹

    2. 3控制電路模塊

    2.4 元件清單

3數字式電流表的軟件設計16

3.1系統程序設計總方案

   3.2系統子程序設計

4數字式電流表的調試

4.1軟件調試

    4.2顯示結果及誤差分析

5總結

附錄1.電路原理圖及仿真圖

2. 程序代碼

參考文獻



基于單片機的簡易數字電流表設計

摘要

數字電流表的誕生打破了傳統電子測量儀器的模式和格局。它顯示清晰直觀、讀數準確,采用了先進的數顯技術,大大地減少了因人為因素所造成的測量誤差事件。數字電流表是建立在數字電壓表的基礎上,讓電壓表與電阻串聯,其顯示的是電流,數字電壓表是把連續的模擬量(直流輸入電壓)轉換成不連續、離散的數字形式,并加以顯示的儀表。數字電流表把電子技術、計算技術、自動化技術的成果與精密電測量技術密切的結合在一起,成為儀器、儀表領域中獨立而完整的一個分支,數字電流表標志著電子儀器領域的一場革命,也開創了現代電子測量技術的先河。本設計采用了以單片機為開發平臺,控制系采用AT89C52單片機,A/D轉換采用ADC0809。系統除能確保實現要求的功能外,還可以方便進行8路其它A/D轉換量的測量、遠程測量結果傳送等擴展功能。簡易數字電流測量電路由A/D轉換、數據處理、顯示控制等組成。

1 .概述

1.1設計意義

通過設計,掌握電子設計的一般步驟和方法,鍛煉分析問題解決問題的能力,學會如何查找所需資料,同時復習以前所學知識并加深記憶,為設計打好基礎,也為以后工作作準備。通過對選題的分析設計,學習數字電流表的工作原理、組成和特性;掌握數字電流表的校準方法和使用方法;

1.2系統主要功能

A、利用AD轉換芯片和精密電阻測量0~20mA電流

   B、系統工作符合一般數字電流表要求

2 硬件電路設計方案及描述

2.1 數字式電流表系統硬件設計   
硬件電路設計主要包括:AT89S51單片機系統,A/D轉換電路,顯示電路。測量最大電
20ma,顯示最大值為20.00ma。本實驗采用AT89S51單片機芯片配合ADC0809模/數轉換芯片構成一個簡易的數字電流表。

硬件電路設計由6個部分組成; A/D轉換電路,AT89C51單片機系統,LED顯示系統、時鐘電路、復位電路以及測量電流輸入電路。硬件電路設計框圖如圖2.1所示。

2.1數字式電流表系統硬件設計框圖

2.2.2  ADC0809內部邏輯結構

            

ADC0809的內部邏輯結構圖

圖中多路模擬開關可選通8路模擬通道,允許8路模擬量分時輸入,并共用一個A/D轉換器進行轉換。地址鎖存與譯碼電路完成對A、B、C三個地址位進行鎖存與譯碼,如表所示。


ADC0809通道選擇表


C(ADDC)

B(ADDB)

A(ADDA)

選擇的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

2.2.3 ADC0809的引腳ADC0809芯片為28引腳雙列直插式芯片,其主要功能:(1)IN0~IN7:8路模擬量輸入通道。

(2)A、B、C:模擬通道地址線。這3根地址線用于對8路模擬通道的選擇,其譯碼關系如表4.3所示。其中,A為低地址,C為高地址,引腳圖中為ADDA,ADDB和ADDC。

(3)ALE:地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。

(4)START:轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持低電平。本信號有時簡寫為ST。

(5)D7~D0:數據輸出線。為三態緩沖輸出形式,可以和單片機的數據線直接相連。D0為最低位,D7為最高。

(6)OE:輸出允許信號。用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。

(7)CLK:時鐘信號。ADC0809的內部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號。

(8)EOC:轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。使用中該狀態信號即可作為查詢的狀態標志,又可作為中斷請求信號使用。

(9)Vcc: +5V電源,GND:地。

(10)Vref:參考電壓。參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref(+)=+5V, Vref(-)=0V)。

  ADC0809的工作原理

首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。

(注意:ALE信號常與START信號連在一起,這樣連接可以在信號的前沿寫入地址信號,在其后沿啟動A/D轉換,圖為ADC0809信號的時序配合圖)。


              ADC0809信號的時序配合

2.2.3  4位一體7段LED數碼管

本實驗的顯示模塊主要由一個4位一體的7段LED數碼管(SM410564)構成,用于顯示測量到的電壓值。它是一個共陽極的數碼管,每一位數碼管的原理圖如圖4.5所示。每一位數碼管的a,b,c,d,e,f,g和dp端都各自連接在一起,用于接收AT89C52的P1口產生的顯示段碼。C1,C2,C3,C4引腳端為其位選端,用于接收AT89C52的P3口產生的位選碼。


圖4.5 一位數碼管的原理圖

  4位一體7段LED數碼管圖


2.3控制電路模塊
2.3.1  總電路

本課題實驗主要采用AT89S51芯片和ADC0809芯片來完成一個簡易的數字電壓表,能夠對輸入的0~20ma 的模擬直流電流進行測量,并通過一個4位一體的7段LED數碼管進行顯示,測量誤差約為0.02 ma。該電流表的測量電路主要由三個模塊組成:A/D轉換模塊、數據處理模塊及顯示控制模塊。A/D轉換主要由芯片ADC0809來完成,它負責把采集到的模擬量轉換為相應的數字量再傳送到數據處理模塊。數據處理則由芯片AT89S51來完成,其負責把ADC0809傳送來的數字量經一定的數據處理,產生相應的顯示碼送到顯示模塊進行顯示;另外它還控制著ADC0809芯片的工作。顯示模塊主要由7段數碼管及相應的驅動組成,顯示測量到的電流值。數字式電流表的設計的總電路圖見附錄一。


2.3.2AT89S51的復位電路和時鐘電路

AT89S51的復位電路如圖所示。當單片機一上電,立即復位;另外,如果在運行中,外界干擾等因素使單片機的程序陷入死循環狀態或“跑飛”,就可以通過按鍵使其復位。復位也是使單片機退出低功耗工作方式而進入正常狀態的一種操作。

  復位電路和時鐘電路

電容C和電阻R1實現上電自動復位。增加按鍵開關S又可實現按鍵復位功能。一般取C=10uF,R1=1KΩ。

單片機中CPU每執行一條指令,都必須在統一的時鐘脈沖的控制下嚴格按時間節拍進行,而這個時鐘脈沖是單片機控制中的時序電路發出的。CPU執行一條指令的各個微操作所對應時間順序稱為單片機的時序。MCS-51單片機芯片內部有一個高增益反相放大器,用于構成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路。

電路中的器件選擇可以通過計算和實驗確定,也可以參考一些典型電路的參數,電路中,電容器C1和C2對震蕩頻率有微調作用,通常的取值范圍是30±10pF,在這個系統中選擇了33uF;石英晶振選擇范圍最高可選24MHz,它決定了單片機電路產生的時鐘信號震蕩頻率,在本系統中選擇的是12MHz,因而時鐘信號的震蕩頻率為12MHz。

2.3.3A/D轉換電路

A/D轉換由ADC0809完成。ADC0809具有8路模擬輸入端口,地址線(23~25腳)可決定對哪一路模擬輸入作A/D轉換。22腳為地址控制,當輸入為高電平時,對地址信號進行鎖存。6腳為測試控制,當輸入一個2μs寬高電平脈沖時,就開始A/D轉換。7腳為A/D轉換結束標志,當A/D轉換結束時,7腳輸出高電平。9腳為A/D轉換數據輸出允許控制,當OE腳為高電平時,A/D轉換數據從該端口輸出。10腳為ADC0809的時鐘輸入端,利用單片機AT89S51的30腳的六分頻晶振頻率再通過14024二分頻得到1MHz時鐘。AT89S51與ADC0809的連接電路原理圖如圖所示。

           AT89S51與ADC0809的連接電路原理圖


AT89S51與ADC0809的連接必須注意處理好3個問題:

(1)在START端送一個100μs寬的啟動正脈沖;

              (2)獲取EOC端上的狀態信息,因為它是A/D轉換的結束標志;

  • 給“三態輸出鎖存器”分配一個端口地址,也就是給OE端送一個地址譯碼器的輸出信號。
2.3.4顯示電路

由于單片機的并行口不能直接驅動LED顯示器,所以,在一般情況下,必須采用專用的驅動電路芯片,使之產生足夠大的電流,顯示器才能正常工作[7]。如果驅動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅動電路長期在超負荷下運行容易損壞,因此,LED顯示器的驅動電路設計是一個非常重要的問題。

為了簡化數字式直流電流表的電路設計,在LED驅動電路的設計上,可以利用單片機P0口上外接的上拉電阻來實現,即將LED的A-G段顯示引腳和DP小數點顯示引腳并聯到P0口與上拉電阻之間,這樣,就可以加大P0口作為輸出口德驅動能力,使得LED能按照正常的亮度顯示出數字。

系統采用動態顯示方式驅動4個數碼管工作,顯示電路與單片機的P1口相連來顯示采集到的電流值。

顯示電路原理圖

2.4 元件清單

器件類型

器件名

數值

數量

單片機

AT89S51


1

A/D轉換器

ADC0809


1

數碼管

TSEG-MP*4-CA-BLUE


1

電容

C1、C2

33uF

2

電解電容

C3

10uF

1

電阻

R1

10K

2

排阻

RP1

200

1

電阻

R2

250

1

晶振

X1

12MHz

1

3數字式電流表的軟件設計3.1系統程序設計總方案
   根據模塊的劃分原則,將該程序劃分初始化模塊,A/D轉換子程序和顯示子程序,這三個程序模塊構成了整個系統軟件的主程序。
數字式直流電流表主程序框圖

3.2系統子程序設計3.2.2初始化程序

所謂初始化,是對將要用到的c51系列單片機內部部件或擴展芯片進行初始工作狀態設定,初始化子程序的主要工作是設置定時器的工作模式,初值預置,開中斷和打開定時器等。

3.2.3A/D轉換子程序

A/D轉換子程序用來控制對輸入的模塊電流信號的采集測量,并將對應的數值存入相應的內存單元,其轉換流程圖。

   A/D轉換流程圖


3.2.4顯示子程序

顯示子程序采用動態掃描實現四位數碼管的數值顯示,在采用動態掃描顯示方式時,要使得LED顯示的比較均勻,又有足夠的亮度,需要設置適當的掃描頻率,當掃描頻率在70HZ左右時,能夠產生比較好的顯示效果,一般可以采用間隔10ms對LED進行動態掃描一次,每一位LED的顯示時間為1ms。

在本設計中,為了簡化硬件設計,主要采用軟件定時的方式,即用定時器0溢出中斷功能實現11μs定時,通過軟件延時程序來實現5ms的延時。其轉換流程圖如圖5.3所示。

                       顯示子程序流程圖

4數字式電流表的調試

4.1軟件調試

    軟件調試的主要任務是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的。Proteus軟件可以對基于微控制器的設計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。Proteus支持的微處理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成單片機系統原理圖電路繪制、PCB設計,更為顯著點的特點是可以與u Visions3 IDE工具軟件結合進行編程仿真調試。

本系統的調試主要以軟件為主,其中,系統電路圖的繪制和仿真我采用的是Proteus軟件,而程序方面,采用的是C語言。
4.2顯示結果及誤差分析1.1.1        顯示結果
  • 當IN0口輸入電0ma時,顯示結果如圖所示,測量誤差為0ma。


2.當IN0口輸入電流為10.50ma時,顯示結果如圖所示,測量誤差為0ma。



3. 當IN0口輸入電流為5ma時,顯示結果如圖所示,測量誤差為0.01ma。

4. 當IN0口輸入電壓流為15ma時,顯示結果如圖所示,測量誤差為0.02ma。

誤差分析

通過以上仿真測量結果可得到簡易數字電壓表與“標準”數字電壓表對比測試表,如下表

簡易數字電流表與“標準”數字電流表對比測試表


標準電流值/A

簡易電流表測量值/A

絕對誤差/A

0.00

0.00

0.00

2.00

2.01

0.01

4.00

4.00

0.00

6.00

6.02

0.02

8.00

8.01

0.01

10.00

10.01

0.01

12.00

11.98

0.02

14.00

14.00

0.00

16.00

15.98

0.02

20.00

20.00

0.00


  從上表可以看出,簡易數字電流表測得的值基本上比標準電壓值偏大0-0.02mA,這可以通過校正ADC0809的基準電壓來解決。因為該電流表設計時直接用5A的供電電源作為電壓,所以電壓可能有偏差。當要測量電流大于5V所對應的電流時,可在輸入口使用分壓電阻,而程序中只要將計算程序的除數進行調整就可以了。
5.總結

這次的單片機設計,是把硬件和軟件結合起來的設計,,其硬件電路是比復雜的,需要足夠的耐心加細心,同時也需要一定的硬件知識基礎。只有這樣才能保證電路的成功。而且在這次設計中硬件是基礎,只有把基礎打好才會有更高的設計。硬件工作完成了就是解決程序設計的問題,程序設計是一個很靈活的東西,它反映了我們解決問題的邏輯思維和創新能力,它是一個設計的靈魂所在。

要設計一個成功的電路,必須要有耐心,要有堅持的毅力。在整個電路的設計過程中,花費時間最多的是各個單元電路的連接及電路的細節設計上,如在多種方案的選擇中,我們仔細比較分析其原理以及可行的原因。這就要求我們對硬件系統中各組件部分有充分透徹的理解和研究,并能對之靈活應用。通過這次實訓,我在書本理論知識的基礎上又有了更深層次的理解。

此次設計,學到了很多課內學不到的東西,比如獨立思考解決問題,出現差錯的隨機應變,和與人合作共同提高,都受益非淺。

附錄1 總電路原理圖及仿真圖
電路原理圖
                          仿真圖

單片機源程序如下:
  1. #include<reg52.h>
  2. unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. unsigned char dispbuf[4];
  4. unsigned int i;
  5. unsigned int j;
  6. unsigned char getdata;
  7. unsigned int temp;
  8. unsigned int temp1;
  9. unsigned char count;
  10. unsigned char d;
  11. sbit ST=P3^0;
  12. sbit OE=P3^1;
  13. sbit EOC=P3^2;
  14. sbit CLK=P3^3;
  15. sbit P34=P3^4;
  16. sbit P35=P3^5;
  17. sbit P36=P3^6;
  18. sbit P20=P2^0;
  19. sbit P21=P2^1;
  20. sbit P22=P2^2;
  21. sbit P23=P2^3;
  22. sbit P17=P1^7;
  23. void TimeInitial();
  24. void Delay(unsigned int i);

  25. void TimeInitial()
  26. { TMOD=0x10;
  27. TH1=(65536-200)/256;
  28. TL1=(65536-200)%256;
  29. EA=1;
  30. ET1=1;
  31. TR1=1;
  32. }
  33. void Delay(unsigned int i)
  34. {
  35.   unsigned int j;
  36.   for(;i>0;i--)
  37.   {
  38.   for(j=0;j<125;j++)
  39.   {;}
  40.   }
  41. }

  42. void Display()

  43. {
  44. P1=~dispbitcode[dispbuf[3]];
  45. P20=1;
  46. P21=0;
  47. P22=0;
  48. P23=0;
  49. Delay(10);
  50. P1=0xFF;
  51. P1=~dispbitcode[dispbuf[2]];
  52. P17=0;
  53. P20=0;
  54. P21=1;
  55. P22=0;
  56. P23=0;
  57. Delay(10);
  58. P1=0xFF;
  59. P1=~dispbitcode[dispbuf[1]];
  60. P20=0;
  61. P21=0;
  62. P22=1;
  63. P23=0;
  64. Delay(10);
  65. P1=0xFF;
  66. P1=~dispbitcode[dispbuf[0]];
  67. P20=0;
  68. P21=0;
  69. P22=0;
  70. P23=1;
  71. Delay(10);
  72. P1=0xFF;
  73. }
  74. void main()
  75. {
  76. TimeInitial();
  77. while(1)
  78. {
  79. ST=0;
  80. OE=0;
  81. ST=1;
  82. ST=0;

  83. while(EOC==0);
  84. OE=1;
  85. getdata=P0;
  86. OE=0;
  87. temp=getdata*1.0/255*2000;
  88. dispbuf[0]=temp%10;
  89. dispbuf[1]=temp/10%10;
  90. dispbuf[2]=temp/100%10;
  91. dispbuf[3]=temp/1000;
  92. Display();

  93. }
  94. }

  95. void t1(void) interrupt 3 using 0
  96. {
  97.   TH1=(65536-200)/256;
  98.   TL1=(65536-200)%256;
  99.   CLK=~CLK;
  100.   }
復制代碼


所有資料51hei提供下載,仿真是Proteus7.5版本的dsn文件:
單片機設計—簡易數字電流表.7z (236.84 KB, 下載次數: 507)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:69408 發表于 2018-9-9 21:57 | 只看該作者
下載學習學習,謝謝樓主分享!仿真要Proteus7.5才能打開
回復

使用道具 舉報

板凳
ID:459831 發表于 2019-1-2 10:49 | 只看該作者
樓主大大請問怎么把量程改成4-20ma?
回復

使用道具 舉報

地板
ID:442952 發表于 2019-4-10 07:45 來自觸屏版 | 只看該作者
樓樓主大大,怎么把量程改成0~20A
回復

使用道具 舉報

5#
ID:518574 發表于 2019-4-30 17:27 | 只看該作者
樓主   你這個代碼。。。。。。   心就不疼嗎
回復

使用道具 舉報

6#
ID:693122 發表于 2020-2-14 12:03 | 只看該作者
這代碼有點厲害啊。。
回復

使用道具 舉報

7#
ID:696049 發表于 2020-2-22 10:53 | 只看該作者
想知道想改量程為A該怎么改呀
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
9#
ID:696049 發表于 2020-2-22 14:24 | 只看該作者
請問怎么改量程呢
回復

使用道具 舉報

10#
ID:530343 發表于 2020-3-14 17:21 | 只看該作者
改取樣電阻
回復

使用道具 舉報

11#
無效樓層,該帖已經被刪除
12#
ID:754077 發表于 2020-5-22 14:22 | 只看該作者
謝謝分享,用Proteus7.5打開

51hei.gif (298.06 KB, 下載次數: 89)

51hei.gif
回復

使用道具 舉報

13#
ID:597316 發表于 2020-6-9 16:36 | 只看該作者
太好了,解決了我目前遇到的問題,非常感謝
回復

使用道具 舉報

14#
ID:744425 發表于 2020-6-10 11:26 | 只看該作者
請問如果不用定時器制造時鐘信號,而直接用脈沖發生器應該怎么改?
回復

使用道具 舉報

15#
ID:797821 發表于 2020-7-6 13:47 | 只看該作者
這個資料能做成硬板PCB嗎?我想試一下
回復

使用道具 舉報

16#
ID:234560 發表于 2020-7-10 16:42 | 只看該作者
這個壇子里的人是不是多數都是在校大學生啊,電壓表不做過壓保護,電流表不做過流保護,做著玩玩還行,完全沒有實用性。
回復

使用道具 舉報

17#
ID:859497 發表于 2020-12-17 13:52 | 只看該作者
[SPICE] I1: unknown controlling source (null)
Real Time Simulation failed to start.
這是怎么回事呢
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
19#
ID:968948 發表于 2021-9-28 21:42 來自觸屏版 | 只看該作者
我這么運行不出來啊?
回復

使用道具 舉報

20#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

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