51单片机检测光电旋转编码器每周实际脉冲数

合集下载

51单片机频率精确测量C程序

51单片机频率精确测量C程序

51单片机频率精确测量C程序测定脉冲频率,附带部分PROTUES仿真结果和C语言程序,希望能给广大电子爱好者带来方便。

仿真结果十分精确,实际应用中可能会存在少许误差,通过相应的电路处理,可以满足使用要求。

很多场合需要用到对频率的精确测量,譬如你用霍尔传感器做测转速系统,就需要用到此模块,测量霍尔传感器输出的脉冲的频率,然后稍作运算,就可以实现转速的测量功能。

本设计利用51单片机的外部中断(INT0)的捕捉功能,实现对脉冲的计数,同时配以T0的8位自动装入方式,实现准确计时1S,这1S内INTO捕捉到的脉冲数即为频率。

通过PROUES仿真,证明这种方式误差极小(与网上流行的用定时器工作方式1定时1S的程序相比,误差大大缩小,尤其是对于频率在2K以上信号的测量)。

实例1、频率设定为5K,显示在4999和5000两数之间跳动#include <reg52.h>#define uchar unsigned char #define uint unsigned intuint time_count,count,sum;sbit duan=P2^6; //74HC573的LE端U5 LED的段选端sbit wei=P2^7; //74HC573的LE端U4 LED的位选端uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码表unsigned int dis[6];uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阴型数码管控制端void initial(void);void delay(uint z);void display();main(){i nitial();w hile(1){display();}}void initial(){c ount=0;t ime_count=0;sum=0;T MOD=0x02; //定时器0工作方式2,8位自动装入计数T H0=0x06;T L0=0x06; //定时器赋初值计时0.25ms,1000次为0.25s,4000次为一秒I T0=1;// 外部中断0工作方式(下降沿有效)E A=1;E T0=1;E X0=1;T R0=1; //开中断}void delay(uint z){u int x,y;f or(x=z;x>0;x--)for(y=20;y>0;y--);}void exter0() interrupt 0 {c ount++;}void timer0() interrupt 1 {t ime_count++;i f(time_count==4000){sum=count;time_count=0;count=0;}}void display(){uchar i;dis[0]=sum/10000; //获取计数值的万位dis[5]=sum%10000;dis[1]=dis[5]/1000; // 获取计数值的千位dis[5]=dis[5]%1000;dis[2]=dis[5]/100; // 获取计数值的百位dis[5]=dis[5]%100;dis[3]=dis[5]/10; // 获取计数值的十位dis[4]=dis[5]%10; // 获取计数值的个位for(i=0;i<5;i++) //依次显示万、千、百、十、个位,动态显示{// P0=0xff;P0=con[i];wei=1;wei=0;P0=table[dis[i]];duan=1;duan=0;delay(1);P0=0;duan=1;duan=0;}}。

基于C51单片机直流电机测速仪设计

基于C51单片机直流电机测速仪设计

基于C51单片机直流电机测速仪设计摘要:电机的转速是各类电机运行过程中的一个重要监测量,测速装置在电机调速系统中占有非常重要的地位,特别是数字式测速仪在工业电机测速方面有独到的优势。

本文介绍了一种基于C51单片机的光电传感器转速测量系统的设计。

系统采用对射式光电传感器产生与齿轮相对应的脉冲信号,使用AT89C51单片机采样脉冲信号并计算每分钟内脉冲信号的数目,即电机对应的转速值,最终系统通过LCD实时显示电机的转速值。

经过软硬件系统的搭建,分别通过Protues软件系统仿真实验和实际电路搭建检查实验。

仿真实验表明本系统满足设计要求,并且结构简单、实用。

整个直流电机测速系统在降低测速仪成本,提高测速稳定性及可靠性等方面有一定的应用价值。

