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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

完整的單片機霍爾測速程序+原理圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:81140 發表于 2016-6-30 19:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
經本人編寫的正確的霍爾測速程序以及正確的原理圖
  1. /************霍爾測速儀******************/
  2. /****************************************/
  3. /****************************************/
  4. /**編寫人:劉夢宇**/
  5. /**主控芯片:STC89C52RC**/
  6. /**晶振12MHZ**/
  7. #include<reg52.h>
  8. #include<intrins.h>
  9. #define uint8 unsigned char
  10. #define uint16 unsigned int
  11. #define CMD 0x00
  12. #define DAT 0x01
  13. #define DataPort P0//LCD數據口
  14. sbit RW=P2^6;         
  15. sbit RS=P2^5;
  16. sbit E=P2^7;
  17. uint16 N=0;
  18. uint8 C_50ms;
  19. uint8 Z=0;
  20. uint8 count=0;
  21. bit flag_1s=0;
  22. /**ms級延時子程序**/
  23. void delay(uint16 t)
  24. {
  25.         uint16 a;
  26.         for(;t>0;t--)
  27.                 for(a=123;a>0;a--);
  28. }
  29. /**LCD時序**/
  30. void write_LCD(uint8 dat,bit rs)
  31. {
  32.         E=0;
  33.         RW=0;
  34.         RS=rs;//選擇指令or數據
  35.         _nop_();
  36.         _nop_();
  37.         _nop_();
  38.         E=1;
  39.         _nop_();//delay(1);
  40.         _nop_();
  41.         _nop_();
  42.         DataPort=dat;//將數據送到LCD數據口
  43.         _nop_();
  44.         _nop_();
  45.         _nop_();
  46.         E=0;
  47.         delay(1);
  48. }
  49. /**LCD選擇顯示位置子函數**/
  50. void SetXY(uint8 x,uint8 y)
  51. {
  52.         x=x&0x0f;//防止X、Y        超過量程
  53.         y=y&0x01;
  54.         if(y)
  55.         {
  56.                 write_LCD(0x80+x,CMD);
  57.         }
  58.         else
  59.         {
  60.                 write_LCD(0xc0+x,CMD);
  61.         }
  62. }
  63. /**轉速數值轉換子函數**/
  64. void disload(uint16 a)
  65. {
  66.         SetXY(4,0);
  67.         write_LCD(a/1000+'0',DAT);
  68.         write_LCD(a%1000/100+'0',DAT);
  69.         write_LCD(a%100/10+'0',DAT);
  70.         write_LCD(a%10+'0',DAT);
  71.         write_LCD('r',DAT);
  72.         write_LCD('/',DAT);
  73.         write_LCD('m',DAT);
  74.         write_LCD('i',DAT);
  75.         write_LCD('n',DAT);
  76. }
  77. /**LCD字符指針函數**/
  78. void LCD_wrstr(uint8*str)
  79. {
  80.         while(*str!='\0')
  81.         {
  82.                 write_LCD(*str,DAT);
  83.                 str++;
  84.         }
  85. }
  86. /**初始化子程序**/
  87. void All_init()
  88. {
  89.         delay(500);
  90.         write_LCD(0x38,CMD);
  91.         write_LCD(0x38,CMD);
  92.         write_LCD(0x0c,CMD);
  93.         write_LCD(0x01,CMD);
  94.         delay(10);

  95.         SetXY(0,1);//設置標題顯示位置
  96.         LCD_wrstr("Tachometer:");
  97.        
  98.         TMOD=0x01;//設置T0位工作方式1——作為16位定時器
  99.         ET0=1;//打開定時器0的中斷
  100.         TR0=1;//打開定時器0
  101.         TH0=(65536-50000)/256;//裝入初值
  102.         TL0=(65536-50000)%256;
  103.         IT0=1;//外部中斷0為下降沿中斷
  104.         EX0=1;//打開外部中斷               
  105.         EA=1;//打開總中斷
  106. }
  107. void main()
  108. {
  109.         All_init();//先進行初始化
  110.         while(1)
  111.         {
  112.                 if(flag_1s==1)
  113.                 {
  114.                         flag_1s=0;//1s標志位清零
  115.                         disload(N);
  116.                 }
  117.         }

  118. }
  119. /**定時器0中斷服務子程序**/                                          
  120. void timer0() interrupt 1
  121. {
  122.         TH0=(65536-50000)/256;
  123.         TL0=(65536-50000)%256;
  124.         if(++C_50ms>19)
  125.         {
  126.                 EX0=0;//關閉外部中斷0
  127.                 C_50ms=0;//定時1s之后C_50ms清零
  128.                 N=60*Z;//計算轉速
  129.                 Z=0;//初始化圈數
  130.                 flag_1s=1;//1s標志位置1
  131.                 TH0=0x3c;//重新賦值
  132.                 TL0=0xb0;               
  133.                 EX0=1;//打開外部中斷0,開始計數。
  134.         }
  135. }
  136. void wai0() interrupt 0
  137. {
  138.         count++;
  139.         if(count==2) //兩次外部脈沖,電機轉一圈。
  140.         {
  141.                 Z++;//轉圈+1
  142.                 count=0;//初始計數值
  143.         }
  144.        
  145. }
