㈠ 单片机 89C51
89系列单片机的型号编码由三个部分组成,它们分别是前缀,型号、后缀。它们的格式如下:
AT89C;×××
××××
其中:AT是前缀;
89C××××是型号;
××××是后缀。
下面分别对这三个部分进行说明,并且对其中有关参数的表示和意义作出相应的解释。
1.前缀
前缀由字母“AT”组成,它表示该器件是ATMEL公司的产品。
2.型号
型号由“89C××××”或“89LV××××”或“89S××××”等表示。
“89C××××”中,9是表示内部含Flash存储器;C表示是CMOS产品。
“89LV××××”中,LV表示低电压产品。
“89S××××”中,S表示含可下载Flash存储器。
在这个部分的××××表示器件型号数,例如:51,1051,8252等。
3.后缀
后缀由“××××”这4个参数组成。每个参数的表示和意义不同。在型号与后缀部分有“-”号隔开。
后缀中的第一个参数×用于表示速度,它的意义如下:
×=12,表示速度为12MHz,
×=16,表示速度为16MHz,
×=20,表示速度为20MHz,
×=24,表示速度为24MHz,
后缀中的第二个参数×用于表示封装。它的意义如下:
×=D,Cerdip。
×=J,塑料J引线芯片载体。
×=L,无引线芯片载体。
×=P,表示塑料双列直插DIP封装。
×=S,表示SOIC封装。
×=Q,表示PQFP封装。
×=A,表示TQFP封装。
×=W,表示裸芯片。
后缀中第三个参数×用于表示温度范围,它的意义如下:
×=C,表示商业产品,温度范围为0至+70℃。
×=I,表示工业产品,温度范围为-40至+85℃。
×=A,表示汽车用产品,温度范围为-40至+125℃。
×=M,表示军用产品,温度范围为-55至+150℃。
后缀中的第四个参数×用于说明产品的处理情况,它的意义如下:
×为空,则表示处理工艺是标准工艺。
×=/883,则表示处理工艺采用MIL-STD-883标准。
例如,有一个单片机型号为“AT89C51-12PI”,则表示意义为,该单片机是ATMEL公司的Flash单片机,内部是C51结构,速度为12MHz,封装为DIP,是工业用产品,按标准处理工艺生产。
㈡ 单片机课程设计以89C51为基础设计SPWM波发生器
/******************************************************************************
FileName : main.c
Author : 9long
Date : 2010.5.11
Target : STC89C51
Crystal : 12M
*******************************************************************************
模块功能 : 用定时中断调试PWM可调模块,可以接在直流电机上调速
******************************************************************************/
#include <REG52.H>
/*-----------------------------------宏定义----------------------------------*/
//键值表-----------------------------------------------------------------------
#define NOKEY 0
#define KEY1 128
#define KEY2 129
#define KEY3 131
#define KEY4 135
#define KEY5 64
#define KEY6 65
#define KEY7 67
#define KEY8 71
#define KEY9 32
#define KEY10 33
#define KEY11 35
#define KEY12 39
#define KEY13 16
#define KEY14 17
#define KEY15 19
#define KEY16 23
//数码管位驱动-----------------------------------------------------------------
#define DIG0 0xfe
#define DIG1 0xfd
#define DIG2 0xfb
#define DIG3 0xf7
#define DIG4 0xef
#define DIG5 0xdf
#define DIG6 0xbf
#define DIG7 0x7f
//字符表-----------------------------------------------------------------------
#define CODE0 0xc0
#define CODE1 0xf9
#define CODE2 0xa4
#define CODE3 0xb0
#define CODE4 0x99
#define CODE5 0x92
#define CODE6 0x82
#define CODE7 0xf8
#define CODE8 0x80
#define CODE9 0x90
#define CODEA 0x88
#define CODEB 0x83
#define CODEC 0xc6
#define CODED 0xa1
#define CODEE 0x86
#define CODEF 0x8e
#define CODEH 0x89
#define CODEP 0x8c
#define POINT 0x7f
#define CODE_ 0xf7
#define CODENO 0xff
//LED控制位(PWM模块接口定义,根据自已的需要更改)------------------------
sbit LED = P1^2;
/*---------------------------------变量定义----------------------------------*/
code const unsigned char NUMBER_CODE[10] =
{CODE0,CODE1,CODE2,CODE3,CODE4,CODE5,CODE6,CODE7,CODE8,CODE9};
code const unsigned char LED_DIG[8] =
{DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7};
unsigned char LED_SEG[8] = {0}; //显示缓冲区
unsigned char flag_10ms = 0; //10ms标志位
unsigned char last_key = 0;
unsigned char key = 0;
unsigned char PWM_CYCLE = 0; //PWM的周期
unsigned char PWM_ON = 0; //PWM的占空比
/******************************************************************************
函数名称:Delay1ms()
函数功能: 延时count*1ms
输入参数:count,无符号整型,最多计65535ms count
输出参数:无
全局变量:无
******************************************************************************/
void Delay1ms(unsigned int count)
{
unsigned int i=0;
unsigned int j=0;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
/******************************************************************************
函数名称:DisplayCode()
函数功能: 数码管显示缓冲,送段驱动
输入参数:x,无符号整型,最多显示65535
输出参数:无
全局变量:LED_SEG[i],NUMBER_CODE[i]
******************************************************************************/
void DisplayCode(unsigned int x)
{
unsigned char m=0;
LED_SEG[7]=CODEF;
LED_SEG[6]=CODE_;
LED_SEG[5]=CODE_;
while(x>=10000){x=x-10000;m++;}LED_SEG[4]=NUMBER_CODE[m];m=0;
while(x>=1000) {x=x-1000;m++;} LED_SEG[3]=NUMBER_CODE[m];m=0;
while(x>=100) {x=x-100;m++;} LED_SEG[2]=NUMBER_CODE[m];m=0;
while(x>=10) {x=x-10;m++;} LED_SEG[1]=NUMBER_CODE[m];m=0;
while(x>=1) {x=x-1;m++;} LED_SEG[0]=NUMBER_CODE[m];m=0;
}
/******************************************************************************
函数名称:ReadKey()
函数功能: 读取4*4矩阵按键的键值
输入参数:无
输出参数:按键的键值
全局变量:无
******************************************************************************/
unsigned char ReadKey(void)
{
unsigned char cord_x=0; //定义行和列
unsigned char cord_y=0;
P3 = 0x0f; //行扫描,高四位输出低电平,低四位高电平输入状态,进行行扫描
cord_x = (P3 & 0x0f); //行扫描值送入cord_x
if(cord_x == 0x0f)
return (0); //无键按下,返回0
else //有键按下,则继续进行按键扫描
{
P3 = (cord_x | 0xf0); //列扫描,高四位高电平输入状态,低四位扫描到的行进行回扫,那一行输出低电平
cord_y = P3 & 0xf0; //列扫描值送入cord_y
return (~cord_x + ~cord_y); //返回组合码
}
}
/******************************************************************************
函数名称:Play()
函数功能: 每10ms刷新显示和扫描按键
输入参数:无
输出参数:无
全局变量:flag_10ms,last_key,key,LED_DIG[i],LED_SEG[i]
******************************************************************************/
void Play(void)
{
unsigned char i=0;
while(!flag_10ms); //有标志位则退出循环
flag_10ms = 0; //标志位清零
for(i=0;i<8;i++) //数码管显示
{
P2 = LED_DIG[i]; //位驱动
P0 = LED_SEG[i]; //段驱动
Delay1ms(1); //延时1ms
}
P2 = 0xff; //清显示
P0 = 0xff;
last_key = key; //记住上次键值
key = ReadKey(); //读新键值
}
/******************************************************************************
函数名称:Timer1()
函数功能: 定时器0定时0.1ms
输入参数:无
输出参数:无
全局变量:PWM_ON为占空比,PWM_CYCLE为周期
******************************************************************************/
void timer1(void) interrupt 3
{
static unsigned char pwm=0;
pwm++;
if(pwm==PWM_ON)
LED=1; //灯灭
if(pwm==PWM_CYCLE)
{
pwm=0;
if(PWM_ON!=0)
LED=0; //灯亮
}
}
/******************************************************************************
函数名称:Timer0()
函数功能: 定时器0定时10ms
输入参数:无
输出参数:无
全局变量:flag_10ms
******************************************************************************/
void Timer0(void) interrupt 1
{
TH0 = 0xd8; //定时10ms
TL0 = 0xf0;
flag_10ms = 1; //设定标志位
}
/******************************************************************************
函数名称:main()
函数功能: 主函数
输入参数:无
输出参数:无
全局变量:last_key,key,PWM_ON为占空比,PWM_CYCLE为周期
******************************************************************************/
void main (void)
{
TMOD = 0x21; //time0方式1,timer1方式2
EA = 1; //开总中断
ET0 = 1; //开定时器0中断
TR0 = 1; //启动定时器0
ET1 = 1; //开定时器1中断
TR1 = 1; //启动定时器1
TH1 = 0x9c; //定时0.1ms
TL1 = 0x9c;
PWM_ON= 1; //设定占空比为1/10;
PWM_CYCLE = 10; //周期为10*0.1ms,可调,随便设置
P2 = 0x00; /*ULN2003有反向作用,ULN2003输出为高电平*/
for(;;)
{
Play();
DisplayCode(PWM_ON);
if((last_key == NOKEY) && (key == KEY1))
{
PWM_ON++;
if(PWM_ON>=10)
PWM_ON=0; //调占空比
}
}
}
㈢ 89c51单片机原理
不是两句话就可以讲明白的,最好静下心来看教材(书本),感觉看电子教材效果不太好,可能因人而异,教材太多了,找一本仔细看,戒骄戒躁,可以看看网上的视频教程。对内部资源、IO口硬件上的理解很重要。我感觉51单片机就是判断输入口的电平状态(高1低0),分析判断计算,然后输出一个电平信号(1或0)给后一级的电路。学习的关键是,静。
刚才只看到你的“89c51单片机原理”了,没注意下面的“秒表设计报告“。由于时间关系,只能简单说一下原理,①单片机内部定时器初始化;②显示时间初始化,可赋值0;③按开始键开启定时器进入定时器中断,每记一秒时间值加1;④按复位键关闭定时器,并将时间计数器清零。
㈣ 毕业论文的开题报告题目是《基于MCS-51 多倍周期法连续测频系统的设计与实现 》
基于 AT89C52 的多周期同步测频技术的实现黄晓峰 上海工程技术大学高职学院,上海 200437 摘 要:论述了传统的频率测量方法的原理及误差。提出了基于 AT89C52 实现多周期同步测频的新方法。 构造了与待测信号同步的多周期闸门时间,实现了时基信号与待测信号的准同步计数,系统只用一个定时/ 计数器 T2 实现了多周期同步测频。该频率测试仪结构简单,成本较低,能够在高低频段范围内实现频率参 数的等精度测量,具有较高的测量精度和较短的系统反应时间。 关键词:频率测量;多周期同步;闸门时间;AT89C52;捕捉方式; 关键词:频率测量;多周期同步;闸门时间;AT89C52;捕捉方式;等精度测量 中图分类号: 中图分类号: 文献标识码: 文献标识码:B 文章编号: 文章编号: Realization of multi-cycle synchronization based on AT89C52 HUANG Xiao-Feng Vocational Technical College, Shanghai University of Engineering Science, Shanghai, 200437 Abstract:The traditional frequency measuring principles and the errors are introced. The new way of : multi-cycle synchronization based on 89C52 is presented. By structuring multi-cycle gate time synchronistically with the frequency signal, the system use only T2 to acquire under synchronous time base with the frequency signal, and realize the new method of multi-cycle synchronization frequency measuring .With the characteristics of a simple structure ,low cost, high accuracy and short measuring time, this frequency meter can realize equal precision measurement from high frequency to low frequency . Keyword:frequency measurement; multi-cycle synchronization; gate time;AT89C52; capture function;equal : precision measurement 0 引言 频率作为一种最基本的物理量,是电子测量技术中最重要的被测量之一。本文详细论 述了传统频率测量方法及原理, 并对各种方法的测量误差进行了分析。 为保证频率测量精度 和兼顾测量反应时间, 采用多周期同步测频技术, 设计了以 AT89C52 单片机为核心的频率参 数测试仪, 由于充分利用 AT89C52 片内定时器/计数器 T2 所特有的捕捉功能, 使得该频率参 数测试仪的软硬件结构简单, 实现了对高低频段频率参数的等精度测量, 具有较高的测量精 度和较短的系统反应时间。 1 传统测频方法及其误差分析 频率测量的方法主要有 M 法、T 法以及 M/T 法 [1] 。M 法的基本测频原理是在选定的 闸门时间 T 内对被测脉冲信号进行计数,根据计数值 N x 和闸门时间 T 求得所测脉冲信号的 频率。在 M 法中,由于闸门时间 T 由标准频率源决定,而单片机的标准频率源是由晶振频 率分频后获得, 因而保证了闸门时间 T 的精确性。 但由于闸门的启闭与待测计数脉冲不同步, 闸 门开 通时间 通常 不是待 测信 号周期 的整数 倍, 存在 待测脉 冲信号 的计 数量 化误差 ?N x = ±1 。由 M 法的测频原理可知,待测信号频率 1 fx = Nx N ? f0 = x N0 T (1) 设待测脉冲频率的准确值为 f xd , 由于单片机测频系统中的标准频率源通常是由晶振产 生的频率信号分频后得到的, 而晶振的稳定性很高, 只要按测量精度要求选择合适的晶振后, 由标准频率源的不稳定性所造成的测频误差就可以被忽略掉 (文中的误差分析均是在忽略标 准频率源的不稳定性下做出的) 。设 δ Mx 为测量的相对误差 δM x = f xd = 得 δ Mx = f xd ? f x f xd (2) N x + ?N x T = ?N x N x + ?N x ≤ (3) f xd ? f x f xd 1 Nx (4) 由式(4)知, 当待测脉冲信号频率较高时, 在闸门时间 T 内被测信号脉冲的计数值 N x 较 大, δ Mx 很小,M 法能够达到较高的测量精度;而当待测脉冲信号频率较低时,在闸门时间 T 内 N x 较小, δ Mx 很大,测频精度降低。例如,被测信号的频率为 100HZ,则在 1S 内的相对误差 δ M x =1%。 而当待测脉冲信号的频率为 10HZ, f x 在 T =1S 内的相对误差 δ M x =10%。 则 虽然可以通过增大闸门时间 T 来提高测量精度,但闸门时间 T 过长将使系统的测量时间过 长,无法满足实时性的要求。 T 法的基本原理是在待测脉冲的一个周期内对标准频率信号进行计数,根据计数值 N 0 和标准信号的频率 f 0 求得待测脉冲信号的频率。在 T 法中,由于闸门时间 T 由待测脉冲信 号决定,不存在待测脉冲信号计数的量化误差 ?N x 。但由于闸门的启闭与标准频率源不同 步,故存在对标准频率源信号的计数量化误差 ?N 0 = ±1 。由 T 法的测频原理可知,待测信 号频率 f x = 1 N 0T0 = f 0 N 0 其中 T0 为标准频率源信号的周期。同理,可得 (5) δ Tx = f xd ? f x f0 f = ? 0 N 0 + ?N 0 N 0 f xd f0 N 0 + ?N 0 (6) 2 = ?N 0 N 0 ≤ 1 N 0 由于闸门时间 T 是待测脉冲信号周期的整数倍, 当待测脉冲频率较低时, 闸门时间 T 较 长,对标准频率源的计数值 N 0 较大,测量精度高;而当待测脉冲频率较高时,闸门时间 T 过短,甚至与标准频率源信号周期相近,故高频测量时 T 法存在严重的测量误差。 理论分析表明, 无论采取何种补偿措施, 都无法同时消除对待测脉冲和标准信号的计数 量化误差。将 M 法和 T 法结合起来就是 M/T 法,M/T 法结合了 M 法和 T 法各自的优点,在被 测信号频率较高时采用 M 法,频率较低时采用 T 法,这样在高、低频信号测量中都能获得较 高的精度。但由于在 M 法中, ?N x 随着被测信号频率的降低而增大,在 T 法中 ?N 0 随着被 测信号频率的增大而增大, 因此必存在 M 法和 T 法的分界点, 在该点高低频测量的相对误差 相等且达到最大,即 δ max = δ M x = δ T x 。我们将该点的频率称为中界频率 f C ,由式(1)知 N x = f x ? T ,由式(5)得 N 0 = f 0 f x ,则中界频率 f C = f 0 T 。虽然 M/T 法能够在两端获 得高精度,但在中界频率处的误差却总是最大的。本系统采用多周期同步测频原理,利用 AT89C52 片内定时器/计数器 T2 所特有的捕捉方式,实现对信号频率、周期、脉宽以及占空 比的测量。 2 多周期同步测频原理及其误差分析 多周期同步测频技术的基本原理是在待测脉冲的 m 个周期内同时对对待测脉冲和标准 信号计数, 根据待测脉冲的计数值 N x 和标准信号的计数值 N 0 求得被测信号的频率 [2,3] 。 由 于闸门时间 T 为待测脉冲的 m 个周期即闸门时间与待测脉冲同步,从而消除了待测脉冲的 计数量化误差 ?N x 。但由于闸门的启闭与标准信号不同步,故仍存在对标准信号的计数量 化误差 ?N 0 = ±1 。设两个计数器在闸门时间 T 内同时对待测脉冲和标准信号的计数值分别 为 N x 和 N 0 ,则待测信号频率 fx = Nx T f0 = N0 T 消去闸门时间 T ,得 f x = N x ? f 0 N 0 (7) (8) (9) 同理,相对误差 δ = f xd ? f x f xd f0 f ?N ? Nx ? 0 x N + ?N 0 N0 = 0 f0 ? Nx N 0 + ?N 0 (10) = ?N 0 N 0 ≤ 1 N 0 = 1 f 0T 3 由式(10)知, δ 只与标准频率源的频率 f 0 和闸门时间 T 有关,与待测脉冲的频率 f x 无 关,实现了整个测量频段内的等精度测量,使测量精度大大提高。对于标准信号的计数量化 误差 ?N 0 ,虽然可以通过提高标准频率源的频率 f 0 和加大闸门宽度 T 来减小,但需要考虑 标准频率源工作频率的限制,以及加大闸门宽度 T 所带来的系统测量时间的增加。 3 基于 AT89C52 的多周期同步测频技术的实现 AT89C52 片内有 1 个 16 位的定时/计数器 T2,T2 除具备和定时/计数器 T0、T1 相同的 功能外,还具有捕捉方式、16 位自动重装等功能 [4,5] 。所谓捕捉功能就是当 T2 的外部输入 端 T2EX(P1.1)的输入电平发生负跳变时,就会把 TH2 和 TL2 的内容同时记录到特殊功能寄存 器 RCAP2H 和 RCAP2L 中,并将外部中断标志 EXF2 置位,向 CPU 发出中断申请信号。T2 的 捕捉功能避免了 CPU 在读计数值的高字节时, 低字节还在变化所引起的读数误差, 更重要的 是,T2EX(P1.1)上输入电平连续两次负跳变的计数差值,就是外部输入脉冲的周期。 依据多周期同步测频技术的原理,将 AT89C52 的定时/计数器 T2 设置为定时器捕捉工 作方式,闸门时间 T 为 m 个待测脉冲周期,被测信号经放大、整形、分频后送入 T2 的外部 输入端 T2EX(P1.1),在待测信号产生第一次负跳变时,TH2 和 TL2 中的内容(即时基脉冲计 数值)被同时捕捉至特殊功能寄存器 RCAP2H 和 RCAP2L,并在 T2 外部中断服务程序中记录 待测信号下降沿的数目, 以此实现闸门开启及待测脉冲及和时基脉冲的同时计数, 闸门时间 到时(即 T2 的外部输入端 T2EX 检测到第 m + 1 个待测脉冲下降沿) ,一次测量过程结束。 在此过程中, 当外部待测脉冲的下降沿到来或定时器 T2 产生对时基脉冲的计数溢出时, T2 外部中断标志 EXF2 或 T2 溢出标志 TF2 置位,并向 CPU 发出中断申请信号。CPU 相应中 断后,在 T2 中断服务程序中通过软件判断是 EXF2 还是 TF2 产生的中断,并进行相应的处 理,是 EXF2 产生的中断就记录下待测脉冲下降沿的数目,若是 TF2 就记录下 T2 对时基脉 冲的溢出次数。待测频率具体的计算如下: 设闸门时间 T 内共产生了 m + 1 次 T2 外部中断( m 个待测脉冲)及 N 次 T2 溢出中断, 且设第一个待测脉冲的下降沿到来时 T2 对时基的计数值为 l1 , m + 1 个待测脉冲的下降沿 第 到来时 T2 对时基的计数值为 l2 ,则 T2 对时基的计数过程如下(包括 N 次 T2 溢出中断) 。 l1 L65535 → 0L65535 → 0L65535 → 0LLL0L65535 → 0Ll2 则闸门时间 T = ( l2 ? l1 + 65536 × N ) × T0 = mTx 其中 T0 为单片机时基信号周期, Tx 为待测脉冲信号周期,故被测信号频率为 fx = k ( l2 ? l1 + 65536 × N ) × mT0 (11) 其中 k 为可编程分频器相应的分频数 4 4 系统的软硬件设计 本系统采用多周期同 步 测 频 原 理 [3] , 以 盘 AT89C52 单片机为核心, 显 利用其片内定时器/计数 示 器 T2 所特有的捕捉功能, 器 XTAL2 利用定时器 T2 的捕捉功 复位电路 RESET VSS 能及外部中断,软硬件结 GND 合完成待测信号与闸门信 图1 系统硬件组成框图 号的同步,以及待测信号 与时基信号的同时刻计数,使用一个定时器/计数器 T2 实现多周期同步测频技术,使得频率 测试仪的软硬件结构简单易于实现。系统硬件组成框图如图 1 所示,主要由放大限幅电路、 波形转换与整形电路、可编程分频器电路、单片机最小应用系统及键盘显示器电路组成。输 入的正弦波、 三角波等各种形式的小信号电压经放大限幅后, 通过波形转换电路转换为方波 信号,再利用 7414 整形为 TTL 电平信号,利用可编程分频器来扩展频率测量范围的上限, 这样将经过了放大、整形、分频后的待测脉冲送入单片机最小应用系统的 P1.1(T2 的外部 输入端 T2EX) ,通过键盘显示器电路来实现被测频率参数(频率、周期、脉宽和占空比) 的选择与动态显示。 放 大 被测信号 与 限 幅 波 形 变 换 整 形 可 编 程 待测脉冲 分 频 器 +5V VCC P1.1 XTAL1 键 软件采用自顶向下的模块化设计方法 [6] ,将 T2中断服务程序流程图 N 各个功能分成独立的模块,由系统的监控程序统 一管理执行。整个系统由初始化模块、键输入模 块(用于测量参数的选择)、信号频率测量模块、 数据处理模块、数据显示模块等组成。上电后, 首先进入系统初始化模块,在初始化子程序中完 成对定时/计数器 T2 的定时器及捕捉方式的设置, 并启动 T2。 频率测量模块由 T2 中断服务程序完成, 当外 部待测脉冲的下降沿到来或定时器 T2 产生对时基 脉冲的计数溢出时,T2 向 CPU 发出中断申请。 CPU 响应中断后, 通过软件判断是 EXF2 还使 TF2 产生的中断,并进行相应处理。T2 中断服务程序 流程图如图 2 所示。 5 结束语 本文讨论了传统频率测量方法的原理及误 差。在此基础上,对多周期同步测频技术的原理 及其误差进行了详细分析。由于多周期同步测频 技术的测量精度与被测信号的频率无关,实现了 整个测量频段内的等精度测量,消除了 M 法中对 T2外部中断? Y T2外中断次数加1 T2溢出中断 次数加1 Y 第1个外部 脉冲下降沿? N 第m+1个外部 脉冲下降沿? 捕捉寄存器 内容送时基 计数单元1 Y 捕捉寄存器内容 送时基计数单元2 存外中断次数 外中断次数清零 存T2溢出次数 溢出次数清零 清TF2中断 标志 清EXF2中断标志 中断返回 图2 T2中断服务程序流程图 5 被测脉冲信号的计数量化误差 ?N x = ±1 , 克服了 M/T 法中高低频两端精度高而中界频率附 近测量误差最大的缺陷。 本文提出了基于 AT89C52 实现多周期同步测频方法, 利用 T2 的捕 捉功能和外部中断产生与待测信号同步的闸门时间,通过 T2 的定时功能实现了时基信号与 待测信号的同步计数,使得系统只用一个定时器/计数器 T2 就实现了多周期同步测频技术, 该系统软硬件结构简单,具有较高的测量精度和较短的系统反应时间。 参考文献: 参考文献: [1] 尹克荣.智能仪表中的频率测量方法[J].长沙电力学院学报,2002, 17(1):74-76 [2] 章军,张平,于刚.多周期同步测频测量精度的提高[J].电测与仪表,2003,40(6):16-18 [3] 王连符.测频系统测量误差分析及其应用[J].中国科技信息,2005,(18A):94-94 [4] 李全利.单片机原理及应用技术[M].北京:高等教育出版社,2001 [5] 李群芳 黄建.单片微型计算机与接口技术[M].北京:电子工业出版社,2002 [6] 孙传友,孙晓斌,汉泽西等,测控系统原理与设计[M].北京:北京航空航天大学出版社,2002 作者简介: 作者简介: 黄晓峰(1969-),男,甘肃省甘谷县人,副教授,硕士,研究方向为检测技术及智能仪器仪表、计算机控制。 E-mail:[email protected] 电话:13816055435 6
基于 MCS_51单片机的直流电机转速测控系统设计摘要: 给出了一种基于89C51单片机以及 PWM 控制思想的高精度、高稳定、多任务直流电机转速测控系 统的硬件组成及关键单元设计方法。实验结果表明该系统能实时、有效地对直流电机转速进行监测与控制, 而且输出转速精度高、稳定性好。 0 引言 目前使用的电机模拟控制电路都比较复杂,测量范围与精度不能兼顾, 且采样时间较长, 难以测得 瞬时转速。本文介绍的电机控制系统利用 PWM 控制原理, 同时结合霍尔传感器来采集电机转速, 并经 单片机检测后在显示器上显示出转速值, 而单片机则根据传感器输出的脉冲信号来分析转速的过程量, 并 超限自动报警。本系统同时设置有按键操作仪表, 可用于调节电机的转速。 1 系统方案的制定 直流电机控制系统主要是以 C8051单片机为核心组成的控制系统, 本系统中的电机转速与电机两端的 电压成比例, 而电机两端的电压与控制波形的占空比成正比, 因此, 由 MCU 内部的可编程计数器阵列 输出 PWM 波, 以调整电机两端电压与控制波形的占空比, 从而实现调速。本系统通过霍尔传感器来实 现对直流电机转速的实时监测。系统的设计任务包括硬件和软件两大部分,其中硬件设计包括方案选定、 电路原理图设计、PCB 绘制、线路调试; 软件设计包括内存空间的分配, 直流电机控制应用程序模块的 设计, 程序调试、软件仿真等。 2 硬件设计 C8051是完全集成的混合信号系统级 MCU 芯片, 具有64个数字 I/O 引脚, 片内含有 VDD 监视器、 看门狗定时器和时钟振荡器, 是真正能独立工作的片上系统, 并能快捷准确地完成信号采集和调节。同 时也方便软件编程、干扰防制、以及前向通道的结构优化。 本单片机控制系统与外部连接可实时接收到外部信号, 以进行对外部设备的控制, 这种闭环系统可 以较准确的实现设计要求, 从而制定出一个合理的方案, 图1所示是电机测控系统框图。 图1 电机测控系统框图。 本系统先由单片机发出控制信号给驱动电机, 同时通过传感器检测电机的转速信号并传送给单片机, 单片机再通过软件将测速信号与给定转速进行比较, 从而决定电机转速, 同时将当前电机转速值送 LED 显示。此外, 也可以通过设置键盘来设定电机转速。系统中的转速检测装置由霍尔传感器组成, 并通过 A/D 转换将转速转换为电压信号, 再以脉冲形式传给单片机。这种设计方法具有频率响应高(响应频率达 20 kHz 以上)、输出幅值不变、抗电磁干扰能力强等特点。其中霍尔传感器输入为脉冲信号, 十分容易与 微处理器相连接, 也便于实现信号的分析处理。单片机的 T0口可对该脉冲信号进行计数。 设计时, 可通过单片机的 P0.1~P0.5 五个接口来完成键盘的输入, P1.6口可完成鸣叫和报警, P2.0 接电机, P2.1~P2.4接显示器的位选, P0口为显示器段选码, 其硬件连接电路如图2所示。 图2 硬件连接电路图。 本系统的脉冲宽度调制(Pulse Width Molation)原理是: 脉冲宽度调制波由一列占空比不同的矩形脉 冲构成, 其占空比与信号的瞬时采样值成比例。该系统由一个比较器和一个周期为 Ts 的锯齿波发生器组 成。脉冲信号如果大于锯齿波信号, 比较器输出正常数 A, 否则输出0。图3所示为脉冲宽度调制系统的 调制原理和波形图。 图3 脉宽调制过程。 设样本 τk 为均匀脉冲信号, 它的第 k 个矩形脉冲可以表示为: 其中, x {t} 是离散化信号; Ts 是采样周期,τ0是未调制宽度, m 是调制指数。现假设脉冲幅度为 A, 中心在 t=kTs 处, τk 在相邻脉冲间变化缓慢, 那么, 其 Xp (t) 可表示为: 其中, 为电机角速度,结合式(2) 可见, 脉冲宽度信号可由信 号 x (t)加上一个直流成分以及相位调制波构成。当 τ0<<> 因此, 脉冲宽度调制波可以直接通过低通滤波器进行解调。C8051单片机有2个12位的电压方式 DAC, 每个 DAC 的输出摆幅为0 V~VREF, 对应的输入码范围是0x000~0xFFF。通过交叉开关配置可将 CEX0~CEX4 配置到 P2 端口, 这样, 改变 PWM 的占空比就可以调整电机速度。 LED 显示采用动态扫描方式, 并用单片机 I/O 接口扩展输出, 再由三极管驱动各显示器的位选端并 放大电流。独立式按键采用查询方式, 按键输入均采用低有效, 上拉电阻可用于保证在按键断开使其 I/O 口为高电平。单片机的 I/O (P0.1~0.5)引脚所扩展的5个按键分别定义为: 设置、启动、移位、开始、+1 功能。硬件电路确定以后, 电机转速控制的主要功能将依赖于软件来实现。 3 软件设计 本系统的软件程序的设计可分为5个步骤: 分别是综合分析并确定算法; 设计程序流程图;合理选择和分配内存单元以及工作寄存器; 编写程 序; 上机调试运行程序。 应用软件的设计可采用模块化结构设计, 其优点是每个模块的程序结构相对简单, 且任务明确, 易 于编写、调试和修改; 其次是程序可读性好, 对程序的修改可局部进行, 而其他部分可以保持不变, 这 样便于功能扩充和版本升级; 另外, 对于使用频繁的子程序, 可以建立子程序库, 以便于多个模块调 用; 最后是便于分工合作, 多个程序员可同时进行程序的编写和调试工作, 故可加快软件研制进度。 本程序采用8051单片机的 C 语言编程来实现。 在系统的程序设计中, 可采用模块化编程实现。 整个软件由主程序模块、转速测量模块、时钟模块、数据通信模块、动态显示模块等组成。各模块均 采用结构化程序设计思想设计, 因而具有较强的通用性; 而采用模块化程序结构则可使软件易于调试、 维护和移植。 系统软件可根据硬件电路的功能与 AT89C51各管脚的连接情况对软件进行设计。以便明确各引脚所要 完成的功能, 从而方便进行程序设计和内存地址的分配, 最终完成程序模块化设计。 本系统为直流电机测控系统。根据系统性能要求, 除复位电路外, 还应该设置一些功能键: 包括启动键、设置键、确定键、移位键、加1键等。由于本系统中的单片机还有闲置的 I/O 口线,而系 统要求所设置的按键数量也不多, 因此, 可以采用独立式按键结构。 根据直流电机控制系统的结构, 该电机转速控制系统为一简单的应用系统, 可以采用顺序的设计方 法。这种设计由主程序和若干个中断服务程序构成, 整个电机转速测控系统可分成六大模块, 每个模块 完成一定的功能。图4所示是根据电路图确定的程序设计模块图。 图4 直流电机控制软件设计模块图。 其中主程序模块主要设置主程序的起始地址、中断服务程序的起始地址、有关内存单元及相关部件的 初始化和一些子程序调用等。其主程序流程图如图5所示。 图5 主程序流程图。 对于定时器 T1 (1s) 子程序的设计,其实在单片机中,定时功能既可以由硬件(定时/计数器) 实现,也 可以通过软件定时程序来实现。软件延时程序要占用 CPU 的时间, 因而会降低 CPU 的利用率。而硬件定 时则通过单片机内的定时器来定时, 而且, 定时器启动以后可与 CPU 并行工作, 故不占用 CPU 的时间, 从而可使 CPU 具有较高的工作效率。 本系统采用硬件定时和软件定时并用的方式, 即用 T1溢出中断功能来实现10 ms 定时, 而通过软件 延时程序实现1 ms 定时。其中 T1定时器中断服务程序的功能主要实现转速值的读入、检测与缓存处理。 对于定时器 T1的计数初值计算, 由于本系统采用的是6 MHz 的时钟频率, 所以, 一个机器周期时 间是2 ?s。这样, 根据 T1定时器产生500 ?s 的定时, 便可以计算出计数初值。 本文设计的转速测控系统的工作方式寄存器 TMOD=00010000B, T1定时器以工作方式2来完成定时。 4 程序调试 程序调试可在伟福仿真软件上进行编制, 该软件支持脱机运行, 纯软件环境可模拟单步、跟踪、全 速、 断点; 源文件仿真、 汇编等, 并可支持多文件混合编程。 仿真调试后的目标程序可以固化到 EPROM, 然后用专门的程序烧写器对89C51单片机进行程序烧写。 5 结束语 本设计采用 C51进行编程, 程序占用存储器单元少, 执行速度快, 并能够准确掌握执行时间, 实 现精细控制。同时由于采用89C51为 CPU,并利用噪声抵抗能力较强的 PWM 控制技术、串行口扩展显示 器接口和 I/O 口扩展键盘, 因而可省去片外 RAM, 而且体积小, 功能全, 小巧灵活,操作方便, 又 可安装在工作现场单独工作。因而具有较大的实用价值和良好的应用前景。
㈤ 求智能型电热水器控制系统(基于89C51)毕业设计论文综述,谢谢啦
可不能马虎,最好还是自己动动脑筋,好好的写一写。.网上那种免费的毕业设计千万不能采用,要么是论文不完整,要么是程序运行不了,最重要的是到处都是,老师随时都可以知道你是在网上随便弄的那就不好了,我去年的毕业设计是在【天下文库】写的,质量挺不错的。你要是实在没办法,可以去看下
1、论文题目:要求准确、简练、醒目、新颖。
2、目录:目录是论文中主要段落的简表。(短篇论文不必列目录)
3、提要:是文章主要内容的摘录,要求短、精、完整。字数少可几十字,多不超过三百字为宜。
4、关键词或主题词:关键词是从论文的题名、提要和正文中选取出来的,是对表述论文的中心内容有实质意义的词汇。关键词是用作机系统标引论文内容特征的词语,便于信息系统汇集,以供读者检索。 每篇论文一般选取3-8个词汇作为关键词,另起一行,排在“提要”的左下方。 主题词是经过规范化的词,在确定主题词时,要对论文进行主题,依照标引和组配规则转换成主题词表中的规范词语
㈥ 基于89C51单片机的温度控制系统
看看这个行不?
㈦ 51单片机的毕设题目与资料有吗
第四文件
1:小车计时
2:汽车座椅
3:没意思 285922500万年历
4:智能照明+遥控+电力通讯+无线+原理图
5:整理--室内环境监测系统的研究与设计二次修改
6:夏雪之梦 469857178温控控制50---100AD+加热制冷发送
7:基于51单片机的温湿度计设计.doc
8:数控电源
9:交通灯20111217
10:基于单片机89C51的数字体温计设计
11:基于AT892051单片机的倒车防撞预警系统设计和实现 .doc
12:浮云单87714897电加热器
13:纯数字电路时钟仿真+原理图
14:车胎检测--基于单片机AT89S52的汽车胎压监测系统TPMS.doc
15:ad590+tl480+高低温温度控制+RS232
16:1602电子钟课程设计无温度
第三文件
17:LED灯无级调光智能控制系统的设计和实现 声控变红外控
18:基于PWM模块的智能风扇调速
19:声控彩灯基于单片机的音乐彩灯控制器.doc
20:液位传感器--基于AT89CS51液位控制器设计.doc
21:音乐播放--全套==基于单片机的音乐播放器设计——软件设计.doc
第二文件
22:基于AT89c2051的简易时钟设计.doc
23:why的电热水器==基于AT89S51单片机的智能电热水器的设计--毕业设计.doc
24:场馆入场人数统计--基于89s52的场馆门票统计的设计.doc
25:出租车计价器简单双位计数+论文
26:基于89s51单片机的室内智能通风控制系统研究
27:电动自行车仪表显示系统
28:基于单片机的超速报警器的电路设计
29:温度湿度计LED显示
30:智能路灯控制光控额时间控制无调光
第一文件
31:智能充电器
32:无线恒温箱
33:万年历带秒表闹钟倒计时温度礼拜带红外感应
34:万年历带第几周分屏显示
35:基于AT89S51的停车场的设计.doc
36:生光触延时开关
37:汽车座椅有记忆
38:偶尔偏执浴室水温控制电路设计
39:交通灯001じ☆运♀志♂
40:基于AT89c51的简易时钟设计.doc
41:基于无线通讯技术的新型LED点阵屏的研制
42:基于数字逻辑电路的8路抢答器
43:基于51单片机电语音播报脉搏计
44:过客的温度湿度计
45:多路远程控制信息采集
46:单片机定时器在养鸡场得应用
47:百秒倒计时--基于89C51的99秒倒计时设计.doc
48:89c51单片机8路抢答00
49:485通信智能窗帘
50:基于51单片机的8路无线抢答器
㈧ 求基于AT89C2051单片机的水温控制系统开题报告和论文
用一个STC89S52单片机+DS18B20温感可以不?!
ds18b20可以使用密封包装,同样能放置在水中,而且精确度能在0.1℃。
我的blog,欢迎学习交流!
http://blog.163.com/jammy_lee/
㈨ 单片机89c51的电子时钟课程设计
#include <reg52.h>
#include<stddef.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_FLAG
#define LCD1602_PORT P0
sbit lcd1602_rs=P2^0;
sbit lcd1602_e=P2^2;
sbit lcd1602_rw=P2^1;
sbit lcd1602_busy=P0^7;
sbit key_ch=P3^5;
sbit key_add=P3^6;
sbit key_minus=P3^7;
uchar i,sec,min,h,date,month,flag;
uint year;
uchar *chgstr[7]={" ","sec","min","hour","date","min","year"};
uchar j,k,m,n,o,p;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar timestr[10],datestr[10];
void init();
void delay(uint);
void time_display();
void date_display();
void control();
void time();
/*
************************************
* 函数名称:lcd1602_CheckBusy()
* 函数功能:状态查询
************************************
*/
void lcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}
/*
***************************************
* 函数名称: lcd1602_WriteCmd()
* 函数功能:写命令
* 入口参数:命令字
* 出口参数:无
***************************************
*/
void lcd1602_WriteCmd(const uchar cmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}
/*
*******************************************
* 函数名称:lcd1602_WriteData()
* 函数功能:写数据
* 入口参数:c--待写数据
* 出口参数:无
*********************************************
*/
void lcd1602_WriteData(const uchar c)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}
/*
***********************************************
* 函数名称:lcd1602_Init()
* 函数功能:初始化LCD
* 入口参数:无
* 出口参数:无
***********************************************
*/
void lcd1602_Init()
{
lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵
lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,
lcd1602_WriteCmd(0x06); //flag move to right,screen don't move
lcd1602_WriteCmd(0x01); //clear screen
}
/*
************************************************
* 函数名称:lcd1602_Display()
* 函数功能: 字符显示
* 入口参数:ptr--字符或字符串指针
* 出口参数:无
* 说 明:用户可通过以下方式来调用:
* 1)lcd1602_Display("Hello,world!");
* 2) INT8U 存储类型 txt[]="要显示的字符串";
* 或者 INT8U 存储类型 txt[]={'t','x','t',..,'