51单片机测试马达转速
rtx51Tiny 马达测速
![rtx51Tiny 马达测速](https://img.taocdn.com/s3/m/084fee8a84868762caaed53c.png)
RTX-51实时操作系统的移植专业班级:2007级通信工程1班姓名:刘智目录引言3 1 单片机操作系统 51.1 单片机操作系统简介 51.2 单片机操作系统的优势 51.3 单片机操作系统的发展趋势72 RTX51 Tiny结构及工作方式分析82.1 RTX51 Tiny的任务和事件82.1.1 RTX51 Tiny任务状态82.1.2 同步机制92.1.3 调度策略102.1.4 存储器管理错误!未定义书签。
2.1.5 中断处理132.2 应用RTX51 Tiny的说明163 单片机的硬件结构173.1 STC89C52基本参数介绍173.1.1 定时/计数器结构203.1.2 定时器工作方式234 基于RTX51 Tiny的电动机测速控制系统的实现284.1 方案总体设计284.2 硬件设计294.2.1 传感器模块294.2.2 负载部分314.2.3 液晶显示部分错误!未定义书签。
4.2.4 键盘部分354.3 软件部分374.3.1 系统任务设计374.3.2 人机交互部分374.3.3 中断部分42结论45 致谢46 参考文献47摘要在嵌入式开发中,嵌入式操作系统的应用是重要的一环。
文中以采用单片机操作系统的优势和单片机操作系统当前发展趋势为先导,进而引出一种适用51系列单片机的实时多任务操作系统——RTX51 Tiny。
依次从RTX51 Tiny操作系统的任务状态、同步机制、调度策略、存储器管理、中断处理和任务切换等方面对该单片机操作系统进行详细分析。
在此基础上,最后通过基于RTX51 Tiny操作系统的电动机测速控制系统的实例进行实际操作。
该实例采用脉宽调制技术完成对直流有刷电动机的调速,通过红外传感器对电动机进行速度测量,并将运行状态和相关参数通过液晶屏幕显示。
按键操作可对电动机进行速度、电动机运转方向和系统运转状态进行调节与控制。
通过应用实践得到以下结论:该操作系统的应用程序启动简单,没有操作系统的启动过程;短小精悍,代码不足50行;运行可靠,仿真、硬件运行结果充分证实了单片机操作系统的巨大优势。
基于51单片机的速度检测系统解析
![基于51单片机的速度检测系统解析](https://img.taocdn.com/s3/m/efb3fa326529647d26285275.png)
基于51单片机的速度检测系统摘要在工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为模拟式和数字式两种。
模拟式采用测速发电机为检测元件,得到的信号是模拟量。
数字式通常采用光电编码器,霍尔元件等为检测元件,得到的信号是脉冲信号。
随着微型计算机的广泛应用,特别是高性能价格比的单片机的出现,转速测量普遍采用以单片机为核心的数字式测量方法。
本文便是运用单片机控制的智能化测量自行车转速。
自行车在运行过程中,需要对其进行监控,转速是一个必不可少的一个参数。
本系统就是对自行车转速进行测量,并显示转速,了解自行车运行的基本状况。
本设计主要用AT89C51作为控制核心,由霍尔传感器、LED数码显像管、及24C02构成。
详细介绍了单片机的测量转速系统及串行通讯。
充分发挥了单片机的性能。
本文重点是测量速度并显示在4位LED数码管上。
其优点硬件是电路简单,软件功能完善,测量速度快、精度高、控制系统可靠,性价比较高等特点。
关键字:MSC-51(单片机);计算机;传感器自动化测量Speed test brief introductionAbstract:In the bike practice, we will meet each kind to need frequently to survey the rotational speed the situation, the survey rotational speed method divides into the simulation type and the digital two kinds. The simulation type uses measured that the fast generator is the detecting element, obtains the signal simulates the the de graduated from the design of the issue is control of the intelligent use of speed measuring instrument.The aticle is the motor speed measurement, and basic situation. This topic describes the design steps and method of humidity measurement system which based on chipdesign a system which can measure temperature and humidity, show the measurement results and warming.This system uses AT89C51 as the main chip, use a new integrated digital temperature and humidity sensor DHT11 gather the temperature and humidity data.It uses C language to design system programming on development platform. The main design is divided .Key words:single chip; intelligence; computer; transimiter; test.目录第1章引言 (1)第2章系统介绍 (2)2.1 系统结构 (2)2.2 系统要求 (3)第3章硬件电路设计 (4)3.1 单片机模块 (4)3.2 霍尔传感器模块 (9)3.3 显示模块 (10)3.4 24C02存储器简介 (11)第4章软件设计 (14)4.1编译语言的选择 (14)4.2程序模块 (14)4.3集成开发环境Keil介绍 (17)第5章调试 (22)5.1系统硬件调试 (22)5.2 系统软件调试 (22)5.3 系统整体调试 (23)结论 (24)致谢 (25)参考文献 (26)附件1原理图 (27)附件2 PCB板 (28)附件3 实物 (29)附件4 程序 (29)第1章引言自行车被发明及使用到现在已有两百多年的历史,在这两百年间人类在不断的尝试与研发过程中,自行车发展的目的也从最早的代步工具转换成休闲娱乐的用途,随着生活水平的提高,人们希望自行车的功能更强大,比如说对行车信息的掌握,而里程计/速度计正满足了这个需求。
51单片机测电机转速LCD显示
![51单片机测电机转速LCD显示](https://img.taocdn.com/s3/m/55b1173987c24028915fc33d.png)
主程序* 文件名称: Jiuzhouxuese.c 转速计的设计(LCD显示)的主程序* 原理: T1计数,T0计时,电动机每转动一周产生16个脉冲,T1采集一分钟内的脉冲数,后即可计算出转速* 版本信息: 2011-10-23---------------------------------------------------------------*/#include "LCD1602.h"#include<reg51.h>#define uint unsigned int#define uchar unsigned charbit flag; //计满1秒钟标志位uchar count=100; //储存定时器T0中断次数uint Speed; //储存电机转速uchar DispBuffer[4];//存放转换成液晶显示字符(ASCII)的数组/*------------------------------------------------------------功能:主函数说明:使用晶振为12MHz的芯片,定时0.01秒。
计时器初值为C=65536-0.01/10^(-6)=0D8F0H---------------------------------------------------------------*/void main(void){TMOD=0x51;//T1工作于计数模式1,T0工作于计时模式1;TH0=0xd8; //定时器T0赋初值TL0=0xf0;EA=1; //开总中断ET0=1; //定时器T0中断允许TR0=1; //启动定时器T0while(1){TR1=1; //计数T1启动TH1=0; //计数T1高8位赋初值0TL1=0; //计数T1低8位赋初值0flag=0; //时间还未满1秒钟while(flag==0) //时间未满等待Speed=(TH1*256+TL1)*60/16; //计算速度,每周产生16个脉冲}}/*-------------------------------------------------------------函数功能:定时器T0的中断服务函数--------------------------------------------------------------*/void Time0(void ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器{count--; //T0每中断1次,count减1LCD_Initial();//液晶初始化if(count%4==0){DispBuffer[0]=Speed/1000+0x30; //将显示数据并分解出千位转换成ASCII码}if (count%4==1){DispBuffer[1]=Speed%1000/100+0x30;//将显示数据并分解出百位转换成ASCII码}if(count%4==2){DispBuffer[2]=Speed%100/10+0x30;//将显示数据并分解出十位转换成ASCII码}if(count%4==3){ DispBuffer[3]=Speed%10+0x30 ; // 将显示数据并分解出个位转换成ASCII码}LCD_Prints(1,0,DispBuffer);//LCD显示数据while(0);if(count==0) //若累计满100次,即计满1秒钟{flag=1; //计满1秒钟标志位置1count=100; //清0,重新统计中断次数}TH0=0xf0; //定时器T0重新赋初值TL0=0xd8;}LCM1602驱动程序/************************************* *************************************File Name: LCD1602.hAuthor: JiuzhouxunseCreated: 2011/10/23************************************* ************************************* */#ifndef _LCD_1602_H#define _LCD_1602_H#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char定义接口************************************* sbit LcdRs = P2^0;sbit LcdRw = P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数************************************* ************************************* unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();//while(DBPort&0x80),在用Proteus仿真时,屏蔽此语句,否则会进入死循环!LcdEn=0;return DBPort;//向LCD写入命令或数据************************************* ***********************#define LCD_COMMAND 0 // 命令#define LCD_DATA 1 // 数据#define LCD_CLEAR_SCREEN 0x01// 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************* ***********************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND,0x08|DisplayMode);}//设置输入模式************************************* ***********************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00// 为缺省设置#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00//画面不可平移void LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND,0x04|InputMode);}//初始化LCD********************************* ***************************void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);//此句不能省LCD_SetDisplay(LCD_SHOW|LCD_NO _CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CL EAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_ MOVE); //AC递增, 画面不动}//************************************ ************************************ void LCD_Pos(unsigned char x, unsignedchar y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x); if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0 x40));}void LCD_Prints(uchar x,uchar y, unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}Proteus仿真图。
基于51单片机和霍尔开关传感器的转速测量仪
![基于51单片机和霍尔开关传感器的转速测量仪](https://img.taocdn.com/s3/m/44451d60b84ae45c3b358c67.png)
基于51单片机和霍尔传感器的转速测量仪摘要系统由传感器、信号处理、系统软件等部分组成。
传感器采用霍尔开关传感器(JK8002C),负责将转速转化为脉冲信号;信号处理电路(反相器74LS14)包含待测信号整形反相等部分,波形变换和波形整形电路实现把正负交变的信号波形变换成可被单片机接受的TTL/CMOS兼容信号。
处理器采用51单片机,显示器采用单片机开发板自带的8位LED数码管动态显示。
课题背景在工农业生产和工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为模拟式和数字式两种。
模拟式采用测速发电机为检测元件,得到的信号是模拟量,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难。
数字式通常采用光电编码器、圆光栅、霍尔元件等为检测元件,得到的信号是脉冲信号。
单片机技术的日新月异,特别是高性能价格比的单片机的出现,转速测量普遍采用以单片机为核心的数字式测量方法,使得许多控制功能及算法可以采用软件技术来完成。
采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率。
本课题,是要利用霍尔传感器来测量转速。
由磁场的变化来使霍尔传感器产生脉冲,由单片机计数,经过数据计算转化成所测转速,再由数码管显示出来。
1.硬件部分概述1.1系统组成框图系统框图原理如图1-1所示,系统由传感器、信号处理、数码管显示、蜂鸣器超速报警和系统软件等部分组成。
传感器采用霍尔开关传感器(JK8002C),负责将转速转化为脉冲信号。
信号处理电路反相器74LS14)包含待测信号波形变换、波形整形等部分,波形变换和波形整形电路实现把正负交变的信号波形变换成可被单片机接受的TTL/CMOS 兼容信号。
处理器采用51单片机,显示器采用8位LED 数码管动态显示。
1.2霍尔传感器测转速原理及特性霍尔传感器是对磁敏感的传感元件,由磁钢、霍耳元件等组成。
测量系统的转速传感器选用SiKO 的 jk8002c 的霍尔传感器,其响应频率为100KHz ,额定电压为5-30(V )、检测距离为10(mm )。
C51单片机在电机转速测量仿真系统中的设计
![C51单片机在电机转速测量仿真系统中的设计](https://img.taocdn.com/s3/m/f7ab4bce700abb68a982fbd9.png)
C51 单片机在电机转速测量仿真系统中的设计单片机电机转速测量系统仿真系统采用单片机中T1 计数器对转速脉冲进行计数。
定时器T1 工作于外部事件计数方式,对转速脉冲计数; T0 工作于定时器方式。
每到1 s 读1 次计数值,此值即为脉冲信号的频率,根据式(1)可计算出电机的转速。
转速检测装置的软件系统主要包括:测速主程序、数据处理子程序和显示子程序。
单片机上电后,系统进入准备状态。
首先进行初始化,然后读取脉冲数据进行运算,将转速显示在LCD 上。
需要这款仿真及C 语言程序的爱好者可从文章配图左上角网址上了解。
该单片机电机转速测量系统仿真仿真采用测频法“M法”测量电机转速。
即在一定测量时间T 内,测量脉冲发生器(替代输入脉冲)产生的脉冲数m1 来测量转速,计算式如下:n=60m/TP,式中:P-为转轴转一周脉冲发生器产生的脉冲数;n-转速单位:(转/分);T-定时时间单位:(秒)。
在该方法中,测量精度是由于定时时间T 和脉冲不能保证严格同步,以及在T 内能否正好测量外部脉冲的完整的周期,可能产生的1 个脉冲的量化误差。
因此,为了提高测量精度,T 要有足够长的时间。
定时时间可根据测量对象情况预先设置。
设置的时间过长,可以提高精度,但在转速较快的情况下,所计的脉冲数增大(码盘孔数已定情况下),限制了转速测量的量程。
而设置的时间过短,测量精度会受到一定的影响。
转速部分软件设计思路:AT89S52 单片机的P3.5 口接收传感器的信号。
电路由显示电路、AT89S52 单片机,单片机时钟电路,复位电路,等组成。
中断服务程序INT0,软件需要解决的是定时器T0 的记数和外部计数器T1 的协调工作。
由于测量的转速范围大,所以低速和高速都要考虑在内,软件工作流程:传感器检测出电机转动一转的脉冲数,由单片机的P3.5 端口送入单片机,由单片机的内部计数器T1 计数,启动计数时,发送一个信号TR0=1,内部定时器T0 开始时,TH0、TL0 设定初值为0。
51单片机的直流电机调速、测速以及显示系统
![51单片机的直流电机调速、测速以及显示系统](https://img.taocdn.com/s3/m/a387e40802020740be1e9baa.png)
52.................................................................................................... 单清序程 2.4
53................................................................................................ 望展与论结 章五第
述概
1.1
述概
章一第
3
。图理原路电效等的构结部内器码译供提里盘光品产在。然 了目一�上BCP 在印经已围范址地�出输组8供提。器码译为作件器DLP用采 。口端出输挽推行并位8个1、口端入输阻高行并位8个1展扩 。储存据数量容大者或hsalF序程作用以可�器储存hsalF量容大BK215展扩 。MAR态静BK23展扩 。验实做户用便方�出引针插排双用部全口端O/I组4的机片单 。MORPEE的B652有 置内还片芯狗门看�外此。位复狗门看、位复键按、位复CR�选可式方位复 。便方了供提验实做 来振晶的点频它其成换替户用为�装安式座插用采�zHM2950.11认默�振晶 。能功真仿等问访备设围外、察观量变 、出跳、点断、速全、步单持支面全够能片芯真仿该。序程动驱的别特装安 要需不并且而�真仿线在件硬行进地便方够能�下持支的15C lieK具工发开 件软境环swodniW机片单核内1508的行流最前目在。片芯真仿的门专片1备配 。线载下的门专作制要需不�载下PSI现实能就�配标箱 验实CPOStramS随经已缆电该�缆电信通232-SR脑电通普根一要需只15kciuQ 。 序 程 户 用 载 下 式 方 � 程 编 可 统 系 在 � PSI 持 支 机 片 单 2DR15VL98P 的 备 配 。等等�TRAU 型强增 �IPS 件硬 � �便方不 �位复有只 2508� 醒唤可断中部外后式模电掉入进 �级先 优断中个 4�RTPD 双�式模速倍双�MAR 态静内片 BK1� �能功 PAI 和 PSI 持 支来用�hsalF 导引 BK8�hsalF 序程户用 BK46 置内如�能功强增多许有具 。核内 UPC 2508 letnI 型强增�2DR15VL98P 机片单型新体导半 spilihP 用采 � � � � � � �
基于51单片机测电机转速的设计
![基于51单片机测电机转速的设计](https://img.taocdn.com/s3/m/2d440c573b3567ec102d8a1f.png)
基于51单片机测电机转速的设计[摘要]:本课题设计了一种基于单片机的电子测速仪,测速仪以89C51为数据处理主控芯片。
测速仪的主要组成部分:霍尔传感器、以89C51芯片为核心的密码锁的数据处理与控制电路、输出显示电路。
另外系统还有LED报警灯,单片机复位电路等。
测速电路的关键问题是物理信号到电信号的转换,以及脉冲的产生、报警与复位。
同时该测速仪具有低能耗、体积小、使用方便,非接触等优点,具有很强的使用价值[关键词]:单片机;测速仪51 singlechip design of measurement of motor speed based onAbstract:This project is to design a kind of electronic measurement instrument based on single chip microcomputer, velocimetry using 89C51 as main control chip data processing.Main components: Holzer velocimetry sensors, taking the 89C51 chip as the corecryptographic data processing and control circuit, the lock output display circuit.Another system and LED warning lamp, microprocessor reset circuit etc.. The keyproblem of conversion speed measuring circuit is a physical signal to electrical signal,and the pulse generation, alarm and reset. At the same time, the instrument has theadvantages of low energy consumption, small volume, convenient use, non - contactand other advantages, has the very strong use valueKeywords:MCU; velocimetry目录第一章绪论 (3)1.1测速仪的背景与分类 (3)1.2测速仪的运用于发展 (3)1.3本设计的意义与要求.................................................. .1 第二章单片机测速仪的主要元件介绍.. (2)2.1单片机89c51的介绍 (2)2.2 霍尔元件的介绍 (5)2.3比较器LM393的介绍............................................................................. (6)第三章基于单片机测速的工作概述以及原理分析 (9)3.1基于单片机测速的工作概述 (9)3.2系统硬件总电路图............................................................................. .. (9)3.3检测电路模块............................................................................. (9)3.4复位电路模块 (10)3.5晶振电路模块 (11)3.6电源电路模块 (11)3.7显示电路模块............................................................................. (12)3.8报警电路模块............................................................................. (12)第四章单片机测速系统组成 (13)4.1转速测量系统原理框图 (13)4.2系统软件框图 (13)第五章系统软件设计 (14)5.1系统流程序 (14)5.1.1系统主程序流程图............................................................................. (14)5.1.2测速程序流............................................................................. . (15)5.1.3 显示流程图............................................................................. (16)5.2程序............................................................................. . (21)第六章单片机测速电路实物运行 (22)6.1实物整体图......................................................... .226.2 测速显示 (23)6.2.1转速显示............................................................................. (23)6.2.2低速报警显............................................................................. . (24)6.2.3高速报警显示............................................................................. (25)小结............................................................................. ............................................................................... . (26)致谢 (27)附录一单片机测速PCB原理图............................................................................. . (28)附录二单片机测速元器件清单............................................................................. .. (29)参考文献............................................................................. ............................................................................... . (30)第一章绪论1.1测速仪的分类目前测量电机转速的方法很多,按照不同的理论方法,先后产生过模拟测速法(如离心式转速表、用电机转矩或者电机电枢电动势计算所得)、同步测速法(如机械式或闪光式频闪测速仪)以及计数测速法。
转速测量系统设计基于51单片机的转速测量系统
![转速测量系统设计基于51单片机的转速测量系统](https://img.taocdn.com/s3/m/87652e15ba0d4a7303763a69.png)
由专业人员将敏感元件和相应的测量电路、传递机构以适当的形式制成不同类型、不同用处的传感器,根据原理输出电量。该电量可以是模拟量或数字量,现代传感器还可以输出开关量,用于数字逻辑电路。
(3)通过测量仪表拾取被测信号
目前有许多测量仪表用于各种测量中,有大信号输出、有BCD码输出等,但价格昂贵,专业性强,一般不适合通用系统。通用的转速测量系统大都采用一种俗称“码盘”的传感装置,将圆形的码盘固定在转轴上,码盘上有若干规则排列的小孔,用光电偶来输出电信号,以反映转速对应关系,即是将转轴的速度以脉冲形式反映出来,通常有计要求,在系统工作原理的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。
摘要
本文是基于51单片机的转速测量系统,其测量方法较多,随着单片机对脉冲信号的处理能力越来越强大,使得全数字量系统越来越普及,并且使转速测量系统也可以用全数字化处理。
本设计利用霍尔效应对旋转物体进行检测的转速测量系统。该系统采用UGN3144霍尔传感器把转速信息转换为电压输出,输出电压经整形电路送入STC89C51单片机进行数据处理并用四位7段LED显示器显示测量结果。文中首先阐述了构成该系统的原理、硬件的实现方法,在该系统中对信号频率进行测量是首要任务,通过各种测量方法的对比下,该系统应采用测频法测量。其次,在软件设计部分,此系统包含系统初始化程序的设计、数据接收和处理程序的设计、显示程序的设计三个模块。最终,给出各部分的原理框图、电路图及转速测量的程序流程图,并编出其具体的程序。
3.单片机
单片机是整个测量系统的主要部分,担负对前端脉冲信号的处理、计算、以及信号的同步,计时等任务,其次,将测量的数据经计算后,将得到的转速值传送到显示接口中,用数码管显示数值。在本系统中考虑到计数的范围、使用的定时,计数器的个数及I/O口线,预选用89C51单片机。具体工作情况在后讨论。
基于51单片机和霍尔传感器的测速
![基于51单片机和霍尔传感器的测速](https://img.taocdn.com/s3/m/388d3ef6e109581b6bd97f19227916888486b9b6.png)
基于51单片机和霍尔传感器的测速1. 小项目简介主要采用stc89c51/52单片机作为主控,由霍尔传感器作为测速的基本模块,采用按键控制速度快慢,数码管显示当前速度。
最后成品图如下:2.电源部分1.电源供电的功率尽可能的稍微大一些,我是采用罗马仕充电宝供电(5V,2.1A输出口)。
因为电源功率过小,将造成电机无法带动,或者数码管闪烁等硬件上的bug。
2.如果电源的电压高于5V,需要在电源输入端使用一个稳压电路,将输入电压稳压到5V给单片机,和其他外设供电。
防止电压过高造成器件损坏。
3.硬件部分1. stc89c51/52的最小系统注意:如果使用一般的USB接口供电,当电机转动时候,可能照成单片机的管脚供电不稳定,所以需要在单片机的IO的外接上拉排阻。
P3口不需要。
9针排阻如下:有小点的一端是公共端,需要和电源5V连接,其余口和单片机管脚一一对应焊接就行。
2. 霍尔传感器注意引脚,窄的一面来看引脚顺序:这里的VOUT口可以直接连接单片机的外部中断1口,可以经过一个电压比较器lm393之类的在给单片机。
3. 直流电机马达驱动51单片机的IO口输出的电流过小,驱动直流电机马达效果不明显,达不到后期变速,需要使用一个三极管(9015\9013这类都可以)放大电路去驱动马达:示范电路如下:(电阻根据自己需要修改)4. 共阴数码管//数码管位选sbit S1=P2^4;sbit S2=P2^5;sbit S3=P2^6;sbit S4=P2^7;//数码管段选:P1的八个IO口。
连线的时候一定根据下列图示的段选(注意注意注意:容易连错)4.软件部分1.软件工程整体图:2.main.c文件代码:自己创建一个51单片机的keil工程文件,将下面代码拷贝到自己工程文件下的main.c文件替换即可/************************************************************** ************************* 基于51单片机测速* 实现现象:按下按键K1减速按下按键K2加速外部中断1对应IO口P3^3注意事项:电机速度不能过快,否则会造成数码管显示不稳定*************************************************************** ************************/#include 'reg52.h' //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;//测试端口(根据自己需要决定)sbit led=P0^0; //将单片机的P0.0端口定义为led/************************************************************** ****************************************************核心部分**************************************************************************************************************** ************************///占空比u16 time = 0; // 定义占空比的变量u16 count=30; //定义占空比上限sbit PWM=P0^1;// P0.1输出pwm//速度u16 zhuansu=0; //转速初值为0u16 jishu = 0; //jishu的变量初值为0u8 flag = 0; //定时器1计数变量//按键sbit k1=P2^0;sbit k2=P2^1;sbit k3=P2^2;sbit k4=P2^3;//数码管位选sbit S1=P2^4;sbit S2=P2^5;sbit S3=P2^6;sbit S4=P2^7;//数码管位选:P1的八个IO口//共阴数码管段选u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值//数码管存储中间变量unsigned char Display_data[4];/************************************************************** ****************** 函数名 : delay* 函数功能 : 延时函数,i=1时,大约延时10us*************************************************************** ****************/void delay(u16 i){while(i--);}//定时器和外部中断1的初始化函数void InitSyetem(){//配置外部中断1:采集霍尔传感器触发下降沿IT1 = 1; //选择下降沿触发EX1 = 1; //打开外部中断1//定时器0,1工作方式1TMOD=0x11; //定时或者计数模式控制寄存器//定时器0配置:产生PWM波TH0=(65536-10)/256;//赋初值定时10usTL0=(65536-10)%256;//sET0=1;//开定时器0中断TR0=1;//启动定时器0//定时1:测速TH1=(65536-10000)/256;//赋初值定时10msTL1=(65536-10000)%256;ET1=1;//开定时器0中断TR1=1;//启动定时器0PX1=1;//设置优先级PT1=1;//设定定时器1为最高优先级EA=1;//开总中断}//外部1中断服务函数void Service_Int1() interrupt 2{jishu++; //霍尔下降沿一次就记一次数if(jishu == 100) //累加计数有100次,总时间为100 * 10ms = 1s{led^=led; //led闪烁}}//定时0处理函数产生PWM 调速原理———在PWM高电平时候驱动电机转动在PWM低电平时候让电机停止转动void Service_Timer0() interrupt 1{TR0=0;//赋初值时,关闭定时器TH0=(65536-10)/256;//赋初值定时TL0=(65536-10)%256;//0.01msTR0=1;time++; //计数变量if(time>=100) time= 0; //清零标志变量if(time<=count) //小于设定值,输出高电平{PWM = 1;}elsePWM = 0;}//定时器1中断处理显示转速void Service_Timer1() interrupt 3{TR1=0;//赋初值时,关闭定时器TH1=(65536 - 10000) / 256;TL1=(65536 - 10000) % 256;//定时10msTR1=1;flag++; //计数变量加if(flag==100) //计时到达1s 测量此时的转速{// led=~led; //led状态取反zhuansu = jishu; //监测霍尔传感器总共计数次数jishu=0; //转速置0flag=0; //清除计数变量}}//数码管处理函数void Deal_data(){Display_data[3]=smgduan[zhuansu/1000]; //数码管高位Display_data[2]=smgduan[zhuansu/100%10];//去第二位Display_data[1]=smgduan[zhuansu/10%10];Display_data[0]=smgduan[zhuansu%10]; //数码管低位}/************************************************************** ****************** 函数名 : DigDisplay* 函数功能 : 数码管动态扫描函数,循环扫描4个数码管显示*******************************************************************************/void DigDisplay(){u8 i;for(i=0;i<4;i++){switch(i) //位选,选择点亮的数码管,{case 0 : S1 = 0; S2 = 1; S3 = 1; S4 = 1;break; //点亮第一位数码管case 1 : S2 = 0; S1 = 1; S3 = 1; S4 = 1;break;case 2 : S3 = 0; S1 = 1; S2 = 1; S4 = 1;break;case 3 : S4 = 0; S1 = 1; S2 = 1; S3 = 1;break;}P1=Display_data[i];//发送段码delay(5); //间隔一段时间扫描时间越少,一起亮且显示越稳定;时间越多,是流水点亮P1=0x00;//消隐时间过快时,每个数码管将会有重影}}/************************************************************** ****************** 函数名 : keypros* 函数功能 : 按键处理函数,判断按键K1是否按下*************************************************************** ****************/void keypros(){if(k1==0) //检测按键K1是否按下{delay(100); //消除抖动一般大约10ms 时间的估算100*n=1(s) if(k1==0) //再次判断按键是否按下{led=~led; //led状态取反count+=10;if(count >= 90) //设置一个上限count+=90;}while(!k1); //检测按键是否松开为假时候说明按键没有释放}if(k2==0) //检测按键K1是否按下{delay(100); //消除抖动一般大约10msif(k2==0) //再次判断按键是否按下{led=~led; //led状态取反count-=10;if(count <= 10){count = 10;}}while(!k2); //检测按键是否松开}}/************************************************************** ****************** 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*************************************************************** ****************/void main(){led = 0; //上电熄灭小灯P1 = 0x00; //上电初始化熄灭数码管InitSyetem();//定时器和外部中断1的初始化函数while(1){keypros(); //按键处理函数Deal_data(); //数据处理函数DigDisplay(); //数码管显示函数}}。
MCS-51单片机电机转速控制及测速显示系统
![MCS-51单片机电机转速控制及测速显示系统](https://img.taocdn.com/s3/m/13d5d2d76394dd88d0d233d4b14e852458fb3913.png)
MCS-51单片机电机转速控制及测速显示系统简介MCS-51单片机是一种广泛应用于嵌入式系统的单芯片微型计算机。
本文将介绍基于MCS-51单片机的电机转速控制及测速显示系统。
该系统通过对电机信号进行处理,实现了对电机转速的控制和测速。
系统组成该系统由电机、电机驱动电路、MCS-51单片机、显示模块等组成。
电机驱动电路:使用了L298N电机驱动芯片,可以为电机提供双向直流电源。
该电子板还添加了变阻器控制,通过调节电子板上的两个旋钮来改变电机的转速和方向。
MCS-51单片机:采用AT89S52芯片,主控为MCS-51单片机,在控制电机的同时,还可以测量电机的转速。
通过单片机与电机驱动电路的控制,来控制电机的转速。
显示模块:采用了LCD2004液晶显示模块,可实现对转速和程序运行状态的显示。
系统原理当电机启动时,读取电机反馈的信号,并将该信号传递给MCS-51单片机进行处理。
根据控制算法,单片机输出PWM(脉冲宽度调制)信号给电机驱动模块,从而改变电机的转速和方向。
同时,单片机还可以测量电机旋转的速度,将其显示在LCD2004液晶显示器上。
当用户需要改变电机的转速时,可以通过旋转电子板上的旋钮来改变电机的转速和方向。
同时,LCD2004显示器可以显示电机的当前实际速度和设定速度,帮助用户更好的控制电机的运转。
系统功能该系统具有以下功能:1.控制电机的转速和方向;2.测量电机的转速;3.显示电机的当前实际速度和设定速度。
系统优势该系统采用MCS-51单片机,具有代码量小、容易维护、功耗低等优势,适合于嵌入式系统中的电机转速控制应用。
此外,显示模块也可以提供对系统状态的及时监控和反馈,便于故障排除。
本文介绍了基于MCS-51单片机的电机转速控制及测速显示系统。
该系统通过对电机信号进行处理,实现了对电机转速的控制和测速。
该系统具有代码量小、容易维护、功耗低等优势,适合于嵌入式系统中的电机转速控制应用。
同时,显示模块也可以提供对系统状态的及时监控和反馈,便于故障排除。
基于-51单片机的电机转速测量和显示系统
![基于-51单片机的电机转速测量和显示系统](https://img.taocdn.com/s3/m/1fb851e95acfa1c7ab00cc89.png)
目录1 绪论 (2)1.1 题目背景及目的 (2)1.2 题目研究方法 (2)2 系统设计基础知识 (3)2.1 直流电机的基本知识 (3)2.2 51单片机的基础知识 (7)2.3 LED显示管 (10)2.4 传感器 (10)3 系统总体方案设计 (14)3.1 系统分析 (14)3.2 设计思路和方案 (16)3.3 系统构成 (17)4 硬件电路设计 (19)4.1 电源电路 (19)4.2 转速测量电路 (19)4.3 LED显示模块 (21)4.4 系统硬件设计 (21)5 系统软件设计 (23)5.1 计时方案的选择 (23)5.2 软件结构划分 (24)6设计心得与体会 (26)7参考文献 (26)摘要单片机又称单片微控制器(MCU),它把一个计算机系统集成到一个芯片上。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
随着电子技术的迅猛发展,单片机技术也有了长足的发展,目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹,导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
各种电机在工业得到广泛应用,为了能方便的对电机进行控制、监视、调速,有必要对电机的转速进行测量,从而提高自动化程度。
转速是工程上一个常用参数。
转速测量的方法很多,采用光电开关管测量转速是较为常用的测量方法。
在本系统设计中,我们以51单片机为核心控制单元,以红外对管(或称光/电,电/光二极管)为传感器,通过光电传感器实时采集电机转速并进行处理与显示,设计出一个电动机转速测量系统,并研究其测量精度、测量围及响应速度.程序设计部分分为初始化模块、脉冲计数模块、计时模块、参数调整模块和显示模块.最后通过试验测试,得到了相应的技术参数,并对转速测量系统的误差进行了分析.要求设计的系统稳定可靠、抗干扰能力强、成本低,使用方便。
51单片机测小电机转速程序
![51单片机测小电机转速程序](https://img.taocdn.com/s3/m/ee8f9fd35727a5e9846a61b5.png)
#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表p0口uchar code tab_bit[]={0x07,0x0b,0x0d,0x0e};//位码表p2口低四位uchar count; //计数器,显示程序通过它得知现正显示哪个数码管uint shuzhi;uchar disp_buf[4]; //4字节的显示缓冲区void timer1() interrupt 3 //中断一次时间为3ms显示一位数码管值,显示一轮时间12ms,1s 动态显示80多次{uchar tmp;static unsigned int js=0;js++;TH1=(65536-3000)/256;TL1=(65536-3000)%256; //定时时间为3000个周期tmp=tab_bit[count]; //取位值P2=P2|0x0f; //P2与00001111B相或P2=P2&tmp; //P2与取出的位值相与tmp=disp_buf[count]; //取出待显示的数tmp=tab[tmp]; //取字形码P0=tmp;count++;if(count==4) count=0;}void main(){uint tmp;shuzhi=0;TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1TH1=(65536-3000)/256;TL1=(65536-3000)%256;//定时时间为3000个周期TR0=1; //计数器0开始运行TR1=1;EA=1;ET1=1;for(;;){tmp=shuzhi;disp_buf[3]=tmp%10;tmp/=10;disp_buf[2]=tmp%10;tmp/=10;disp_buf[1]=tmp%10;tmp/=10;disp_buf [0]=tmp%10;}}。
基于51单片机的直流电机转速测控系统设计
![基于51单片机的直流电机转速测控系统设计](https://img.taocdn.com/s3/m/616e0d8cd5bbfd0a795673fd.png)
基于51单片机的直流电机转速测控系统设计0 引言目前使用的电机模拟控制电路都比较复杂,测量范围与精度不能兼顾,且采样时间较长,难以测得瞬时转速。
本文介绍的电机控制系统利用PWM 控制原理,同时结合霍尔传感器来采集电机转速,并经单片机检测后在显示器上显示出转速值,而单片机则根据传感器输出的脉冲信号来分析转速的过程量,并超限自动报警。
本系统同时设置有按键操作仪表,可用于调节电机的转速。
1 系统方案的制定直流电机控制系统主要是以C8051 单片机为核心组成的控制系统,本系统中的电机转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此,由MCU 内部的可编程计数器阵列输出PWM 波,以调整电机两端电压与控制波形的占空比,从而实现调速。
本系统通过霍尔传感器来实现对直流电机转速的实时监测。
系统的设计任务包括硬件和软件两大部分,其中硬件设计包括方案选定、电路原理图设计、PCB 绘制、线路调试:软件设计包括内存空间的分配,直流电机控制应用程序模块的设计,程序调试、软件仿真等。
2 硬件设计C8051 是完全集成的混合信号系统级MCU 芯片,具有64 个数字I/O 引脚,片内含有VDD 监视器、看门狗定时器和时钟振荡器,是真正能独立工作的片上系统,并能快捷准确地完成信号采集和调节。
同时也方便软件编程、干扰防制、以及前向通道的结构优化。
本单片机控制系统与外部连接可实时接收到外部信号,以进行对外部设备的控制,这种闭环系统可以较准确的实现设计要求,从而制定出一个合理的方案,图1 所示是电机测控系统框图。
本系统先由单片机发出控制信号给驱动电机,同时通过传感器检测电机的转速信号并传送给单片机,单片机再通过软件将测速信号与给定转速进行比较,从而决定电机转速,同时将当前电机转速值送LED 显示。
此外,也可以通过。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit vcc=P2^7;
sbit leda=P2^6;
sbit beep=P2^3;
sbit PASS=P2^4;
sbit FAIL=P2^5;
sbit mada=P4^0;
//sbit key=P3^2;
sbit key=P0^6;
sbit PASS_BY1=P0^5;
sbit FAIL_BY1=P0^4;
FAIL_BY1=0;
delayms(1000);
delayms(1000);
FAIL_BY1=1;
ck=1; //只闪一次;
}
}
}
caiyangP10();
displayP10();
pass_num=0;
Lcd_WriteCmd(0x80+3);
for(num=8;num<14;num++)
{
Lcd_WriteData(table1[num]);
}
Lcd_WriteCmd(0x98+0);
if(miao<3)
{
miao++;
}
TF0=0;//清楚定时器0溢出标志
TH1=0;
TL1=0;
}
}
//*****************************************************
if((TR1!=1)&&(mada==1))
{
Lcd_WriteCmd(0x90);
for(num=0;num<16;num++)
{
Lcd_WriteData(table6[num]);
}
/* if((gb>5)&&(miao<6))
TL0=(65536-50000)%256; //重装计数初值
write++;
if(write>=20)
{
write=0;
TR0=0;//关闭定时0
TR1=0;
gb=(unsigned long)(TH1*256+TL1);
#include<stc12c5a60S2.h>
#include "INTRINS.H"
#define uchar unsigned char
#define uint unsigned int
#include "lcd12864.h"
uchar write,miao,shi,fen;
#include "ad.h"
} */
if(miao>1)
{
if((rs>200)&&(rs<283))
{
if(pass_num==0)
{
Lcd_WriteCmd(0x80+3);
for(num=0;num<4;num++)
{
Lcd_WriteData(table1[num]);
}
didi(1, 500,1000);
pass_num=1;
delayms(100);
mada=0;
if((ck==0)&&(key!=1))
TL0=(65536-50000)%256;
TH1=0;
TL1=0;
TR0=0;//关闭定时0
TR1=0;
delayms(10);
while(1)
{
if((key==0)&&(key_num!=1))
uchar pass_num;
uchar mada_temp;
uchar key_num,key1_num;
uchar ck;
void didi(uchar num, uint teme,teme1)
{
uchar di_num;
for(di_num=num;di_num>0;di_num--)
{
PASS_BY1=0;
delayms(1000);
delayms(1000);
PASS_BY1=1;
ck=1; //只闪一次;
}
}
}
else
{
delayms(20);
if((key==0)&&(key_num!=1))
{
key_num=1;
}
}
if(key==1)
{
delayms(20); 来自 if(key==1) {
{
beep=0;
delayms(teme);
beep=1;
delayms(teme1);
}
}
//***********************主程序******************************
main()
{
uchar num;
Lcd_Init();
mada=0;
vcc=0;
leda=0;
P4M1=0x00;
P4M0=0xff;
PASS=1;
FAIL=0;
ADC_Power_On(); //开AD电源
TMOD=0x51;//设定T0以工作方式1定时10毫秒
ET0=1;
EA=1;
TH0=(65536-50000)/256;
if(miao>2)
{
didi(3, 500,1000);
}
delayms(100);
mada=0;
if((ck==0)&&(key!=1))
{
PASS_BY1=1;
void DisplayOneChar(uchar X,uchar Y,uint num);//在第X+1行的第Y+1位置显示一个字符
void DelayMs(uint Ms);//1MS基准延时程序
uint gb,gb1,gb2,gb3;//转速值
uint rs;
uchar write,miao,shi,fen;
{
Lcd_WriteCmd(0x88);
for(num=0;num<10;num++)
{
Lcd_WriteData(table8[num]);
}
Lcd_WriteData(digit[miao]);
for(num=8;num<25;num++)
{
Lcd_WriteData(table1[num]);
}
key1_num=1;
}
if(pass_num!=1)
{
Lcd_WriteCmd(0x80+3);
for(num=4;num<8;num++)
{
Lcd_WriteData(table1[num]);
}
TR0=1;//10毫秒开始计时
TR1=1;//开始计数
}
}
}
void t0() interrupt 1 //定时中断服务函数
{
uchar num;
TH0=(65536-50000)/256; //对TH0 TL0赋值
key_num=0;
key1_num=0;
ck=0;
}
}
if((key_num==1)&&(key1_num==0))
{
mada=1;
mada_temp=0;
miao=0;
rs=gb;
Lcd_WriteCmd(0x88);
for(num=0;num<8;num++)
{
Lcd_WriteData(table7[num]);
}
DisplayOneChar(0x88, 4, rs);