关键词:转速测量;光电传感器;单片机Based On C51 SCM Single DC Motor Speedometer DesignABSTRACT:Motor speed is all kinds of motor operation is an important process to monitor the amount of speed measuring device in the motor control system occupies a very important position, Especially the digital speedometer in the industrial motor speed has unique advantage. This paper describes a photoelectric sensor 51 SCM-based speed measurement system design. System uses a beam photoelectric sensor generates a pulse signal corresponding to the gear, the use of a sampling pulse signal AT89C51 SCM and calculating the pulse per minute, the number of signals that the speed of the motor corresponding to the value of the final system time through the LCD display the motor speed value.After a hardware and software system structures, respectively, through Protues software system to build the actual circuit simulation and experimental examination. Simulation results show that the system meets the design requirements, and the structure is simple and practical. DC Motor Speed entire system in reducing speedometer costs, improve reliability, speed stability and a certain application value.Keywords: Speed measurement; Photoelectric; Single chip micyoco目录1 绪论 (1)1.1 数字式转速测量系统的发展背景 (1)1.2 转速测量在国民经济中的应用 (1)1.3主要研究内容 (2)1.4 设计的目的和意义 (2)2 转速测量系统的原理 (4)2.1 转速测量原理 (4)2.2 转速测量计算方法 (5)3转速测量系统设计方案 (7)3.1 直流电机转速测量方法 (7)3.2 设计任务及方案 (8)4 直流电机测速系统设计 (9)4.1 单片机AT89C51介绍 (9)4.2 转速信号采集 (14)4.2 转速信号处理电路设计 (16)4.4 最小系统的设计 (17)4.4.1复位电路 (17)4.4.2 晶振电路 (20)4.5 显示部分设计 (20)5 直流测速系统仿真 (24)5.1 直流测速系统仿真 (24)5.1.1单片机最小系统仿真 (25)5.1.2 数码管显示仿真 (25)5.2 主程序流程设计 (26)5.2.1 主程序流程设计 (26)5.2.2 定时器的初始化 (27)5.3 实际电路实验 (28)参考文献 (30)致谢 (31)1 绪论1.1 数字式转速测量系统的发展背景在现代工业自动化高度发展的时期,几乎所有的工业设备都离不开旋转设备,形形色色的电机在不同领域发挥着很重要的作用。

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序51单片机外部脉冲计数程序是一种常见的嵌入式应用程序,它可以通过计数外部脉冲信号来实现各种功能,如测量速度、记录行程、控制电机等。

在本文中,我们将介绍如何编写一个简单的51单片机外部脉冲计数程序,供初学者参考。

一、程序框架```c#include <reg52.h>sbit PulsePin = P1^0; //定义脉冲信号输入引脚unsigned long cnt = 0; //计数器void ExternalInterrupt0() interrupt 0 //外部中断0的中断服务程序{cnt++; //计数器加一}```程序中定义了一个脉冲信号输入引脚PulsePin,一个计数器cnt,并在主程序中开启了全局中断和外部中断0,并设置外部中断0为下降沿触发。

在外部中断0的中断服务程序中,计数器cnt会加一。

二、程序解析1. 硬件连接将需要计数的脉冲信号输入引脚连接到单片机的P1.0引脚上,并连接好单片机的电源和地线。

2. 宏定义和全局变量首先定义了PulsePin引脚为输入模式,并定义了计数器cnt为无符号长整型变量。

3. 主程序在主程序中,首先开启了全局中断和外部中断0,然后设置外部中断0为下降沿触发。

最后加入一个无限循环,等待外部中断的触发。

4. 外部中断0的中断服务程序在外部中断0的中断服务程序中,计数器cnt会加一。

三、总结本文介绍了如何编写一个简单的51单片机外部脉冲计数程序。

通过外部中断0的中断服务程序,可以实现对外部脉冲信号的计数。

本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。

单片机脉冲计数

单片机脉冲计数

单片机脉冲计数单片机脉冲计数是指通过单片机对输入的脉冲信号进行计数。

在工业自动化、电子测量等领域中,脉冲计数广泛应用。

单片机脉冲计数是一种高精度、高可靠性的计数方式,可以实现对脉冲信号的精确计数和处理。

一、单片机脉冲计数的原理单片机脉冲计数的原理是通过单片机的计数器来实现的。

当有脉冲信号输入时,单片机的计数器开始计数。

在计数的过程中,单片机可以通过编程来实现对计数器的控制,如计数器的清零、计数器的读取等操作。

当计数结束时,单片机可以通过计算来得到脉冲信号的频率、周期、脉宽等参数。

二、单片机脉冲计数的步骤单片机脉冲计数的步骤主要包括以下几个方面:1.硬件电路设计硬件电路设计是单片机脉冲计数的重要环节。

在设计电路时,需要根据实际需要选择合适的计数器、脉冲输入口等元器件,并合理布局电路,确保电路的稳定性和可靠性。

2.编写单片机程序编写单片机程序是单片机脉冲计数的关键。

在编写程序时,需要考虑计数器的清零、计数器的读取、频率、周期、脉宽等参数的计算等多个方面。

同时,还需要考虑程序的效率和稳定性,确保程序能够正确地运行。

3.测试和调试测试和调试是单片机脉冲计数的最后一步。

在测试和调试时,需要使用示波器、计数器等设备进行检验,确保计数的精度和稳定性符合要求。

如果发现问题,需要及时进行排查和解决。

三、单片机脉冲计数的应用单片机脉冲计数在工业自动化、电子测量等领域中有着广泛的应用。

例如,可以用于物料计数、流量计量、速度检测、频率测量等方面。

在电子测量领域中,单片机脉冲计数可以实现高精度的波形测量和分析,如脉冲宽度测量、脉冲周期测量等。

四、单片机脉冲计数的优点单片机脉冲计数具有以下几个优点:1.高精度:单片机脉冲计数可以实现高精度的计数和测量,可以满足高精度的应用需求。

