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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+光電傳感器電機轉速測量系統設計 附程序原理圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:404202 發表于 2020-5-30 01:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本文主要針對電機的轉速進行測量,然后用數碼管把電機的轉速顯示出來!
本裝置主要有兩部分構成。1光電測速部分。2測得的脈沖處理處理和顯示部分!
光電測速部分主要由光電傳感器構成!脈沖處理部分主要經施密特觸發器對接收到的脈沖進行波形校正,由單片機的T1口輸入,經80C51處理后顯示輸出電機的轉速

下面我們來了解一下光電測速部分!
3、脈沖信號的獲得
     可以有多種方式來獲得脈沖信號,這些方法有各自的應用場合。下面逐一進行分析。

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

此主題相關圖片如下:1.jpg

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

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


圖2光電傳感器的原理圖

此主題相關圖片如下:3.jpg

圖3遮光葉片

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

此主題相關圖片如下:4.jpg


圖4 成品光電編碼器
這次課設我選的是光電傳感器,采用穿透法測量電機轉速。光電傳感器的原理上面有詳細的介紹。
當不透光的物體擋住發射與接收之間的間隙時,開關管關斷,否則打開。為此,可以制作一個遮光葉片如圖3所示,安裝在轉軸上,當扇葉經過時,產生脈沖信號。當葉片數較多時,旋轉一周可以獲得多個脈沖信號。 這里我們才用轉10個孔的方式!在一分鐘的時間內,假如產生了10000脈沖,則電機的轉速就為1000r/min.
4、硬件連接
     測速的方法決定了測速信號的硬件連接,測速實際上就是測頻,因此,頻率測量的一些原則同樣適用于測速。
     通常,可以用計數法、測脈寬法和等精度法來進行測試。所謂計數法,就是給定一個閘門時間,在閘門時間內計數輸入的脈沖個數;測脈寬法是利用待測信號的脈寬來控制計數門,對一個高精度的高頻計數信號進行計數。由于閘門與被測信號不能同步,因此,這兩種方法都存在±1誤差的問題,第一種方法適用于信號頻率高時使用,第二種方法則在信號頻率低時使用。等精度法則對高、低頻信號都有很好的適應性。
     這里為簡化討論,僅采用計數法來進行測試。

如上圖:因為光電傳感器不好仿真,這里我們采用了555芯片構成一個施密特觸發器,由光電傳感器得到的脈沖由2,5腳輸入,經3腳輸出接到單片機的T1(P3.5).。經89C51編程處理后由P1口輸出通過數碼管顯示出轉速!
5實驗程序及分析
     測量轉速,使用光電傳感器,被測電機帶動紙片旋轉,我們在紙片上開了10小孔,電機每旋轉一周就會產生10個脈沖,產生12個脈沖,要求將轉速值(轉/分)顯示在數碼管上。
