久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡易數字相位差計課程設計總結書

[復制鏈接]
跳轉到指定樓層
樓主
ID:295503 發表于 2018-3-22 15:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以下是內容預覽,附件中有完整版本下載:

簡易數字相位差計
課程設計總結書

學院:   機電工程學院
專業: 電氣工程及其自動化
班級:
小組:
姓名:
指導教師:
二〇一二年三月

目錄
方案設計1
    11方案概述1
    12技術指標1
工作原理1
    21系統概述1
    22脈沖計數法相位差測量原理2
器件選擇3
    31LM311P3
    32ARM開發板4
系統設計4
    41外部電路4
    42ARM開發板5
系統測試6
    51測試儀器6
    52測試方法6
    53測試結果6
    54測試出現問題及解決方法10
心得體會10
參考文獻11
附錄12


簡易數字相位差計

一、方案設計

1.1方案概述

數字相位差計包括外部電路與ARM開發板兩部分,外部電路主要利用電壓比較器,將正弦波輸入信號轉化為方波;ARM開發板主要用到的模塊為定時器模塊、計數器模塊、中斷系統模塊、CPU處理模塊和數碼管顯示模塊,系統框圖如圖1。

圖1 系統框圖

1.2技術指標

相位差測量范圍:0 ~ 180°

數碼顯示:4位數碼顯示

相位差分辨率:0.1°

識別信號范圍:電壓3V,頻率

工作方式:連續

二、工作原理

2.1系統概述

兩個同頻被測正弦信號分別經過相同型號的電壓比較器與1.5V的固定電壓比較后得到兩個有相位差的方波,然后將兩個方波輸入到ARM開發板上,由中斷系統實時監控電平變換,從而控制計數器對定時器晶振進行計數,經過算法運算后,在數碼管上顯示出相位差的數值。

2.2脈沖計數法相位差測量原理[1]

                   圖2 相位差計原理圖

設被測兩信號的時間間隔為

                                (1)

式中,—在時間內晶振計數脈沖的個數;

      —晶振信號周期。

數字式相位計波形圖如圖2所示,由圖可知

                                   (2)

式中,—兩被測信號的相位差;

      —被測信號的周期。

將式(1)帶入式(2)得

             (3)

式中,—被測信號頻率;

      —晶振信號頻率。

    若讓計數器在1s內連續計數,即1s內有個門控信號,則其累計計數為:

                                                (4)

式中,—1s中晶振累計脈沖數量。

將式(4)代入式(3)得

                                             (5)

若取晶振頻率,則

                                    (6)

三、器件選擇

3.1 LM311P

LM311P電壓比較器是單比較器可以將模擬信號轉換成二值信號,即只有高電平和低電平兩種狀態的信號。該比較器有兩個輸入端和一個輸出端。兩個輸入端一個稱為同相輸入端,用“+”表示,另一個稱為反相輸入端,用“-”表示。用作比較兩個電壓時,任意一個輸入端加一個固定電壓做參考電壓,另一端加一個待比較的信號電壓。在二者幅度相等時,輸出電壓將產生躍變,即:

當“+”端電壓高于“-”端時,輸出管截止,相當于輸出端開路。

當“-”端電壓高于“+”端時,輸出管飽和,相當于輸出端接低電位。

3.4 ARM開發板

ARM作為嵌入式系統的處理器,具有低電壓,低功耗和高集成度等特點,并具有開放性和可擴充性,其能在電源電壓為2.7V-3.6V的范圍正常工作,其對外電路的供電電源為4V。開發板包括定時器(含晶振)、計數器、中斷系統、CPU處理器、數碼管顯示器、A/D和D\A轉換器等模塊,該開發板可以應用到本設計中。

四、系統設計

4.1 外部電路


圖3 外部電路圖

    本項目外部電路由兩個如圖3所示的電路組成,其中為輸入信號(正弦波),為經過電壓比較器處理過后的輸出信號(方波)。

4.2 ARM開發板

4.2.1工作過程簡述

當ARM開發板接收到兩個輸入信號時,定時器的晶振啟動,同時中斷系統實時監控兩個輸入信號(其作用相當于“異或門”),控制計數器讀出兩信號在(0,1)或(1,0)時晶振產生的脈沖次數,并通過CPU進行算法運算,實時輸出到數碼管顯示器上(框圖如圖1 ARM開發板模塊)。

4.2.2模塊介紹

定時器:定時器的內部晶振頻率為...,可以通過分頻的方法設置所需頻率的晶振。本設計采用的是163.28Kz頻率的晶振,當檢測到輸入信號時晶振便開始產生脈沖,計數器(計數定時器)溢出周期為0.4s。由此估測所能測得最低頻率為3Hz。(輸入波形周期不能超過定時器溢出周期)。

中斷系統:本設計設置兩個中斷,采用上升沿中斷,分別捕獲輸入IO口的兩路波形的上升沿。在每個上升沿中斷處實現:

    ①定時器計數讀出;

    ②計數器清零;

    ③對累計的脈沖數進行均值算法。