2.高可靠性:单片机脉冲计数采用数字化处理,具有高可靠性和稳定性,可以保证计数结果的准确性和可靠性。

3.易于扩展:单片机脉冲计数可以通过编程来实现计数器的扩展和功能的扩展,可以满足不同应用场合的需求。

基于51单片机的自行车测速系统设计【范本模板】

基于51单片机的自行车测速系统设计【范本模板】

摘要随着居民生活水平的不断提高,人们对于生活质量的要求也日益增加,尤其是对健身的要求。

自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。

自行车的速度里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。

而对于自行车运动员来说,最为关心的莫过于一段时间内的训练效果。

因为教练要根据一段时间内运动员的训练效果进行评估,从而进行适当的调整已使运动员达到最佳的状态.因此爱好自行车运动的人十分学要一款能测速的装置,以知道自己的运动情况。

并根据外界条件,如温度,风速等进行适当的调节,已达到最佳运动的效果。

关键词:单片机、LED显示、里程/速度、霍尔元件第一章系统总方案分析与设计1。

1 课题主要任务及内容本课题主要任务是利用霍尔元件、单片机等部件设计一个可用LED数码管实时显示里程和速度的自行车的速度里程表。

本文主要介绍了自行车的速度里程表的设计思想、电路原理、方案论证以及元件的选择等内容,整体上分为硬件部分设计和软件部分设计。

本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括传感器的选择、单片机的选择、显示电路的设计;然后阐述了该自行车的速度里程表的软件设计,包括数据处理子程序的设计、显示子程序的设计;最后对本次设计进行了系统的总结。

具体的硬件电路包括AT89C52单片机、霍尔元件以及LED显示电路等。

软件设计包括:中断子程序设计,里程计算子程序设计,显示子程序设计。

软件采用汇编语言编写,软件设计的思想主要是自顶向下,模块化设计,各个子模块逐一设计。

1。

2 任务分析与实现本设计的任务是:以通用AT89C52单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。

里程及速度的测量,是经过AT89C52的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,其结果通过LED显示器显示出来.本系统总体思路如下:假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m。

51单片机测变周期脉冲信号的简便方法

51单片机测变周期脉冲信号的简便方法

51单片机测变周期脉冲信号的简便方法摘要:利用MCS-5l系列单片机内部定时/计数器控制灵活的特点,设计出了一个只用其内部一个定时/计数器测量脉冲周期连续变化的脉冲信号的方法.该方法没有额外的硬件开销,只是将脉冲信号直接引入单片机的一外部中断口;软件设计简单.其对脉冲周期测量误差不大于2us,测量脉冲周期范围广,可直接用于光电等产品的开发。

脉冲信号是工程中一类较常见的信号,如光电位移、速度、转速等传感器输出的信号,而脉冲宽度和脉冲周期是其基本参数,往往需对它们进行测量。

对等周期的脉冲信号的测量比较容易,只需测量任一脉冲宽度或周期就可以了,近年来已有许多MCS-51用户利用测量脉冲信号的基本参数而开发新产品,如山东大学的“ZBCY—I型智能标枪速度测试仪”就是利用测量一个脉冲宽度来获得标枪在某一飞行距离内的平均速度。

对连续变周期的脉冲信号周期的测量则相对困难些,许多测量人员都首先对这类信号进行二分频后一路反相,然后用两个定时/计数器分别测出两路脉冲信号的正脉冲宽度得到周期,这种方法硬件开销较大,软件设计也较复杂。

本文将介绍了一种用MCS-51单片机内部一个定时/计数器直接测量连续变周期脉冲信号周期的实用方法。

用803l内部定时器来测连续变周期的脉冲信号的周期时,关键是如何控制定时/计数器的启动、停止。

以定时器T1为例,当其工作于方式1时,则按16位计数器工作,由两个特殊功能寄存器THl作为高8位和TLl作为低8位构成,其控制逻辑如图1。

图1定时,计数器方式1的控制逻辑当定时/计数器方式控制寄存器TMOD门控位GATE=0时,计数器的启动、停止只受TR1控制,只要TR1置位。

计数器就被选通,而不管INT1电平高低。

因此,在主程序中先置位IE 中位EA,将信号引入INT1,在INT1中断服务程序中使TCON中位TR1复位和置位来实现计数器的停止、数据读取、计数器赋初值和启动。

其工作过程如图2。

图2 定时,计数器测脉冲周期简图其中:t1-中断服务程序执行时间t2-计数器计数时间则:第i个脉冲周期ti=t1+t2(i=1,2,3,…)。

51单片机PID调增量式光电编码器测速

51单片机PID调增量式光电编码器测速

编码器输出的A向脉冲接到单片机的外部中断INTO, B向脉冲接到I/O端口P1.0。

当系统工作时,首先要把INTO设置成下降沿触发,并开相应中断。

当有有效脉冲触发中断时,进行中断处理程序,判别B脉冲是高电平还是低电平,若是高电平则编码器正转,加1计数;若是低电平则编码器反转,减1计数。