實驗程序如下:
  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晶振,定時器10ms 中斷一次 我們1秒計算一次轉速 // 1000ms/10ms = 100
  12. #define PLUS_PER 10 //碼盤的齒數 ,這里假定碼盤上有10個齒,即傳感器檢測到10個脈沖,認為1圈
  13. #define K         100.0   //校準系數



  14. unsigned char code  table[]=
  15.                                           {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  16. uchar data Disbuf[4];// 顯示緩沖區
  17. uint Tcounter = 0;   //時間計數器
  18. bit Flag_Fresh = 0; // 刷新標志
  19. bit Flag_clac = 0; //計算轉速標志
  20. bit Flag_Err = 0; //超量程標志
  21. //在數碼管上顯示一個四位數
  22. void DisplayFresh();
  23. //計算轉速,并把結果放入數碼管緩沖區
  24. void ClacSpeed();
  25. //初始化定時器T0
  26. void init_timer0();
  27. //初始化定時器T1
  28. void init_timer1();
  29. //延時函數
  30. void Delay(uint ms);
  31. void it_timer0() interrupt 1 /* interrupt address is 0x000b */
  32. {
  33. TF0 = 0;       //d定時器 T0用于數碼管的動態刷新
  34.          //
  35. TH0 = 0xC0;            /* init values */
  36. TL0 = 0x00;
  37. Flag_Fresh = 1;
  38. Tcounter++;
  39. if(Tcounter>TIME_CYLC)
  40. { Flag_clac = 1;//周期到,該重新計算轉速了
  41. }
  42. }
  43. void it_timer1() interrupt 3 /* interrupt address is 0x001b */
  44. {
  45. TF1 = 0;   //定時器T1用于單位時間內收到的脈沖數
  46.                  //要速度不是很快,T1永遠不會益處
  47. Flag_Err = 1;   //如果速度很高,我們應考慮另外一種測速方法,:脈沖寬度算轉速

  48. }
  49. void main(void)
  50. {
  51. Disbuf[0] = 0; //開機時,初始化為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();    // 定時刷新數碼管顯示
  62.    }
  63.    if(Flag_clac)
  64.    { Flag_clac = 0;
  65.     ClacSpeed(); //計算轉速,并把結果放入數碼管緩沖區
  66.     Tcounter = 0;//周期定時 清零
  67.     TH1=TL1 = 0x00;//脈沖計數清零

  68.    }
  69.    if(Flag_Err)        //超量程處理
  70.    {
  71.       //數碼管顯示字母'EEEE'
  72.     Disbuf[0] = 0x9e; //開機時,初始化為0000
  73.     Disbuf[1] = 0x9e;
  74.     Disbuf[2] = 0x9e;
  75.     Disbuf[3] = 0x9e;
  76.     while(1)
  77.     { DisplayFresh();//不再測速 等待復位i
  78.     }
  79.    }

  80. }
  81. }

  82. //在數碼管上顯示一個四位數
  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. //計算轉速,并把結果放入數碼管緩沖區
  104. void ClacSpeed()
  105. {
  106. uint speed ;
  107. uint PlusCounter;

  108. PlusCounter = TH1*256 + TL1;
  109. speed = K*(PlusCounter/PLUS_PER)/60;//K是校準系數,如速度不準,調節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. //初始化定時器T0
  116. void init_timer0()
  117. {
  118. TMOD &= 0xf0; //定時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. //延時函數
  127. void Delay(uint ms)
  128. {
  129. uchar i;
  130. while(ms--)
  131.    for(i=0;i<100;i++);
  132. }
  133. //初始化定時器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. }
復制代碼

6.軟件仿真
如上圖:光電傳感器測得脈沖由555的2或5腳輸入,由555的三腳輸出,接入AT9C51的P3.5口。P2.4---P2.7為數碼管的位選端口,p1為數據端口。
7protel DXP畫出原理圖如下:
8根據原理圖得到的PCB

9、硬件調試結果:
這次設計,主要對電機進行測速,在電機的碼盤上轉了10個孔,
沒10ms 對電機測量一次轉速!由于工具不太足,做硬件的時候遇到了不少的困難!
總體來說能夠實現其基本功能!電機轉速700---1500r/min.

以上的Word格式文檔51黑下載地址:
電機轉速測量系統.doc (373.5 KB, 下載次數: 157)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2020-6-5 04:48 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:379452 發表于 2020-6-30 19:05 | 只看該作者
感謝分享,世界因你而美麗
回復

使用道具 舉報

地板
ID:495574 發表于 2020-10-1 11:07 | 只看該作者
光電傳感器什么型號
回復

使用道具 舉報

5#
ID:743531 發表于 2020-12-3 19:42 | 只看該作者
122429 發表于 2020-10-1 11:07
光電傳感器什么型號

我也想詢問一下
回復

使用道具 舉報

6#
ID:611568 發表于 2020-12-5 12:05 | 只看該作者
非常的好,學習一下下,膜拜
回復

使用道具 舉報

7#
ID:905268 發表于 2021-4-19 22:16 | 只看該作者
誰能根據樓主的資料 把仿真圖畫出來 分享一下啊?
回復

使用道具 舉報

8#
ID:938316 發表于 2021-6-16 21:27 | 只看該作者
元器件可以告訴一下嗎
回復

使用道具 舉報

9#
ID:1025010 發表于 2022-5-9 11:09 | 只看該作者
這個文章幫助到了我,讓我的思路一下子打開了,非常感謝這個論壇。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: a级片在线观看 | 亚洲一级视频在线 | 欧美高清性xxxxhdvideosex | 日韩在线看片 | 男人视频网站 | 亚洲狠狠丁香婷婷综合久久久 | 欧美亚洲一区二区三区 | 国产小视频在线观看 | 婷婷丁香激情 | 国产伦一区二区三区四区 | 午夜精品久久久久久久星辰影院 | av网站在线看 | 美女福利视频一区 | 免费高清成人 | 午夜精品网站 | 日韩中文字幕一区二区 | 日韩欧美三区 | 一区二区三区视频在线观看 | 欧美在线综合 | 精品欧美乱码久久久久久 | 久久只有精品 | 欧美成人激情 | 精品国产一区二区三区久久久蜜月 | 日韩一区二区三区四区五区 | 亚洲乱码一区二区三区在线观看 | 久久久久久久久一区 | 狠狠操狠狠搞 | 亚洲精彩视频 | 久在线观看 | 人人爽人人爽人人片av | 亚洲美女网站 | 日韩av一区二区在线观看 | 一区二区三区四区在线视频 | 国产乱精品一区二区三区 | 欧美视频在线播放 | 综合九九 | 日韩视频一区二区三区 | 国产精品福利在线 | 国产精品18hdxxxⅹ在线 | 天天操天天干天天爽 | 91精品国产综合久久久亚洲 |