标题: 直流电机测速(光电计数转速计)单片机原理图与源程序 [打印本页]

作者: 雨鞋坏了11    时间: 2017-7-24 16:14
标题: 直流电机测速(光电计数转速计)单片机原理图与源程序
直流电机测速原理图如下:
J3
VCC接A或者接B,可以实现正传和反转。
SIG脉冲输出端,接单片机外部中断端。

电机驱动采用L9110S驱动芯片,测速原理是光电计数.


单片机测速源程序如下:
  1. /*-----------------------------------------------
  2.   名称:转速计
  3.   日期:2009.5
  4.   修改:无
  5.   内容:T0外部计数,T1计时1S,计算1S内外部脉冲个数,并在液晶显示
  6.         转速
  7. ------------------------------------------------*/
  8. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  9. #include<stdio.h>
  10. #include"1602.h"
  11. #include"delay.h"
  12. #define HIGH (65536-10000)/256
  13. #define LOW  (65536-10000)%256

  14. sbit LED=P1^2;    //定义LED端口
  15. bit OVERFLOWFLAG;
  16. bit TIMERFLAG;
  17. /*------------------------------------------------
  18.                     定时器0初始化子程序
  19.                     本程序用于计数
  20. ------------------------------------------------*/
  21. void Init_Timer0(void)
  22. {
  23. TMOD |= 0x01 | 0x04;      //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响            
  24. TH0=0x00;          //给定初值
  25. TL0=0x00;         
  26. EA=1;            //总中断打开
  27. ET0=1;           //定时器中断打开
  28. TR0=1;           //定时器开关打开
  29. }
  30. /*------------------------------------------------
  31.                     定时器1初始化子程序
  32.                     本程序用于定时
  33. ------------------------------------------------*/
  34. void Init_Timer1(void)
  35. {
  36. TMOD |= 0x10;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
  37. TH1=HIGH;          //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  38. TL1=LOW;
  39. EA=1;            //总中断打开
  40. ET1=1;           //定时器中断打开
  41. TR1=1;           //定时器开关打开
  42. }
  43. /*------------------------------------------------
  44.                     主程序
  45. ------------------------------------------------*/
  46. main()
  47. {
  48. unsigned long int a;
  49. float s;
  50. char temp[16];      //定义字符显示缓冲数组
  51. Init_Timer0();      //初始化定时器0
  52. Init_Timer1();      //初始化定时器1
  53. LCD_Init();         //初始化液晶屏
  54. DelayMs(10);        //延时用于稳定,可以去掉
  55. LCD_Clear();        //清屏
  56. LCD_Write_String(0,0,"111111111");//写入第一行信息,主循环中不再更改此信息,所以在while之前写入
  57. while(1)
  58. {
  59.   if(OVERFLOWFLAG)//检测溢出标志,如果溢出表明频率过高,显示溢出信息
  60.     {
  61.      OVERFLOWFLAG=0;//标志清零
  62.      LCD_Write_String(0,1,"overflow >655KHz");
  63.     }
  64.   if(TIMERFLAG)      //定时100ms到,做数据处理
  65.     {
  66.      a=TL0+TH0*256;//读取计数值
  67.      s=a/4;//100ms的转数(圆盘有4个孔,一周产生4个脉冲)
  68.      s=s*600;//一分钟的转数
  69.      sprintf(temp,"%8.0f r/min",s);
  70.      LCD_Write_String(0,1,temp);//显示到液晶第二行
  71.      TR0=1;                     //2个定时器打开
  72.      TR1=1;
  73.      TH0=0;                     //保证计数器初值为0
  74.      TL0=0;
  75.      TIMERFLAG=0;               //打开计时计数标志
  76.      
  77.     }
  78.   }
  79. }

  80. /*------------------------------------------------
  81.                  定时器0中断子程序
  82. ------------------------------------------------*/
  83. void Timer0_isr(void) interrupt 1
  84. {
  85. TH0=00;          //重新给定初值
  86. TL0=00;

  87. OVERFLOWFLAG=1;  //溢出标志

  88. }
  89. /*------------------------------------------------
  90.                  定时器1中断子程序
  91. ------------------------------------------------*/
  92. void Timer1_isr(void) interrupt 3
  93. {
  94. static unsigned char i;
  95. TH1=HIGH;         //重新赋值10ms
  96. TL1=LOW;

  97. i++;
  98. if(i==10)       //100ms 计数时间单位,得出100ms脉冲个数 x10就是1s中脉冲个数,即为频率 Hz
  99.    {
  100.    i=0;
  101.    TR0=0;        //2个定时器关闭
  102.    TR1=0;
  103.    TIMERFLAG=1;  //标志位清零
  104.    TH1=HIGH;     //重新赋值
  105.    TL1=LOW;
  106.    }
  107. }

复制代码

所有资料51hei提供下载:
测速模块资料.7z (33.21 KB, 下载次数: 451)



作者: hhhdass    时间: 2018-4-9 21:31
好资料,51黑有你更精彩!!!

作者: 千年啊    时间: 2018-4-19 17:37
最近在学小车,刚好用到测速
作者: 12345condon    时间: 2018-4-21 21:21
好资料,51黑有你更精彩!!!
作者: 12345condon    时间: 2018-4-21 21:43
好资料,51黑有你更精彩!!!
作者: 小泉    时间: 2018-4-23 05:44

好资料,黑币不够,支持一下
作者: baltam1995    时间: 2018-5-27 10:48
好资料,51黑有你更精彩!!!
作者: lyp1783    时间: 2018-6-24 19:53
谢谢楼主分享,最近在学校单片机,正好用得上
作者: 怪怪爱玩    时间: 2018-9-14 08:51
谢谢楼主!!!!!!!!!
作者: 怪怪爱玩    时间: 2018-9-14 08:58
不对呀,请问楼主用什么软件编译的呀,KEIL打开没有程序
作者: 13468823438    时间: 2019-3-13 17:55
这个有点问题啊楼主,按程序里端口接的线。1602什么都不显示
作者: lindeijun1    时间: 2019-3-13 21:55
好资料,51黑有你更精彩!!!
作者: hc18371269426    时间: 2019-3-14 00:12
谢谢分享!!
作者: wzl619    时间: 2019-9-25 10:42

好资料,51黑有你更精彩!!!

作者: asdpoi    时间: 2020-3-13 15:15
好资料,设计刚好用到
作者: sweets1998    时间: 2020-3-23 06:23
能贴上就是贡献
作者: longlian123    时间: 2020-4-22 22:38
感谢分享
作者: zigongwanjun    时间: 2020-4-28 01:38
不错,学习借鉴一下。
作者: A星猫    时间: 2020-9-29 19:06
这个文件有毛病,打不开,一打开全是乱码




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1