復制代碼

霍爾測速儀.pdf

176.55 KB, 下載次數: 549, 下載積分: 黑幣 -5

原理圖

正確的霍爾測速程序.doc

36.5 KB, 下載次數: 586, 下載積分: 黑幣 -5

程序

評分

參與人數 5黑幣 +68 收起 理由
sky日耀 + 4 很給力!
北冥2017 + 1 贊一個!
哎喲喂,懂了! + 8 共享資料的黑幣獎勵!
xinwuwobu + 5 正在學習這個感謝分享
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2016-7-1 00:35 | 只看該作者
霍爾測速的好東東,對初學者很有幫助,51黑有你更精彩!!
回復

使用道具 舉報

板凳
ID:105804 發表于 2016-7-1 07:01 | 只看該作者
為什么電阻沒阻值?還有各元件的名稱?
回復

使用道具 舉報

地板
ID:81140 發表于 2016-7-5 08:55 | 只看該作者
奧斯特洛夫斯基 發表于 2016-7-1 07:01
為什么電阻沒阻值?還有各元件的名稱?

R4  470
R2、R3、R5  10K
電位器 104
忘標了  抱歉
回復

使用道具 舉報

5#
ID:134543 發表于 2016-11-2 23:35 | 只看該作者
為什么程序是要弄到顯示屏顯示,覺得用串口打印出來顯示可能更好便于調試吧!
不過還是不太懂霍爾傳感器,霍爾傳感器的接線是怎么接的?
回復

使用道具 舉報

6#
ID:150203 發表于 2016-12-6 22:58 | 只看該作者
謝謝,感謝分享!
回復

使用道具 舉報

7#
ID:170846 發表于 2017-3-15 11:15 | 只看該作者
確實很簡潔,又實現了測速功能
回復

使用道具 舉報

8#
ID:186742 發表于 2017-4-7 15:06 | 只看該作者
怎么仿真的時候一直是0000
回復

使用道具 舉報

9#
ID:47286 發表于 2017-4-7 15:43 | 只看該作者
本帖最后由 dzbj 于 2017-4-7 15:47 編輯

現在常用的霍爾開關基本上是直接輸出電位 不需要用三極管開關一下 片子可以直接采集脈沖

在初始化時鐘時 開外部中斷 然后設置成下降沿觸發

void Chk_Rate()                //*轉速檢測
{
        if(num_ES>=20)                                        //如果 到達設定值(每5ms一個中斷 總計100ms)
        {
                SD[6]=Rate_num;                                        //賦值 系統緩沖區位6值為當前采集到的int1觸發次數
                Rate_num=0;                                                //頻率采集計數器清零
                num_ES=0;                                                //計時器ES清零
        }
}

void Server_Int1() interrupt 2        //服務 外部中斷1
{
        Rate_num++;                //頻率計數器自加
}

然后處理SD[6]里的數據就可以了 我用100ms踩一次是為了兼容最大轉速 一圈用12個磁點 最高轉速7000/分 在一個8位下能滿足最高轉速的間隔也就100ms左右
實際顯示時刷屏的間隔遠大于100ms 不需要不斷的刷新 小于200ms的刷新速率看著就有點別扭了 一般1s刷一次就可以 不需要采集轉速時不調用"Chk_Rate()"函數 讓它自己溢出 調用的時候 SD[6]每100ms被更新一次 到需要顯示的時候肯定是準確的 而不是溢出后重新計入的
回復

