找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13626|回复: 19
收起左侧

直流电机测速(光电计数转速计)单片机原理图与源程序

  [复制链接]
ID:221539 发表于 2017-7-24 16:14 | 显示全部楼层 |阅读模式
直流电机测速原理图如下:
J3
VCC接A或者接B,可以实现正传和反转。
SIG脉冲输出端,接单片机外部中断端。

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

单片机测速源程序如下:
  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. }

复制代码
0.png
所有资料51hei提供下载:
测速模块资料.7z (33.21 KB, 下载次数: 450)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:304758 发表于 2018-4-9 21:31 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:213231 发表于 2018-4-19 17:37 | 显示全部楼层
最近在学小车,刚好用到测速
回复

使用道具 举报

ID:313325 发表于 2018-4-21 21:21 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:313325 发表于 2018-4-21 21:43 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:83305 发表于 2018-4-23 05:44 | 显示全部楼层

好资料,黑币不够,支持一下
回复

使用道具 举报

ID:301824 发表于 2018-5-27 10:48 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:194641 发表于 2018-6-24 19:53 | 显示全部楼层
谢谢楼主分享,最近在学校单片机,正好用得上
回复

使用道具 举报

ID:227864 发表于 2018-9-14 08:51 | 显示全部楼层
谢谢楼主!!!!!!!!!
回复

使用道具 举报

ID:227864 发表于 2018-9-14 08:58 | 显示全部楼层
不对呀,请问楼主用什么软件编译的呀,KEIL打开没有程序
回复

使用道具 举报

ID:466973 发表于 2019-3-13 17:55 | 显示全部楼层
这个有点问题啊楼主,按程序里端口接的线。1602什么都不显示
回复

使用道具 举报

ID:298008 发表于 2019-3-13 21:55 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:490395 发表于 2019-3-14 00:12 来自手机 | 显示全部楼层
谢谢分享!!
回复

使用道具 举报

ID:616081 发表于 2019-9-25 10:42 | 显示全部楼层

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

使用道具 举报

ID:697141 发表于 2020-3-13 15:15 | 显示全部楼层
好资料,设计刚好用到
回复

使用道具 举报

ID:680763 发表于 2020-3-23 06:23 | 显示全部楼层
能贴上就是贡献
回复

使用道具 举报

ID:84600 发表于 2020-4-22 22:38 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:642957 发表于 2020-4-28 01:38 | 显示全部楼层
不错,学习借鉴一下。
回复

使用道具 举报

ID:815648 发表于 2020-9-29 19:06 | 显示全部楼层
这个文件有毛病,打不开,一打开全是乱码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表