单片机电机测试系统的研制上位机监控系统设计Word文档格式.docx
- 文档编号:16395788
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:23
- 大小:801.72KB
单片机电机测试系统的研制上位机监控系统设计Word文档格式.docx
《单片机电机测试系统的研制上位机监控系统设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机电机测试系统的研制上位机监控系统设计Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
本文便是运用AT89C51单片机控制的智能化转速测量仪。
电机在运行过程中,需要对其进行监控,转速是一个必不可少的一个参数。
本系统就是对电机转速进行测量,并可以和PC机进行通信,显示电机的转速,并观察电机运行的基本状况。
本设计主要用AT89C51作为控制核心,由霍尔传感器、LED数码显像管、HIN232CPE电平转换、及RS232构成。
详细介绍了单片机的测量转速系统及PC机与单片机之间的串行通讯。
充分发挥了单片机的性能。
其优点硬件是电路简单,软件功能完善,测量速度快、精度高、控制系统可靠,性价比较高等特点。
2方案选择
2.1.1单片机与pc机通信原理
MCS-51单片机有一个全双工的串行通讯口UART。
利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。
所以单片机和PC机之间可以方便地进行串口通讯。
单片机串口有3条引线:
TXD(发送数据)、RXD(接收数据)和GND(信号地)。
因此在通信距离较短时可采用零MO·
DEM方式,简单三连线结构。
IBM—PC机有两个标准的RS.232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和
RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;
为了Pc机与MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片,我们采用了MAXIM公司生产的专用芯片MAX232进行转换。
电路如图所示。
图2.2MAX232工作原理图
2.2软件方案选择
2.2.1上位机编程方案选择
本设计采用VC6.0++来实现编程,上位机与单片机进行通信的程序编写可用VB、VC等软件。
由于VB作为面向对象的编程工具不够完全,效率比VC低,提供的命令语言环境较弱,通过串口设备一次最多只能交换16B的数据,对较大数据量的传输存在很大的局限性,很难实现较为复杂的数据处理,VC6.0++是一种功能强大的面向对象的Windows编程开发平台。
VC6.0的优点是界面简洁,占用资源少,操作方便。
所以本设计采用VC作为串口编程工具。
2.2.2单片机编程方案选择
本设计单片机的编程选择C语言编写,因为它简洁紧凑、灵活方便、运算符丰富、数据结构丰富、C是结构式语言、C语法限制不太严格,程序设计自由度大、C语言允许直接访问物理地址,可以直接对硬件进行操作、C语言程序生成代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低10へ20%、C语言适用范围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。
所以我选用C语言来编写此程序。
2.3总体方案选择
转速传感器测量出来的转速值由单片机采集出来,然后单片机再将采集出的转速数据处理后,通过串行口发送给上位机。
AT89C5111
PC机
MAX232
图2.1总体设计方案流程图
4软件设计
4.1上位机程序设计
voidCTem_conDlg:
:
OnOnCommMscomm1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_strRXData="
"
;
//每次进入则将编辑框内容清空等待显示新的数据
VARIANTvariant_inp;
LONGlen,k;
BYTErxdata[2048];
//设置BYTE数组
CStringstrtemp;
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{//以下你可以根据自己的通信协议加入//处理代码
variant_inp=m_ctrlComm.GetInput();
//读缓冲区
safearray_inp=variant_inp;
//VARIANT型变量转换为//ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();
//得到有效数据长度
for(k=0;
k<
len;
k++)
safearray_inp.GetElement(&
k,rxdata+k);
//转换为BYTE型数组
k++)//将数组转换为Cstring型变量
{
BYTEbt=*(char*)(rxdata+k);
//字符型
strtemp.Format("
%c"
bt);
//将字符送入临时变量strtemp存放
m_strRXData+=strtemp;
//加入接收编辑框对应字符串
}
UpdateData(FALSE);
//更新编辑框内容
}
4.2下位机程序设计
#include<
reg51.h>
#defineXTAL11059200//CUP晶振频率
#definebaudrate9600//通信波特率
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^3;
//定义DS18B20端口DQ
sbitBEEP=P3^7;
unsignedcharpresence;
unsignedcharcodeLEDData1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};
unsignedcharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xff};
unsignedchardatatemp_data[2]={0x00,0x00};
unsignedchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
unsignedcharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
voidbeep();
sbitDIN=P0^7;
//小数点
bitflash=0;
//显示开关标记
bitflag_zf=0;
//正负转速标志
/**********************************************************/
voidDelay(unsignedintnum)//延时函数
while(--num);
ucharInit_DS18B20(void)//初始化ds1820
DQ=1;
//DQ复位
Delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
Delay(90);
//精确延时大于480us
//拉高总线
presence=DQ;
//如果=0则初始化成功=1则初始化失败
Delay(100);
return(presence);
//返回信号,0=presence,1=nopresence
ucharReadOneChar(void)//读一个字节
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
Delay(4);
return(dat);
voidWriteOneChar(unsignedchardat)//写一个字节
unsignedchari=0;
DQ=dat&
0x01;
Delay(5);
dat>
=1;
/*********************************************************/
voidRead_SPEED(void)//读取转速
Init_DS18B20();
if(presence==1)
{
beep();
flash=1;
}//DS18B20不正常,蜂鸣器报警
else
flash=0;
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动转速转换
Init_DS18B20();
WriteOneChar(0xBE);
//读取转速寄存器
temp_data[0]=ReadOneChar();
//转速低8位
temp_data[1]=ReadOneChar();
//转速高8位
voidDisp_SPEED()//显示转速
unsignedcharn=0;
display[4]=temp_data[0]&
0x0f;
display[0]=ditab[display[4]];
//查表得小数位的值
display[4]=((temp_data[0]&
0xf0)>
4)|((temp_data[1]&
0x0f)<
<
4);
display[3]=display[4]/100;
display[1]=display[4]%100;
display[2]=display[1]/10;
display[1]=display[1]%10;
if(!
display[3])//高位为0,不显示
display[3]=0x0a;
display[2])//次高位为0,不显示
display[2]=0x0a;
P0=0xc6;
//显示C
P2=0xfe;
//位选线为P2.7口,LED为共阳极显示,当位选线为低电平时选通
Delay(300);
P0=0x9c;
//显示°
P2=0xfd;
//选中P2.6口
P0=LEDData[display[0]];
//显示小数位
P2=0xfb;
//p2.5
P0=LEDData1[display[1]];
//显示个位
P2=0xf7;
P0=LEDData[display[2]];
//显示十位
P2=0xef;
P0=LEDData[display[3]];
//显示百位
P2=0xdf;
P2=0xff;
//关闭显示
voidbeep(void)
unsignedchari;
for(i=0;
i<
100;
i++)
Delay(60);
BEEP=!
BEEP;
//BEEP取反
}
BEEP=1;
//关闭蜂鸣器
voidinit(void)
EA=1;
//"
中断总允许"
TMOD=0x20;
//定时器1工作于8位自动重载模式,用于产生波特率
TH1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));
TL1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));
//定时器0赋初值
SCON=0x50;
//设定串行口工作方式
PCON&
=0x00;
//波特率不倍增
TR1=1;
//启动定时器1
IE=0x00;
//禁止任何中断
voidsend_char(void)
//传送十六位的转速数据,低位在前
unsignedi=0;
while(i<
2)
SBUF=temp_data[i];
while(!
TI);
//等特数据传送
TI=0;
//清除数据传送标志
i++;
voidmain(void)
ucharreceive;
init();
while
(1)
Read_SPEED();
//读取转速
if(flash==0)
Disp_SPEED();
//显示转速
P2=0x00;
//DS18B20不正常,关闭显示
if(RI)//是否有数据到来
RI=0;
receive=SBUF;
if(receive==49)//是否开始采集转速
send_char();
//传送采集的转速
5仿真与调试
5.1PROTEUS软件仿真
5.1.1Protues简介
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年
即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
protues支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。
1)提供软件调试功能
2)提供丰富的外围接口器件及其仿真
RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
这样很接近实际。
3)提供丰富的虚拟仪器
利用虚拟仪器在仿真过程中可以测量外围电路的特性,培养学生实际硬
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电机 测试 系统 研制 上位 监控 设计