基于51单片机的直流电机PID闭环调速系统原理详解与程序(2013-08-04 01:18:15)转载▼标签:分类:单片机51单片机直流电机pidpcf8591基于51单片机的直流电机PID闭环调速系统1. 电机转速反馈:原理:利用光电编码器作为转速的反馈元件,设电机转一周光电编码器发送N个PWM波形,利用测周法测量电机转速。

具体实现:将定时器0设置在计数模式,用来统计一定的时间T内接受到的脉冲个数M个,而定时器0置在计时模式,用来计时T时间。

则如果T时间接受到M 个PWM波形,而电机转一圈发出N个PWM波形,则根据测周法原理,电机的实际的转速为:real_speed=M/ ( N*T),单位转/秒。

若将定时器1置在计数模式,则PWM波形应该由P3A3脚输入。

代码实现://定时器0初始化,用来定时10msvoid Init_Timer0(void){TMOD |= 0x01; // 使用模式 1,16位定时器 ,且工作在计时模式TH0=(65536-10000)/256; // 定时 10msTL0=(65536-10000)%6;//计数器1初始化,用来统计定时器1计时250ms 内PWM 波形个数 voidInit_Timer1(void){ TMOD |= 0x50; // 使用计数模式 1, 16位计数器模式TH1=0x00; // 给定初值,由 0往上计数TL1=0x00;EA=1; // 总中断打开ET1=1; // 定时器中断打开TR1=1; }// 定时器开关打开// 定时器0的中断服务子函数, 主要完成脉冲个数的读取, 实际转速的计算和 控制以及控制结// 果输出等工作void Timer0_isr(void) interrupt 1 { unsigned char count;TH0=(65536-10000)/256; // 重新赋值 10msTL0=(65536-10000)%6;count++;if (count==25)// 如果达到250ms,则计算一次转速并进行一次控制运算{ EA=1; // ET0=1; // TR0=1; // }总中断打开定时器中断打开定时器开关打开PIDcount=0;// 清零以便于定时下一个250msTR1=0;// 关闭定时器1,统计脉冲个数real_speed=(256*TH1+TL1)*4/N;//250ms 内脉冲个数并由此计算转速TH1=0x00; // 计数器1清零,重新开始计数TL1=0x00;TR1=1;OUT=contr_PID();// 进入PID 控制 , PID 控制子函数代码在后面给出write_add(0x40,OUT);〃进行DA转换,将数字量转换为模拟量,后面会介绍到}}2. PID 控制:PID 的基本原理在这里不作具体讲解,这里主要给出PID 算法的实现,通过调节结构体中比例常数( Proportion )、积分常数( Integral )、微分常数 ( Derivative )使得转速控制达到想要的精度。

基于51单片机的脉冲计数

基于51单片机的脉冲计数

一、课程设计任务 (1)二、课程设计分工安排................................................................................. 错误!未定义书签。

三、课程设计原理和方法 (1)3.1定时器工作原理 (1)3.1.1 定时/计数器构成 (1)3.1.2 定时/计数器的控制寄存器 (2)3.1.3 定时器/计数器工作方式 (2)3.1.3 定时器/计数器工作方式 (3)3.1.3 定时器/计数器工作方式 (4)3.2 软件设计 (5)3.2.1 程序流程图 (5)3.2.2 程序清单............................................................................... 错误!未定义书签。

3.2.2 程序清单 (7)3.3 功能图 (8)3.4硬件电路布线图 (9)四、小结 (9)五、参考文献 (10)六、致谢 (10)七、心得体会..................................................................................................................................一、课程设计任务熟悉8031定时/计数器的计数功能,掌握初始化编程方法,掌握中断程序的调试方法,利用定时/计数器0对外部输入的脉冲进行计数,并送显示器显示。

二、课程设计分工安排组长朱威主持共同分析系统结构和功能,并负责写出总体设计方案;易瑞刚负责论述8031定时/计数器的主要功能,以及在设计系统中的具体编程语句和含义,同时负责购买电阻,分频器,并焊接电路板;李孝捷负责论述8031定时/计数器的工作方式,以及在设计系统中的具体编程语句和含义;张友清负责论述如何利用8031定时/计数功能实现脉冲计数,以及在设计系统中的具体编程语句和含义;三、课程设计原理和方法3.1定时器工作原理3.1.1 定时/计数器构成AT89C51单片机有二个16位定时/计数器T0、T1,分别由4个8位计数器组成,均属SFR寄存器。

光电编码器脉冲当量测量实验总结

光电编码器脉冲当量测量实验总结

光电编码器脉冲当量测量实验总结
光电编码器脉冲当量测量实验是一种常见的测量方法,用于测量旋转角度或转速等参数。

在本次实验中,我们使用了光电编码器来测量电机的转速,并通过计算脉冲数和时间间隔来得出脉冲当量。

