標(biāo)題: 電機(jī)轉(zhuǎn)速測量系統(tǒng)的設(shè)計(jì) 附單片機(jī)源碼與詳細(xì)講解 [打印本頁]

作者: jzx1122    時(shí)間: 2018-5-6 21:57
標(biāo)題: 電機(jī)轉(zhuǎn)速測量系統(tǒng)的設(shè)計(jì) 附單片機(jī)源碼與詳細(xì)講解
電機(jī)課程設(shè)計(jì)

題    目: 電機(jī)轉(zhuǎn)速測量系統(tǒng)                              
院 (系): 機(jī)電工程學(xué)院               
專    業(yè): 電氣工程及其自動(dòng)化               
目錄:
1、摘要3
2、系統(tǒng)結(jié)構(gòu)3
3、獲取脈沖信號的方法4
3、1霍爾傳感器4
3、2 光電傳感器5
3.3光電編碼器6
4、硬件連接圖及原理6
5、實(shí)驗(yàn)程序及分析8
6.仿真15
7、PROTEL  DXP原理圖16
8、PCB圖16
9、硬件調(diào)試結(jié)果與分析17
10、謝詞17
11、參考文獻(xiàn)18

1.摘要
測速是工農(nóng)業(yè)生產(chǎn)中經(jīng)常遇到的問題,學(xué)會(huì)使用單片機(jī)技術(shù)設(shè)計(jì)測速儀表具有很重要的意義。
     要測速,首先要解決是采樣的問題。在使用模擬技術(shù)制作測速表時(shí),常用測速發(fā)電機(jī)的方法,即將測速發(fā)電機(jī)的轉(zhuǎn)軸與待測軸相連,測速發(fā)電機(jī)的電壓高低反映了轉(zhuǎn)速的高低。使用單片機(jī)進(jìn)行測速,可以使用簡單的脈沖計(jì)數(shù)法。只要轉(zhuǎn)軸每旋轉(zhuǎn)一周,產(chǎn)生一個(gè)或固定的多個(gè)脈沖,并將脈沖送入單片機(jī)中進(jìn)行計(jì)數(shù),即可獲得轉(zhuǎn)速的信息。
2.系統(tǒng)結(jié)構(gòu)
本文主要針對電機(jī)的轉(zhuǎn)速進(jìn)行測量,然后用數(shù)碼管把電機(jī)的轉(zhuǎn)速顯示出來!
本裝置主要有兩部分構(gòu)成。1光電測速部分。2測得的脈沖處理處理和顯示部分!
光電測速部分主要由光電傳感器構(gòu)成!脈沖處理部分主要經(jīng)施密特觸發(fā)器對接收到的脈沖進(jìn)行波形校正,由單片機(jī)的T1口輸入,經(jīng)80C51處理后顯示輸出電機(jī)的轉(zhuǎn)速
下面我們來了解一下光電測速部分!
。
3、脈沖信號的獲得
     可以有多種方式來獲得脈沖信號,這些方法有各自的應(yīng)用場合。下面逐一進(jìn)行分析。

31霍爾傳感器
     霍爾傳感器是對磁敏感的傳感元件,常用于開關(guān)信號采集的有CS3020、CS3040等,這種傳感器是一個(gè)3端器件,外形與三極管相似,只要接上電源、地,即可工作,輸出通常是集電極開路(OC)門輸出,工作電壓范圍寬,使用非常方便。如圖1所示是CS3020的外形圖,將有字面對準(zhǔn)自己,三根引腳從左向右分別是Vcc,地,輸出。

   圖1 CS3020外形圖
     使用霍爾傳感器獲得脈沖信號,其機(jī)械結(jié)構(gòu)也可以做得較為簡單,只要在轉(zhuǎn)軸的圓周上粘上一粒磁鋼,讓霍爾開關(guān)靠近磁鋼,就有信號輸出,轉(zhuǎn)軸旋轉(zhuǎn)時(shí),就會(huì)不斷地產(chǎn)生脈沖信號輸出。如果在圓周上粘上多粒磁鋼,可以實(shí)現(xiàn)旋轉(zhuǎn)一周,獲得多個(gè)脈沖輸出。在粘磁鋼時(shí)要注意,霍爾傳感器對磁場方向敏感,粘之前可以先手動(dòng)接近一下傳感器,如果沒有信號輸出,可以換一個(gè)方向再試。 這種傳感器不怕灰塵、油污,在工業(yè)現(xiàn)場應(yīng)用廣泛。