使用道具 舉報

10#
ID:171735 發表于 2017-4-9 13:24 | 只看該作者
學習一下,用來做小車測速!謝謝分享!
回復

使用道具 舉報

11#
ID:171735 發表于 2017-4-10 18:27 | 只看該作者
洛水神仙 發表于 2017-4-10 15:23
真的幫上我的忙啦,拜謝樓主

能用嗎?我試了下怎么都是整數的轉速,60 12 180這些的。我使用開關型霍爾器件,VCC,GND,D0,A0這幾個接口的,然后接到D0
回復

使用道具 舉報

12#
ID:186410 發表于 2017-4-17 12:10 來自手機 | 只看該作者
哥,那個地方N=60*Z,可不可以給我解釋為啥要乘60
回復

使用道具 舉報

13#
ID:198621 發表于 2017-5-10 09:23 | 只看該作者
謝謝,正在學習了測速功能。
回復

使用道具 舉報

14#
ID:203847 發表于 2017-6-7 15:39 | 只看該作者
我正在以這個學習測四路速度信號,結果改瞎了,還是沒出來!!
回復

使用道具 舉報

15#
ID:227565 發表于 2017-9-13 16:11 | 只看該作者
60hz 最高每分鐘360轉?
回復

使用道具 舉報

16#
ID:130345 發表于 2017-9-21 19:18 | 只看該作者
試著做個玩玩
回復

使用道具 舉報

17#
ID:89286 發表于 2017-9-22 07:29 | 只看該作者
thanks for sharing
回復

使用道具 舉報

18#
ID:234574 發表于 2017-9-23 10:35 | 只看該作者
看下,自己寫的出問題了,實際應用不過關
回復

使用道具 舉報

19#
ID:238175 發表于 2017-10-10 03:00 | 只看該作者
可以搞個轉速表
回復

使用道具 舉報

20#
ID:227565 發表于 2017-10-25 15:25 | 只看該作者
柔情歲月 發表于 2017-9-13 16:15
60Hz 最高360一分鐘?

后來重新測試了沒問題!!!
回復

使用道具 舉報

21#
ID:252315 發表于 2017-11-22 16:13 | 只看該作者
請問一下,這個霍爾元件型號是?
回復

使用道具 舉報

22#
ID:260355 發表于 2017-12-11 20:48 | 只看該作者
現在就缺這個,能不能做個電動機測速表
回復

使用道具 舉報

23#
ID:146834 發表于 2017-12-25 21:57 | 只看該作者
這是樓主程序仿真,

2017-12-25_215042.jpg (246.44 KB, 下載次數: 201)

2017-12-25_215042.jpg
回復

使用道具 舉報

24#
ID:146834 發表于 2018-1-1 11:03 | 只看該作者
樓主的程序實物來了。測速是60    60 的跳,

IMG_20180101_102840.jpg (672.7 KB, 下載次數: 197)

IMG_20180101_102840.jpg

IMG_20180101_102722.jpg (701.2 KB, 下載次數: 186)

IMG_20180101_102722.jpg

IMG_20180101_102714.jpg (690.57 KB, 下載次數: 181)

IMG_20180101_102714.jpg

IMG_20180101_102923.jpg (632.07 KB, 下載次數: 231)

IMG_20180101_102923.jpg

IMG_20180101_102909.jpg (579.32 KB, 下載次數: 200)

IMG_20180101_102909.jpg
回復

使用道具 舉報

25#
ID:270252 發表于 2018-1-2 20:15 | 只看該作者
這個程序導入單片機后顯示0000,怎樣能使數據變動
回復

使用道具 舉報

26#
ID:270252 發表于 2018-1-2 20:18 | 只看該作者
急不可待 發表于 2018-1-1 11:03
樓主的程序實物來了。測速是60    60 的跳,

怎樣讓數據跳動起來
回復

使用道具 舉報

27#
ID:146834 發表于 2018-1-2 22:24 | 只看該作者
1367826804 發表于 2018-1-2 20:15
這個程序導入單片機后顯示0000,怎樣能使數據變動

這個是測速軟件。需要有轉速,
回復

使用道具 舉報