我们需要准备实验设备,包括光电编码器、信号发生器、示波器、数据采集卡等。

然后,将光电编码器的输出信号连接到信号发生器的输入端,并将示波器的输入端连接到信号发生器的输出端。

接着,通过数据采集卡将示波器的输出信号转换为数字信号,以便后续处理。

接下来,我们进行了实验操作。

首先启动电机,使其开始旋转。

然后,通过示波器观察光电编码器的输出信号,记录下脉冲数和时间间隔。

接着,根据脉冲计数原理和时间间隔计算出脉冲当量。

最后,将计算结果与理论值进行比较,验证实验结果的准确性。

通过本次实验,我们深入了解了光电编码器的工作原理和使用方法,掌握了脉冲当量的计算方法,并能够准确地测量电机的转速。

同时,也发现了一些问题和不足之处,例如在高速旋转时容易出现误差,需要采取相应的措施来减小误差。

总之,光电编码器脉冲当量测量实验是一项重要的实验内容,对于理解光学传感器的原理和应用具有重要意义。

希望今后能够继续深入学习相
关知识,不断提高自己的实践能力和水平。

光电编码器输出脉冲的几种计数方法

光电编码器输出脉冲的几种计数方法

《光电编码器输出脉冲的几种计数方法》1. 背景介绍光电编码器是一种常用的测量设备,用于测量旋转或线性运动的位置、速度和加速度。

其输出信号通常为脉冲信号,而如何准确、高效地计数这些脉冲信号成为工程和技术人员关注的焦点之一。

本文将探讨光电编码器输出脉冲的几种计数方法,并对其优缺点进行全面评估。

2. 计数方法一:基于计数器的方法在基于计数器的方法中,常用的计数器有单向计数器和双向计数器。

单向计数器适用于仅需统计脉冲信号的个数而不需要知道方向的场景,而双向计数器则可以准确地统计正负方向的脉冲信号。

这种方法简单直接,具有较高的实时性,但对信号的稳定性和频率要求较高。

3. 计数方法二:基于微处理器的方法基于微处理器的方法通过将脉冲信号输入微处理器中,通过编程实现脉冲的计数。

这种方法灵活多变,适用于复杂的计数任务,并且可以通过编程实现更多的功能,比如对脉冲信号进行滤波、脉冲宽度测量等。

然而,这种方法需要具备一定的编程技能和对硬件信号处理的理解,对技术人员的要求较高。

4. 计数方法三:基于定时器的方法基于定时器的方法是通过定时器对脉冲信号进行时间测量和计数。

这种方法准确性高,适用于对时间要求较高的场景,比如需要测量脉冲信号的频率、周期等。

然而,该方法对定时器的精度、稳定性和对脉冲信号的频率要求较高。

5. 总结与展望本文对光电编码器输出脉冲的几种计数方法进行了深入探讨和评估。

不同的计数方法各有优劣,适用于不同的场景。

在实际应用中,工程和技术人员可以根据具体的需求选择合适的计数方法,并结合实际情况进行优化和改进。

未来随着技术的不断进步和应用需求的不断拓展,光电编码器输出脉冲的计数方法也将不断创新和完善。

6. 个人观点作为文章写手,我深入了解了光电编码器输出脉冲的计数方法,并感到在实际工程中,选择合适的计数方法至关重要。

我个人倾向于基于微处理器的方法,因为其灵活多变,可以通过编程实现更多的功能,从而满足复杂的计数需求。

基于51系列单片机控制步进电机调速实验

基于51系列单片机控制步进电机调速实验

基于51系列单片机控制步进电机调速实验实验指导书仇国庆编写重庆邮电大学自动化学院自动化专业实验中心2009年2月基于51系列单片机控制步进电机调速实验实验目的及要求:1、熟悉步进电机的工作原理2、熟悉51系列单片机的工作原理及调试方法3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量)4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。

速度设定由键盘设定,步进电机的反馈速度由LED数码管显示。

实验原理:步进电机控制原理一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。

步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。

因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。

步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。

由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。

随着数字控制系统的发展,步进电动机的应用将逐渐扩大。

步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

步进电机的驱动电路根据控制信号工作,控制信号可以由单片机产生。

电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)图1 是反应式步进电动机结构示意图,它的定子具有均匀分布的六个磁极,磁极上绕有绕组。

基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告课程名称:标题:课程设计报告|基于51单片机速度测量的199微机原理光电编码器课程设计在位置控制系统中,电机可以正转或反转,因此为了对与其相连的编码器输出的脉冲进行计数,需要相应的计数器向上或向下计数,即向上或向下计数有许多计数方法,包括纯软件计数和硬件计数。

本文分别分析了两种常用的计数方法,并比较了它们的优缺点。

最后,提出了一种新的计数方法,利用80C51单片机内部的计数器实现光电编码器输出脉冲的上下可逆计数,节省了硬件资源,获得了较高的计数频率。