計數器:由中斷系統控制,進行清零和計數這兩個任務。鑒于計數器在于累計計數時有上限,故程序設置計數器每次累計到程序設定值時自動清零。

CPU處理器:用于接收計數器輸出的數字,根據脈沖計數法相位差測量原理進行算法運算(包括平均值運算),并將結果輸出到數碼管。

數碼管顯示:本項目數碼管采用八段數碼管作為輸出顯示器件。顯示方式為動態實時顯示,并且把小數點一直顯示到最后一位,此時,LED 數碼管的第一、二、三位是用來對相位差進行顯示的,最后一位是用來進行小數顯示的。

五、系統測試

5.1測試儀器

    信號發生器、數字式相位差計。

5.2測試方法

利用信號發生器產生兩個同頻信號,不斷改變兩個信號的相位差,并分別記錄下信號發生器的相位差設設置數據與數字相位差即所測量出的數據,各7組。

5.3測試結果

5.3.1實驗數據

頻率: Hz   幅值:3V

組號

1

2

3

4

5

6

7

實際數據















測量數據

















                                       頻率:  Hz   幅值:3V

組號

1

2

3

4

5

6

7

實際數據















測量數據















                                       頻率:  Hz   幅值:3V                                                              

組號

1

2

3

4

5

6

7

實際數據















測量數據
















                                      頻率:  Hz   幅值:3V

組號

1

2

3

4

5

6

7

實際數據















測量數據
















5.3.2數據處理

算數平均值:

標準差估計值:

算數平均值的標準誤差估計值:

算數平均值的置信限:

當P=,時,查表得

測量結果:




5.3.3誤差分析

系統誤差:

(1)LM311P是高增益,寬頻帶器件,如果輸出端到輸入端有寄生電容而產生耦合,當比較器改變狀態時,輸出信號很容易產生振蕩。這種現象出現在當比較器改變狀態時,輸出電壓過渡的間隙,從而使得生成的方波產生誤差。

改進方法:采用遲滯比較器代替單限比較器,即在單限比較器電路中引入正反饋,從而加快比較器的響應速度,免除由于電路寄生耦合而產生的自激振蕩。但是反饋電阻阻值的選擇也尤為重要,反饋電阻過大導致比較器的比較精度降低,反饋電阻過小導致比較器高低電平的變化速率降低,經過多次模擬仿真,我們選擇43作為我們電路中的反饋電阻。

(2)本設計是將輸入信號與1.5V的電壓比較,大于1.5V為高電平,小于1.5V的為低電平。如圖4所示虛線為信號通過比較器后的理想輸出波形,但實際情況為圖4的實線,由于導線和電阻的影響導致固定電壓大于(或小于)1.5V,從而使得輸出方波的高電平脈寬偏小(或偏大),從而產生誤差。




圖4實際輸出方波比較圖

(3)計數器在對晶振脈沖進行計數時,脈沖頻率過高時,計數器對一個相位差脈寬脈沖過多,計數器計數準確率會降低,會產生誤差。

脈沖頻率過低時,計數器對一個相位差脈寬內的晶振脈沖計數更準確,但是脈沖數量過少不能完整表示整個相位差的脈寬,會產生誤差。

圖5 晶振脈沖示意圖

改進方法:本設計將晶振的頻率設置為163.28Kz,從而減小了由于頻率過高或過低而產生的誤差。

隨機誤差:






5.3.3結果分析






5.4測試出現問題及解決方法

  • 我們將輸入信號頻率分別設置為1kHz、100Hz、50Hz和10Hz四種情況,分別對其相位差從0°~180°,每隔30°進行測試,并記錄下數據。由實驗數據可以發現該設計的精度不高,每次測量均會偏大2°左右,產生誤差。

解決方法:這種問題是由于硬件性能不夠精準而產生的問題,我們對所測得的數組數據進行處理,即求測量數據的偏差均值,對軟件算法進行修改來補償硬件所造成的誤差。

  • 當輸入信號頻率較低為10Hz時,數碼管顯示相位差數據會出現抖動的情況,該問題屬于硬件問題,難以解決。

  • 心得體會

附錄:

主程序

  1. LDD_TDeviceData* Timer;
  2. char segment_tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. char segment[4];
  4. extern unsigned int sum_low;
  5. extern unsigned int sum_high;
  6. extern unsigned int count_low;
  7. extern unsigned int count_high;
  8. extern double fai;
  9. extern unsigned int low_time;
  10. extern unsigned int high_time;
  11. double true_fai = 1234.5;

  12. void delay_ms(int ms)
  13. {for(int i=0;i<2000*ms;i++);}

  14. void display(int num)                            //賦值
  15. {
  16.               segment[3]=segment_tab[num%10];
  17.               segment[2]=segment_tab[num/10%10]&0x7f;
  18.               segment[1]=segment_tab[num/100%10];
  19.               segment[0]=segment_tab[num/1000%10];
  20. }
  21. void display_scan()                            //顯示
  22. {
  23.               static int i=0;
  24.               DG1_PutVal(1);
  25.               DG2_PutVal(1);
  26.               DG3_PutVal(1);
  27.               DG4_PutVal(1);

  28.               segment_PutVal(segment[i]);
  29.               switch(i)
  30.               {
  31.               case 0:
  32.                             DG1_PutVal(0);
  33.                             break;
  34.               case 1:
  35.                                           DG2_PutVal(0);
  36.                                           break;
  37.               case 2:
  38.                                           DG3_PutVal(0);
  39.                                           break;
  40.               case 3:
  41.                                           DG4_PutVal(0);
  42.                                           break;

  43.               }
  44.               i=(i+1)%4;
  45. }
  46. /*lint -save  -e970 Disable MISRA rule (6.3) checking. */
  47. int main(void)
  48. /*lint -restore Enable MISRA rule (6.3) checking. */
  49. {
  50.   /* Write your local variable definition here */

  51.   /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  52.   PE_low_level_init();
  53.   Timer = TU1_Init(NULL);
  54.   /*** End of Processor Expert internal initialization.                    ***/

  55. while(1)
  56. {
  57.                             if(count_low==100&&count_high==100)
  58.               {
  59.                             fai=(double)sum_high/(sum_high+sum_low);
  60.                             if(fai<0.5)
  61.                                           true_fai=360*fai;
  62.                             else
  63.                                           true_fai=360*(1-fai);
  64.                             sum_high=0;
  65.                             sum_low=0;
  66.                             count_low=0;
  67.                             count_high=0;

  68.               }
  69.               display(sum_high);
  70.               display(true_fai*10);
  71.               display_scan();
  72.               delay_ms(1);
  73. }
  74. extern LDD_TDeviceData* Timer;
  75. unsigned int low_time;
  76. unsigned int high_time;
  77. unsigned int sum_low=0;
  78. unsigned int sum_high=0;
  79. unsigned int count_low=0;
  80. unsigned int count_high=0;
  81. double fai;

  82. 中斷1程序:
  83. void EInt1_OnInterrupt(void){
  84.   /* Write your code here ... */
  85.               unsigned char edge1;

  86.               edge1=EInt1_GetVal();
  87.               if(edge1==1)
  88.               {
  89.                             low_time=TU1_GetCounterValue(Timer);
  90.                             TU1_ResetCounter(Timer);
  91.                             if(count_low<100)
  92.                             {
  93.                                           sum_low+=low_time;
  94.                                           count_low++;
  95.                             }


  96.               }


  97. }

  98. void TU1_OnCounterRestart(LDD_TUserData *UserDataPtr)
  99. {
  100.   /* Write your code here ... */
  101. }

  102. 中斷2程序:
  103. void EInt2_OnInterrupt(void)
  104. {
  105.               unsigned char edge2;
  106.               edge2=EInt2_GetVal();
  107.               if(edge2==1)
  108.               {
  109.                             high_time=TU1_GetCounterValue(Timer);
  110.                             TU1_ResetCounter(Timer);
  111.                             if(count_high<100)
  112.                             {
  113.                                           sum_high+=high_time;
  114.                                           count_high++;
  115.                             }
  116.               }
  117. }
復制代碼

完整的Word格式文檔51黑下載地址:
相位差計.docx (260.3 KB, 下載次數: 49)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:872463 發表于 2021-1-3 10:33 | 只看該作者
您好,請問有完整的電路圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费观看一级毛片视频 | 亚洲视频第一页 | 国产精品日韩一区 | 日韩av成人在线观看 | 青青草网| 欧美精品一区在线 | 国产精品中文字幕在线播放 | 搞av.com| 亚洲欧美一区二区三区在线 | 看片wwwwwwwwwww | 日韩精品成人 | av国产在线观看 | 久久免费资源 | 欧美操操操 | 九九热在线免费观看 | 99久久精品免费看国产高清 | a在线视频观看 | 美女在线视频一区二区三区 | 日本一区不卡 | 亚洲黄色一区二区三区 | 99精品亚洲国产精品久久不卡 | 国产成人免费视频网站视频社区 | 欧美成年人网站 | 农村妇女毛片精品久久久 | 亚洲精品成人av久久 | 91九色在线观看 | 免费午夜电影 | 精品久久久久久久人人人人传媒 | 天天操伊人 | av中文字幕在线观看 | 欧美一区二区三区在线免费观看 | 精精国产xxxx视频在线播放7 | 欧美激情视频一区二区三区免费 | 国产一级片91 | pacopacomama在线 | 一级二级三级黄色 | 欧美视频一区二区三区 | 久久精品视频99 | 午夜视频在线 | 99成人| 欧美5区 |