28#
ID:270252 發表于 2018-1-3 13:35 | 只看該作者
急不可待 發表于 2018-1-2 22:24
這個是測速軟件。需要有轉速,

測速怎樣加,在單片機上加入線性霍爾傳感器后,顯示0000r/min,然后拿磁鐵靠近時顯示b/min
回復

使用道具 舉報

29#
ID:138571 發表于 2018-1-3 15:07 | 只看該作者
下載下來,參考一下
回復

使用道具 舉報

30#
ID:270252 發表于 2018-1-3 20:06 | 只看該作者
急不可待 發表于 2018-1-2 22:24
這個是測速軟件。需要有轉速,

這是線性霍爾傳感器還是模擬霍爾傳感器
回復

使用道具 舉報

31#
ID:270252 發表于 2018-1-3 21:50 | 只看該作者
急不可待 發表于 2017-12-25 21:57
這是樓主程序仿真,

可以把這個仿真發我一份么
回復

使用道具 舉報

32#
ID:146834 發表于 2018-1-4 22:20 | 只看該作者
仿真               

霍爾測速仿真1.zip

1.43 MB, 下載次數: 49, 下載積分: 黑幣 -5

回復

使用道具 舉報

33#
ID:308395 發表于 2018-4-21 16:10 | 只看該作者
1593275953 發表于 2017-5-24 10:28
**** 作者被禁止或刪除 內容自動屏蔽 ****

是LCD顯示
回復

使用道具 舉報

34#
ID:313359 發表于 2018-4-21 21:11 | 只看該作者
謝謝樓主分享 學習了
回復

使用道具 舉報

35#
ID:308395 發表于 2018-5-1 15:11 | 只看該作者
樓主,有PROTEUS仿真嗎?
回復

使用道具 舉報

36#
ID:308395 發表于 2018-5-4 08:47 | 只看該作者

你的壓縮包里沒有仿真圖,只有.c文件
回復

使用道具 舉報

37#
ID:322643 發表于 2018-5-5 10:57 | 只看該作者
急不可待 發表于 2017-12-25 21:57
這是樓主程序仿真,

樓主右下角 中斷源是怎么搞的  模擬霍爾元件嗎?
回復

使用道具 舉報

38#
ID:261725 發表于 2018-5-30 22:17 | 只看該作者
樓主,如果我想直接用你的例程,但是原理圖接口不一樣,那我應該改哪些數據才能正確運行在我的開發板上啊?抱歉,我是新手,可能問了一個十分愚蠢的問題。

1.JPG (73.78 KB, 下載次數: 186)

52

52

2.JPG (23.7 KB, 下載次數: 190)

LCD

LCD

3.JPG (43.97 KB, 下載次數: 180)

模數

模數

4.JPG (40.91 KB, 下載次數: 183)

串行口

串行口
回復

使用道具 舉報

39#
ID:110278 發表于 2018-5-31 20:01 | 只看該作者
材料很完整。。。
回復

使用道具 舉報

40#
ID:357157 發表于 2018-6-24 10:40 | 只看該作者
看了這個之后很有啟發。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久久久久久 | 青草视频在线 | 综合国产第二页 | 欧美激情欧美激情在线五月 | 精品在线99| 欧美lesbianxxxxhd视频社区 | 久久精品色视频 | 久国产精品 | 免费性视频 | a网站在线观看 | 免费国产视频在线观看 | 91美女在线观看 | 日韩在线中文 | 成人亚洲一区 | 国产精品亚洲一区 | 国产色播av在线 | 中文字幕第一页在线 | 国产一区久久久 | www.青娱乐| 国产精品视频www | 国产免费国产 | av免费网站在线观看 | 亚洲 一区 | 精品国产乱码久久久久久老虎 | www.蜜桃av | 91久久综合| 日韩欧美精品 | 久久久久国产一区二区三区 | 亚洲欧美视频一区 | 日韩成人精品在线观看 | 国产乱码精品一区二区三区忘忧草 | 亚洲视频一区二区三区 | 不卡的av在线 | 日韩一区二区成人 | 成人影 | 天天综合网天天综合色 | 日韩成人精品在线 | 91视频观看 | 老头搡老女人毛片视频在线看 | 国产成人免费视频网站高清观看视频 | 免费看欧美一级片 |