该设计以STC89C52RC芯片、光电编码器和1602液晶为核心,辅以必要的电路,构成了基于51单片机的光电编码器转速表该系统有两个控制键,分别用于控制每秒和每分钟的转速,并用1602液晶显示速度。

速度计测速准确,具有实时检测功能,操作简单。

关键词:光电编码器,51单片机,C语言,1602液晶显示器2目录1,设计任务和要求 (4)1.1设计任务.................................................................................................................4 1.2设计要求 (4)2、方案的总体设计是 (5)2.1方案一 (5)2.2方案二。

.............................................................................................................. ...5 2.3系统采用方案.. (5)3,硬件设计 (7)3.1单片机最小系统....................................................................................................7 3.2液晶模块..................................................................................................7 3.3系统电源.................................................................................................................. ..8 3.4光电编码器电路..........................................................................................................8 3.5整体电路. (9)4,软件设计 (10)4.1 keil软件推出 (10)4.2系统程序流程..................................................................................................................105,仿真与实现 (12)5.1 proteus软件推出 (12)5.2模拟过程.................................................................................................................. ...12 5.3物理生产和调试........................................................................................................13 5.4使用说明.. (14)6,总结.................................................................................................................156.1设计总结 (15)6.2经验总结 (1)57,参考文献 (16)31、设计任务和要求1.1设计任务1)。

51单片机测量频率的方法

51单片机测量频率的方法

51单片机测量频率的方法2012-12-10 11:1151单片机的测量频率方法有很多,这里谈的是,将被测量信号经过整形后转换成方波信号,利用单片机查询两个上升沿,在此期间根据晶体振荡器产生的周期为 Tc的脉冲送计数器进行计数,设计数值为N,则得被测量信号的周期值Tx=Tc×N,然后取其倒数即为被测量信号的频率。

当然如果利用单片机的捕捉功能,实现起来可能程序更加简练。

下面频率测量计数波形示意图程序代码如下/*-------------------------------------测量周期法的基本原理:在被测信号T内,对某一基准时间进行计数,基准时间与计数值的乘积便是被测周期. ---------------------------------------*/#include"at89x51.h"#define uint unsigned intuint count, period;bit rflag = 0; //设置周期标志void control(void){TMOD = 0x09; //T/C0为方式1,INT0 为1是启动定时器IT0 = 1; //脉冲方式(后沿负跳有效)进入中断TH0 = 0;TL0 = 0;P1_0 = 0; P1_0 = 1; //触发器清零TR0 = 1; //启动T/C0EX0 = 1; //只开外部中断1EA = 1; //开总中断}void INT_0(void) interrupt 0 using 1 //INTO中断服务{EA = 0;TR0 = 0;count = TL0 + TH0 * 256;//取计数值rflag = 1; //设标志EA = 1;}main(){control();while(rflag == 0); 、//等待一个周期period = count * 2; //fosc = 6MHz,2us计数增1,周期值单位us }。

51单片机360度旋转编码器使用代码

51单片机360度旋转编码器使用代码

51单片机360度旋转编码器使用代码下面是使用51单片机实现360度旋转编码器的代码:```c#include <reg52.h>sbit CLK=P3^0; // CLK引脚定义sbit DT=P3^1; // DT引脚定义unsigned char val = 0; // 表示旋转角度的变量unsigned int i,j;for(j=0;j<150;j++);void mainunsigned char last_state, current_state;unsigned char flag = 0;last_state = (DT<<1) , CLK; // 初始化上一个状态while(1)current_state = (DT<<1) , CLK; // 获取当前状态if (current_state != last_state) // 检测到旋转delay(5); // 延时去抖动if (current_state == ((DT<<1) , CLK)) // 确认旋转方向if (last_state == 0x00) // 顺时针旋转val++;if (val > 255)val = 255;}else // 逆时针旋转if (val > 0)val--;}flag = 1;}while ((DT<<1) , CLK == current_state) //等待旋转结束;}last_state = current_state; // 更新上一个状态if (flag) // 旋转角度变化flag = 0;//执行相应的操作,例如更新液晶显示屏等}//其他需要进行的操作delay(10); // 延时等待下一次旋转检测}```以上是一个简单的示例代码,通过检测旋转编码器的旋转状态变化来实现角度的累加和递减。

具体实现中,可以根据需要进行相应的操作,例如更新液晶显示屏、驱动电机等。

如何使用单片机计数旋转编码器

如何使用单片机计数旋转编码器

如何使用单片机计数旋转编码器1、测试环境:(1)MCU: AU6840(增强型51内核单片机)@12MHz,Atmega48(AVR单片机)@3.6864MHz;(2)Encodr:E1132X1B-H1FE05-00 ,分辨率:20/周;(3)编码规则:硬件为低有效,常态输出高;故正向: A:1 0 0 1 1 0 0 1 1B:1 1 0 0 1 1 0 0 1反向: A:1 1 0 0 1 1 0 0 1B:1 0 0 1 1 0 0 1 1(4)硬件测试结果(通常情况下):暂态相位持续时间:2-30mS;相位变化抖动时间(不使用或使用小于103电容滤波):<0.5mS;相位变化抖动时间(104电容滤波):可以忽略,但输出波形严重变形;2、解码方案推荐:(1)中断解码:将Encoder输出接到单片机中断输入引脚上,像Atmega48这种全IO中断,且具有电平变化中断功能的单片机尤佳。