3.2.光電傳感器
     光電傳感器是應(yīng)用非常廣泛的一種器件,有各種各樣的形式,如透射式、反射式等,基本的原理就是當(dāng)發(fā)射管光照射到接收管時(shí),接收管導(dǎo)通,反之關(guān)斷。以透射式為例,如圖2所示,當(dāng)不透光的物體擋住發(fā)射與接收之間的間隙時(shí),開關(guān)管關(guān)斷,否則打開。為此,可以制作一個(gè)遮光葉片如圖3所示,安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過時(shí),產(chǎn)生脈沖信號。當(dāng)葉片數(shù)較多時(shí),旋轉(zhuǎn)一周可以獲得多個(gè)脈沖信號。


圖2光電傳感器的原理圖

圖3遮光葉片

3.3.光電編碼器
     光電編碼器的工作原理與光電傳感器一樣,不過它已將光電傳感器、電子電路、碼盤等做成一個(gè)整體,只要用連軸器將光電傳感器的軸與轉(zhuǎn)軸相連,就能獲得多種輸出信號。它廣泛應(yīng)用于數(shù)控機(jī)床、回轉(zhuǎn)臺(tái)、伺服傳動(dòng)、機(jī)器人、雷達(dá)、軍事目標(biāo)測定等需要檢測角度的裝置和設(shè)備中。如圖4所示,是某光電編碼器的外形。


圖4 成品光電編碼器
這次課設(shè)我選的是光電傳感器,采用穿透法測量電機(jī)轉(zhuǎn)速。光電傳感器的原理上面有詳細(xì)的介紹。
當(dāng)不透光的物體擋住發(fā)射與接收之間的間隙時(shí),開關(guān)管關(guān)斷,否則打開。為此,可以制作一個(gè)遮光葉片如圖3所示,安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過時(shí),產(chǎn)生脈沖信號。當(dāng)葉片數(shù)較多時(shí),旋轉(zhuǎn)一周可以獲得多個(gè)脈沖信號。 這里我們才用轉(zhuǎn)10個(gè)孔的方式!在一分鐘的時(shí)間內(nèi),假如產(chǎn)生了10000脈沖,則電機(jī)的轉(zhuǎn)速就為1000r/min.
4、硬件連接
     測速的方法決定了測速信號的硬件連接,測速實(shí)際上就是測頻,因此,頻率測量的一些原則同樣適用于測速。
     通常,可以用計(jì)數(shù)法、測脈寬法和等精度法來進(jìn)行測試。所謂計(jì)數(shù)法,就是給定一個(gè)閘門時(shí)間,在閘門時(shí)間內(nèi)計(jì)數(shù)輸入的脈沖個(gè)數(shù);測脈寬法是利用待測信號的脈寬來控制計(jì)數(shù)門,對一個(gè)高精度的高頻計(jì)數(shù)信號進(jìn)行計(jì)數(shù)。由于閘門與被測信號不能同步,因此,這兩種方法都存在±1誤差的問題,第一種方法適用于信號頻率高時(shí)使用,第二種方法則在信號頻率低時(shí)使用。等精度法則對高、低頻信號都有很好的適應(yīng)性。
     這里為簡化討論,僅采用計(jì)數(shù)法來進(jìn)行測試。
如上圖:因?yàn)楣怆妭鞲衅鞑缓梅抡,這里我們采用了555芯片構(gòu)成一個(gè)施密特觸發(fā)器,由光電傳感器得到的脈沖由2,5腳輸入,經(jīng)3腳輸出接到單片機(jī)的T1(P3.5).。經(jīng)89C51編程處理后由P1口輸出通過數(shù)碼管顯示出轉(zhuǎn)速!
5實(shí)驗(yàn)程序及分析
     測量轉(zhuǎn)速,使用光電傳感器,被測電機(jī)帶動(dòng)紙片旋轉(zhuǎn),我們在紙片上開了10小孔,電機(jī)每旋轉(zhuǎn)一周就會(huì)產(chǎn)生10個(gè)脈沖,產(chǎn)生12個(gè)脈沖,要求將轉(zhuǎn)速值(轉(zhuǎn)/分)顯示在數(shù)碼管上。

