STC89C52 1 MAX232 1 排电阻 1 DB9 1
电流互感器 1 晶振 1
电解电容 6(电容值为104的有4个,10uf的有1个,0.033uF的有一个)
电阻 11(10K的有6个,1K的有2个,5K的1个,100欧姆的有1个,132K的有1个) 可调电阻 1
无极性电容 3(150pF的1个,30pF的两个) 3.8 本章小结
本章主要介绍了电机起动过程中如何对电机的电流和转速进行测量,首先通过 OP07运算组成的I/V变换电路,将电流互感器
二次侧的电流变换成电压,再将电压进行整流,再把整流后的电压值通过A/D转换电路送入单片机进行测量。转速测量通过转
轴上的磁铁经过霍尔元件时产生一个脉冲测得,通过测得脉冲频率来测出转速。单片机通过I/O口与ADCO8O4进行连接,在检
测转速时,将霍尔元件产生的脉冲信号接入单片机的INT0口,通过对INT0中断和计数器/定时器的溢出来计算电机的转速,最
后通过液晶显示屏进行显示。本章中还设计了单片机串口的硬件连线,通过MAX232将TTL电平与RS232电平进行转换。本章
中还简单介绍了单片机的复位电路和时钟电路的连线方法。 4 软件设计
4.1 下位机主程序流程图
这次程序设计通过模块化设计的方法,包括个子程序,分别是ADC0804的子程序,脉冲频率(霍尔元件电路)的子程序
,显示子程序和MAX232的子程序,可以在主程序中调用各个子程序实现总体设计。 图4-1 主程序流程图
4.2 AD转换和数据采集程序设计
WR开始转换 CStw LTw11~8*1/fclkTC1/2/Tclk内部转换状态不忙忙输出有效数据触发中断最终数据被读走最终数据未被读走 图4-2 ADC0804启动转换时序图
由图4-2可知,先把CS端置为低电平,然后将WR端置为低电平,经过一段时间后,WR端被拉高,A/D转换器被启动,经过
1~8个A/D时钟周期和内部TC后,A/D转换完成,INTR自动变为低电平,因为设计中不需要中断,所以A/D转换被启动后直接
读取A/D的数据输出,在读取数据后需要将数据返回给主程序。 INTRINTR复位TR1TACCT1H,T2H数据输入CSRD 图4-3 ADC0804读取数据时序图
由图4-3可知,INTR变成低电平之后,CS端跟着被置低,紧接着置低RD端,经过时间TACC后输出数据到达稳定状态,读取 “中国知网”大学生论文管理系统 - 20 -
的数据就是转换后的数字量,置RD为高电平,再将CS变为高电平,我们不需要编程拉高
INTR,它是自动拉高,在初始化
ADC0804芯片时应把片选信号输入端、写信号输入端和读信号输入端置为高电平避免在ADC0804运行时出现测量错位、测量
值与实际值不对应等情况,为启动ADC0804芯片做准备,在启动ADC0804时,先将P1口全写1来避免读取数据时产生影响,然
后根据时序图把CS先置为低电平,选中ADC0804,然后将WR置为电平来启动ADC0804,在读取数据时,不能选中
ADC0804避免数据再次写入芯片所以要将片选信号置为低电平,并将读信号置为低电平,最后关闭读信号,重新选中
ADC0804为下一次读数据做准备,由于测到的数字量是从0x00~0xFF变化,对应的模拟量是从0~5V变化,所以我们测到的模
拟量数值就是:数字量×5÷255,最后得出的数据再除以电流互感器系数。 下图4-4为ADC0804的子程序流程图。 图4-4 A/D转换子程序流程图 4.3 转速测量程序设计
下表4-1为高四位和低四位分别用来设置定时器1和0。 表4-1 定时器/计数器工作方式寄存器TMOD 位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
下表4-2为寄存器TCON的位符号与位序号。 表4-2 定时器/计数器控制寄存器TCON 位序号 D7 D6 D5 D4 D3 D2 D1 D0 位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 将IT0设置为(INT0为跳变沿触发方式),当采样到INT0从高电平跳变的一瞬间产生外部中断。 下表4-3为定时器/计数器的工作方式。 表4-3 定时器/计数器工作方式 M1 M0 工作方式 0 0 方式0 13位 0 1 方式1 16位
1 0 方式2 8位自动重装 1 1 方式3 仅适用T0
由于考虑到后面对波特率的设置需要把单片机的时钟频率设为11.0592MHZ,因为一个机器周期有12个时钟周期所以一个机器
周期为12×(1÷11059200)≈1.09μs,通过采用方式1,计满T0需要216-1个数产生定时器0中断约为71433μs,通过程序将TH0和
TLO清空,所以一个脉冲的宽度为:t=m×71433+TH0×256+TL0,产生的脉冲频率:1÷2t。 图4-5 测速方法说明图
“中国知网”大学生论文管理系统 - 21 -
如图4-5所示,转过一圈产生一个脉冲,如果一秒产生20个脉冲(20HZ)即为20r/s。 根据测速原理,下图4-6为脉冲测转速的子程序流程图。 图4-6 转速测量子程序流程图
在外部中断触发期间,定时器/计数器会有多次溢出,产生定时器0中断约为71433μs,通
过程序将TH0和TLO清空,所以一个
脉冲的宽度为:t=m×71433+TH0×256+TL0。 4.4 显示子程序设计
下图4-7为1602液晶显示子程序流程。 图4-7 液晶显示子程序流程图 下表4-4为显示模式设置。 表4-4 显示模式设置 指令码功能
0 0 1 1 1 0 0 0 设置16×2显示,5×7点阵,8位数据 下表4-5为开/关及光标设置。 表4-5 开/关及光标设置 指令码功能
0 0 0 0 1 D C B D=1开显示,D=0关显示C=1显示光标,C=0不显示光标B=1光标闪烁,B=0光标不显示
0 0 0 0 0 1 N S N=1指针加1光标加1N=0指针减1光标减1S=1整屏显示移动S=0整屏显示不移动
0 0 0 1 0 0 0 0 光标左移 0 0 0 1 0 1 0 0 光标右移
0 0 0 1 1 0 0 0 整屏左移,光标跟随移动 0 0 0 1 1 1 0 0 整屏右移,光标跟随移动
液晶写操作子程序需要先把要写的命令写到数据总线上,然后给使能端一个高脉冲,在程序中定位第一行的第一个字处就是
write_com(0x80),写第一个字然后通过延时写第二个字,写第二行数据需要定位到0x80+0x48处,每个字间要有延时,否则会影 响1602液晶的显示 。 4.5 单片机串口程序的设计
波特率是表示串口通信时的速率,每秒传送的二进制位数即为波特率,在串行通信中,要求接收方和发送方的波特率设置为
一样的值,单片机有四种工作方式的波特率: 方式0的波特率=fosc/12;
“中国知网”大学生论文管理系统 - 22 -
方式1的波特率=(2SMOD/32)×(T1溢出率); 方式2的波特率=(2SMOD/64)×fosc;
方式3的波特率=(2SMOD/32)×(T1溢出率);
四个方式中,其中方式0的波特率是由系统晶振决定的,方式1和方式3的波特率是由系统晶振和电源管理寄存器的第一位决定 的,方式2的波特率由系统晶振和电源管理寄存器第一位决定的,所以方式1和3的波特率是可变的而方式0和2的波特率是固定 的,下表4-6是电源管理寄存器。 表4-6 电源管理寄存器
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 SMOD SMOD0 LVDF P0F GF1 GF0 PD IDL 其中SMOD=0时波特率正常,SMOD=1时波特率加倍,所以我们一般采用SMOD=0正常的波
特率,其他的7位都是用来管理 电源的寄存器。
T1溢出频率即为T1的溢出频率,假设T1每20ms溢出一次,那么T1的溢出率就是50HZ,把50代入方式2和方式3的公式中就是
方式2和方式3的波特率,在前面用霍尔元件设计测速的过程中将单片机的晶振设计为11.0592MHZ而不设计为12MHZ的原因是
在12MHZ晶振下工作,T1的计算值会存在误差,最终导致通信的误差。 下图4-8为串口初始化程序流程图。 图4-8 串口初始化程序流程图 串口工作方式也有4种,决定了串口的传输数据位数和通信方式,串口的工作方式由串口控制寄存器的SM0和SM1决定下表
4-7所示为串行口控制寄存器。 表4-7 串行口控制寄存器SCON 位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 SM0 SM1 SM2 REN TB8 RB8 T1 RI
SM0和SM1决定了工作方式如下表4-8所示。 表4-8 串口工作方式 SM0 SM1 方式功能说明
0 0 0 同步移位寄存器方式(通常用于拓展I/O口) 0 1 1 10位异步收发(8位数据),波特率可变 1 0 2 11位异步收发(9位数据),波特率固定 1 1 3 11位异步收发(9位数据),波特率可变 由于这次设计采用方式1,而SM2主要用于方式2和方式3所以不去设置,REN=1时允许串行口接收数据反之,禁止。TB8和
RB8都是用于方式2和方式3,所以不去设置。TI和RI分别是发送和接受中断标志位,本次设计不需要接受所以不设置RI。
在串口初始化程序中,首先应把定时器1设置为工作方式2,因为工作方式2是8位重装,当晶振设为11.0592MHZ时T1定时器
装初值为0xfd,然后需启动定时器1,把REN置为高电平,使串口允许接收高电平,再通过SM0和SM1设定串口工作方式,串口 “中国知网”大学生论文管理系统 - 23 -
以方式1工作,最后需要打开总中断。 4.6 上位机程序设计 4.6.1 LabVIEW的简介
这次设计的上位机通过LabVIEW来设计,它是典型的图形化语言的一种,可以为数据采集、测量分析和数据显示提供开发
工具,LabVIEW是虚拟仪器的简称,是根据用户定义来工作的,与传统的仪器相比有更强的扩展性和灵活性,LabVIEW可以
满足于GPIB、RS-485和RS-232通信的全部功能。LabVIEW是通过数据流驱动的,不受顺序执行的约束,这次设计通过单片机
向上位机发送数据,上位机接受到数据并用波形显示出来,上位机每次接受字符,通过程序对字符串进行转化,将字符串变成
对应的数值并实时在波形图表上显示出来,这次设计波形通过波形图表显示,LabVIEW有庞大的程序库和函数库
,LabVIEW中的波形图表如下图4-9。 图4-9 LabVIEW波形图表
它所对应的程序如下图4-10。 图4-10 波形图表程序 当我在串口发送字符时,在上位机显示相应的波形,但是波形图标只能显示数值所以我们要通过十进制数字符串至数值转换
函数,把串口的字符转为十进制,假设我从单片机发送的是“123”字符那我在波形图上应显示十进制123,所以用到十进制数字 符串至数值转换函数,如图4-11所示。
图4-11 十进制数字符串至数值转换函数程序 模拟字符串发送程序如图4-12。 图4-12 模拟串口发送数据程序 假设发一个字符串“12”,如图4-13、4-14所示。 图4-13 发送字符串程序 图4-14 显示波形
波形上显示的即为数值123。 4.6.2 上位机的设计
上位机数据显示界面如图4-15所示,这个界面不仅可以显示电流的变化曲线,还可以以数组形式保存采集到的数据,如果串
口送入的数据超过波形图的赋值,波形图会根据实际值进行缩放。 图4-15 数据显示界面 4.6.3 上位机程序框图设计 图4-16 上位机主程序图 4.6.4 LabVIEW串口程序设计
在上位机进行串口通讯前需要对波特率,串口号,数据位个数等进行设置,通过对相关参数的配置,初始化串口,这样才能 实现上位机与下位机的通信。 “中国知网”大学生论文管理系统 - 24 -
图4-17 VISA配置串口程序
图4-17所示为VISA配置串口的节点设置,通过对VISA参数(波特率、串口号、数据位和停止位等)配置,对串口进行初始化 ,实现上位机与单片机之间的通信。
对串口初始化后,要将串口数据进行读取,需要用到VISA读取节点,这个节点用来读取串口传上来的数据,下图4-18所示 为读串口程序。 图4-18 读串口程序
当VISA读取完数据后,需要通过VISA关闭节点来关闭串行口。这个节点的功能是用来关闭串口,程序如图4-19所示。 图4-19 串口关闭程序
整个串口的程序如图4-20所示。 图4-20 串行通信程序
在上位机采集完单片机发来的数据后需要将数据写入电子表格,将数据存储起来,通过下图4-21的写入电子表格文件程序。