(2)主程序轮询解码:对于无中断或外部中断已被占用的情况下,必须使用主程序轮询解码,应该尽量提高单片机主频,缩短主程序运行时间。

3、解码程序设计要点:(1)去抖动设计,强烈推荐使用473-104的电容进行硬件去抖动。

应用中断解码,且具有剩余定时器资源的的情况下,可以考虑软件去抖动;主程序十分简单的情况下,采用轮询解码也可以考虑软件去抖动(可以考虑延时去抖)。

需要注意的是,具有按键去抖优化的单片机(如AU6840),应该考虑禁用相应IO的按键去抖优化,因为按键去抖一般在10mS以上,用在Encoder上会滤掉有用信息。

(2)轮询解码设计:问题的焦点在于如何提高轮询速度。

可以考虑将主程序的任务划分为不同的时间优先级,为不同的任务分配不同的时间片,使得每次主循环执行的任务尽量少。

单片机中断程序ORG 0000HLJMP STARTORG 001BHLJMP TT1ORG 0300HSTART:CLR P3.5MOV SP,#60HMOV R0,#20CLR P1.1MOV TMOD,#10HMOV TH1,#3CHMOV TL1,#0B0HSETB ET1SETB EASETB TR1SJMP $TT1: MOV TH1,#3CHMOV TL1,#0B0HDJNZ R0,BACKCPL P1.1MOV R0,#20BACK: RETIEND中断产生之后,中断系统自动停止主程序的执行,跳入相应的中断子程序入口。

51单片机检测光电旋转编码器每周实际脉冲数

51单片机检测光电旋转编码器每周实际脉冲数

程序代码/**************************************************************** **** 文件名: main.c** 创建人: 飘扬** 日期: 2006.10.04** 修改人:** 日期:** 描述: 本程序使用伟纳300A型实验板,来检测光电旋转编码器的实际每周** 输出脉冲数。

程序中,定时器0用于8位数码管动态扫描定时,时间** 为1ms(12MHZ晶振)。

定时器1工作于模式1,计数器方式,直接测量** 接在T1脚的脉冲个数。

外部中断0,工作于边沿触发方式,接在旋转** 编码器的Z信号输出上,用于检测编码器完整旋转一周。

8位数码管,** 接成动态扫描,接在P0和P2口。

左4位,用来显示上一周的实际脉冲** 数,右4位,用来显示当前周的脉冲数。

**** 实际使用,感觉效果还可以。

程序准确的测量出某牌光电旋转编码** 器(400脉冲),实际工作时,双路信号输出脉冲数量不等,及脉冲** 数与标称值的误差情况。

**** 本程序的显示部分,直接修改于伟纳提供的数码管显示1-8例程。

**----------------------------------------------------------------*/#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, offunsigned char data dis_buf[8];unsigned char data dis_index;unsigned int counter1,counter2; //左右计数器数值void main(){P0 = 0xff;P2 = 0xff;TMOD = 0x51; //定时器0工作在模式1定时器方式,定时器1工作在模式1计数器方式TH0 = 0xFC;TL0 = 0x17;TH1 = 0;TL1 = 0;IE = 0x83; //开定时器0中断和外部中断0IT0 = 1; //外部中断0为边沿触发方式//显示初始化counter1=0; //右测显示的本周当前脉冲数counter2=0; //左测显示的上一周脉冲数dis_digit = 0xfe;dis_index = 0;TR0 = 1;//主程序TR1 = 1;while(1){counter1=(TH1*0xff)+TL1;dis_buf[0] = dis_code[0x0a];dis_buf[1] = dis_code[counter2/100];dis_buf[2] = dis_code[(counter2%100)/10];dis_buf[3] = dis_code[counter2%10];dis_buf[4] = dis_code[0x0a];dis_buf[5] = dis_code[counter1/100];dis_buf[6] = dis_code[(counter1%100)/10];dis_buf[7] = dis_code[counter1%10];}}//外部中断0void int0() interrupt 0{TL1=0;TH1=0;counter2=counter1;}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管// dis_buf --- 显于缓冲区基地址{TH0 = 0xFC;TL0 = 0x17;P2 = 0xff; // 先关闭所有数码管P0 = dis_buf[dis_index]; // 显示代码传送到P0口P2 = dis_digit; //dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管dis_index++; //dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}。

51单片机的脉宽测量

51单片机的脉宽测量