6.軟件仿真
如上圖:光電傳感器測得脈沖由555的2或5腳輸入,由555的三腳輸出,接入AT9C51的P3.5口。P2.4---P2.7為數(shù)碼管的位選端口,p1為數(shù)據(jù)端口。
7protel DXP畫出原理圖如下:
8、根據(jù)原理圖得到的PCB
9、硬件調(diào)試結(jié)果:
這次課程設(shè)計(jì),主要對電機(jī)進(jìn)行測速,在電機(jī)的碼盤上轉(zhuǎn)了10個(gè)孔,
沒10ms 對電機(jī)測量一次轉(zhuǎn)速!由于工具不太足,做硬件的時(shí)候遇到了不少的困難!
總體來說能夠?qū)崿F(xiàn)其基本功能!電機(jī)轉(zhuǎn)速700---1500r/min.
謝詞:謝謝高老師對我們這次課程設(shè)計(jì)的指導(dǎo),在很多模糊的部分給出很多很好的意見,例如光電測速部分等等,再一次謝謝高老師。
10、參考文獻(xiàn):
電工電子技術(shù)實(shí)踐教程          化學(xué)工業(yè)出版社
單片機(jī)原理及應(yīng)用              機(jī)械工業(yè)出版社

單片機(jī)源程序如下:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. #define LED_DAT P1
  6. sbit LED_SEG0 = P0^3;
  7. sbit LED_SEG1 = P0^2;
  8. sbit LED_SEG2 = P0^1;
  9. sbit LED_SEG3 = P0^0;
  10. //sbit pin_SpeedSenser = P3^5; //光電傳感器信號接在T1上
  11. #define TIME_CYLC 100 //12M晶振,定時(shí)器10ms 中斷一次 我們1秒計(jì)算一次轉(zhuǎn)速 // 1000ms/10ms = 100
  12. #define PLUS_PER 10 //碼盤的齒數(shù) ,這里假定碼盤上有10個(gè)齒,即傳感器檢測到10個(gè)脈沖,認(rèn)為1圈
  13. #define K         100.0   //校準(zhǔn)系數(shù)
  14. unsigned char code  table[]=
  15.                                           {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  16. uchar data Disbuf[4];// 顯示緩沖區(qū)
  17. uint Tcounter = 0;   //時(shí)間計(jì)數(shù)器
  18. bit Flag_Fresh = 0; // 刷新標(biāo)志
  19. bit Flag_clac = 0; //計(jì)算轉(zhuǎn)速標(biāo)志
  20. bit Flag_Err = 0; //超量程標(biāo)志
  21. //在數(shù)碼管上顯示一個(gè)四位數(shù)
  22. void DisplayFresh();
  23. //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū)
  24. void ClacSpeed();
  25. //初始化定時(shí)器T0
  26. void init_timer0();
  27. //初始化定時(shí)器T1
  28. void init_timer1();
  29. //延時(shí)函數(shù)
  30. void Delay(uint ms);
  31. void it_timer0() interrupt 1 /* interrupt address is 0x000b */
  32. {
  33. TF0 = 0;       //d定時(shí)器 T0用于數(shù)碼管的動(dòng)態(tài)刷新
  34.          //
  35. TH0 = 0xC0;            /* init values */
  36. TL0 = 0x00;
  37. Flag_Fresh = 1;
  38. Tcounter++;
  39. if(Tcounter>TIME_CYLC)
  40. { Flag_clac = 1;//周期到,該重新計(jì)算轉(zhuǎn)速了
  41. }
  42. }
  43. void it_timer1() interrupt 3 /* interrupt address is 0x001b */
  44. {
  45. TF1 = 0;   //定時(shí)器T1用于單位時(shí)間內(nèi)收到的脈沖數(shù)
  46.                  //要速度不是很快,T1永遠(yuǎn)不會(huì)益處
  47. Flag_Err = 1;   //如果速度很高,我們應(yīng)考慮另外一種測速方法,:脈沖寬度算轉(zhuǎn)速
  48. }
  49. void main(void)
  50. {
  51. Disbuf[0] = 0; //開機(jī)時(shí),初始化為0000
  52. Disbuf[1] = 0;
  53. Disbuf[2] = 0;
  54. Disbuf[3] = 0;
  55.    init_timer0();
  56. init_timer1();
  57. while(1)
  58. {
  59. if(Flag_Fresh)
  60.    { Flag_Fresh = 0;
  61.     DisplayFresh();    // 定時(shí)刷新數(shù)碼管顯示
  62.    }
  63.    if(Flag_clac)
  64.    { Flag_clac = 0;
  65.     ClacSpeed(); //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū)
  66.     Tcounter = 0;//周期定時(shí) 清零
  67.     TH1=TL1 = 0x00;//脈沖計(jì)數(shù)清零
  68.    }
  69.    if(Flag_Err)        //超量程處理
  70.    {
  71.       //數(shù)碼管顯示字母'EEEE'
  72.     Disbuf[0] = 0x9e; //開機(jī)時(shí),初始化為0000
  73.     Disbuf[1] = 0x9e;
  74.     Disbuf[2] = 0x9e;
  75.     Disbuf[3] = 0x9e;
  76.     while(1)
  77.     { DisplayFresh();//不再測速 等待復(fù)位i
  78.     }
  79.    }
  80. }
  81. }
  82. //在數(shù)碼管上顯示一個(gè)四位數(shù)
  83. void DisplayFresh()
  84. {
  85. P2 |= 0xF0;
  86. LED_SEG0 = 0;
  87. LED_DAT = table[Disbuf[0]];
  88. Delay(1);
  89. P2 |= 0xF0;
  90. LED_SEG1 = 0;
  91. LED_DAT = table[Disbuf[1]];
  92. Delay(1);
  93. P2 |= 0xF0;
  94. LED_SEG2 = 0;
  95. LED_DAT = table[Disbuf[2]];
  96. Delay(1);
  97. P2 |= 0xF0;
  98. LED_SEG3 = 0;
  99. LED_DAT = table[Disbuf[3]];
  100. Delay(1);
  101. P2 |= 0xF0;
  102. }
  103. //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū)
  104. void ClacSpeed()
  105. {
  106. uint speed ;
  107. uint PlusCounter;
  108. PlusCounter = TH1*256 + TL1;
  109. speed = K*(PlusCounter/PLUS_PER)/60;//K是校準(zhǔn)系數(shù),如速度不準(zhǔn),調(diào)節(jié)K的大小
  110. Disbuf[0] = (speed/1000)%10;
  111. Disbuf[1] = (speed/100)%10;
  112. Disbuf[2] = (speed/10)%10;
  113. Disbuf[3] = speed%10;
  114. }
  115. //初始化定時(shí)器T0
  116. void init_timer0()
  117. {
  118. TMOD &= 0xf0; //定時(shí)10毫秒         /* Timer 0 mode 1 with software gate */
  119. TMOD |= 0x01;              /* GATE0=0; C/T0#=0; M10=0; M00=1; */
  120. TH0 = 0xC0;            /* init values */
  121. TL0 = 0x00;
  122. ET0=1;                     /* enable timer0 interrupt */
  123. EA=1;                /* enable interrupts */
  124. TR0=1;               /* timer0 run */
  125. }
  126. //延時(shí)函數(shù)
  127. void Delay(uint ms)
  128. {
  129. uchar i;
  130. while(ms--)
  131.    for(i=0;i<100;i++);
  132. }
  133. //初始化定時(shí)器T1
  134. void init_timer1()
  135. {
  136. TMOD &= 0x0F;         /* Counter 1 mode 1 with software gate */
  137. TMOD |= 0x50;              /* GATE0=0; C/T0#=1; M10=0; M00=1; */
  138. TH1 = 0x00;            /* init values */
  139. TL1 = 0x00;
  140. ET1=1;                     /* enable timer1 interrupt */
  141. EA=1;                /* enable interrupts */
  142. TR1=1;               /* timer1 run */
  143. }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
0014、電機(jī)轉(zhuǎn)速測量系統(tǒng)論文.rar (307.65 KB, 下載次數(shù): 150)



作者: 真后悔    時(shí)間: 2018-5-16 07:03
用的是你的程序和電路圖 數(shù)碼管顯示只有一半
作者: slax01    時(shí)間: 2018-5-22 17:09
顯示不全啊,老哥
作者: 小UUYou    時(shí)間: 2019-2-25 20:23
下載不了有人能傳給我嗎 5555555
作者: H昌S    時(shí)間: 2019-4-8 22:38
有沒有想過有單片機(jī)與LABVIEW實(shí)現(xiàn)串口通信,用LabVIEW處理信號,單單速度信號沒很大的用
作者: axiazaici    時(shí)間: 2019-6-30 14:37
求得轉(zhuǎn)速該是平均轉(zhuǎn)速
作者: waterbaby2011    時(shí)間: 2020-7-31 17:53
部分程序是不是丟失了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1