北华航天工业学院课程设计报告(论文)设计课题:单片机技术课程设计专业班级:自动化学生姓名:***指导教师:***设计时间:2010年4月25日北华航天工业学院电子工程系单片机技术课程设计任务书指导教师:李叶紫教研室主任:李叶紫2010 年4 月25 日目录一概述 (3)二方案设计与论证 (3)三单元电路设计与参数计算 (4)1. 总程序框图 (4)2.单元电路设计 (5)3. 单元程序模块 (7)4.参数计算 (9)四总原理图及硬件资源分配 (10)五安装与调试 (11)六性能测试与分析 (12)七结论 (12)八心得体会 (12)九参考文献 (13)一、概述近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

工程上常需要对各种机构工作的时间特性进行分析测量,如图1给出的这种时间特性示意图,其中t表示时间脉冲宽度,T表示一个工作循环周期。

工程实际中,影响时间特性的因素很多,因而工程中常需测量这种脉冲序列正脉冲或负脉冲的宽度。

图1 脉冲波形本系统采用单片机AT89C51为中心器件来设计脉冲宽度测量器,系统实用性强、操作简单、扩展性强。

在现有的单片机仿真机系统上掌握相关软硬件设计与调试知识,根据所选择题目,焊接好硬件电路,正确进行元器件的测试与调试,并在计算机上编写汇编程序调试运行,并实现参考选题中要求的设计。

二、方案设计与论证1.设定一个开关控制测量开始。

按动开关接外部中断0,响应1次外部中断。

在中断程序中测量脉宽。

2.将脉冲信号从P3.3脚引入。

将T1设为定时器方式工作。

并工作在门控方式。

初值TH1、TL1设为零。

在待测脉冲高电平期间,T1对内部周期脉冲进行计数。

在待测脉冲高电平结束时,其下降沿向P3.3发中断,在外中断1的中断服务程序中,读取TH1、TL1的计数值,该值就是待测脉冲的脉宽。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序代码
/******************************************************************
** 文件名: main.c
** 创建人: 飘扬
** 日 期: 2006.10.04
dis_digit = 0xfe;
dis_index = 0;
TR0 = 1;
//主程序
TR1 = 1;
while(1){
counter1=(TH1*0xff)+TL1;
dis_buf[0] = dis_code[0x0a];
dis_buf[1] = dis_code[counter2/100];
** 数与标称值的误差情况。
**
** 本程序的显示部分,直接修改于伟纳提供的数码管显示1-8例程。
**----------------------------------------------------------------*/
#include &lt;reg51.h&gt;
#include &lt;intrins.h&gt;
TH0 = 0xFC;
TL0 = 0x17;
TH1 = 0;
TL1 = 0;
IE = 0x83; //开定时器0中断和外部中断0
IT0 = 1; //外部中断0为边沿触发方式
//显示初始化
counter1=0; //右测显示的本周当前脉冲数
counter2=0; //左测显示的上一周脉冲数
** 修改人:
** 日 期:
** 描 述: 本程序使用伟纳300A型实验板,来检测光电旋转编码器的实际每周
** 输出脉冲数。程序中,定时器0用于8位数码管动态扫描定时,时间
** 为1ms(12MHZ晶振)。定时器1工作于模式1,计数器方式,直接测量
** 接在T1脚的脉冲个数。外部中断0,工作于边沿触发方式,接在旋转
unsigned char data dis_digit;
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
dis_buf[7] = dis_code[counter1%10];
} Βιβλιοθήκη } //外部中断0 void int0() interrupt 0
{
TL1=0;
TH1=0;
counter2=counter1;
}
void timer0() interrupt 1
// 定时器0中断服务程序, 用于数码管的动态扫描
dis_buf[2] = dis_code[(counter2%100)/10];
dis_buf[3] = dis_code[counter2%10];
dis_buf[4] = dis_code[0x0a];
dis_buf[5] = dis_code[counter1/100];
dis_buf[6] = dis_code[(counter1%100)/10];
// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
// 选通P2.0口数码管
// dis_buf --- 显于缓冲区基地址
{
TH0 = 0xFC;
** 编码器的Z信号输出上,用于检测编码器完整旋转一周。8位数码管,
** 接成动态扫描,接在P0和P2口。左4位,用来显示上一周的实际脉冲
** 数,右4位,用来显示当前周的脉冲数。
**
** 实际使用,感觉效果还可以。程序准确的测量出某牌光电旋转编码
** 器(400脉冲),实际工作时,双路信号输出脉冲数量不等,及脉冲
unsigned char data dis_buf[8];
unsigned char data dis_index;
unsigned int counter1,counter2; //左右计数器数值
void main()
{
P0 = 0xff;
P2 = 0xff;
TMOD = 0x51; //定时器0工作在模式1定时器方式,定时器1工作在模式1计数器方式
通下一位数码管
dis_index++; //
dis_index &amp;= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
}
TL0 = 0x17;
P2 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P2 = dis_digit; //
dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选
相关文档
最新文档