实际测量时,要把霍尔传感器固定在直流测速电机的底板上,与霍尔探头相对的电机的轴上固定着一片磁钢块,电机每转一周,霍尔传感器便发出一个脉冲信号,将此脉冲信号接到开发的多功能实验板上的P3.2[INT0]上,设定T0定时,每分钟所计的进入P3.2的脉冲个数即为直流电机的转速,电路图如下。
系统软件设计
电机转速测量需要经过的4个基本步骤:1是控制方式;2是确定计数方式;3是信号输入方式;4是计数值的读取;通过89C51,单片机完成对电机转速脉冲计数的控制,读取寄存器完成转速频率的确定。 而SGN电机脉冲信号连到INT0引脚。INT0计数次数为3次,将3次结果取平均,从而提高计数的稳定性和精确性。
其测量过程是测量转速的霍尔传感器和电机机轴同轴连接,机轴每转一周,产生一定量的脉冲个数,由霍尔器件电路输出。经过电耦合器后,即经过隔离整形电路后,成为转数计数器的计数脉冲。同时霍尔传感器电路输出幅度为12V的脉冲经光电耦合后降为5V,保持同单片机AT89C51逻辑电平相一致,控制计数时间,即可实现计数器的计数值对应机轴的转速值。主CPU将该值数据处理后,在LCD液晶显示器上显示出来。
本系统采用89C51中的INT0中断对转速脉冲计数。定时器T0工作于定时方式,工作于方式1。每到1s读一次外部中断INT0计数值,此值即为脉冲信号的频率,根据式(4-1)可计算出电机的转速。
当直流电机通过传动部分带圆盘旋转时,霍尔传感器根据圆盘上得磁片获得一系列脉冲信号。这些脉冲信号通过单片机系统定时/计数器INT0计数,定时器T0定时。定时器T0完成100次溢出中断的时间T除以测得的脉冲数m,经过单位换算,就可以算得直流电机旋转的速度。
直流电机转速计算公式: n=60·m/(N1·T·N)(rpm) (4-1) 其中:n为直流电机转速,N为栅格数,N1为T0中断次数,m为INT0在规定时间内测得的脉冲数,T为定时器T0定时溢出时间。
主程序工作过程如下。
先进行初始化设置各定时器初值,然后判断是否启动系统进行测量。如果是,就启动系统运行。如果不是就等待启动。启动系统后,霍尔传感器检测脉冲到来后,启动外部中断,每来一个脉冲中断一次,记录脉冲个数。同时启动T0定时器工作,每1秒定时中断一次,读取记录的脉冲个数,即电机转速。连续采样三次,取平均值记为一次转速值。再进行数值的判断,若数值高于5000rpm则报警并返回初始化阶段,否则就进行正常速度液晶显示。
/*------------------------主函数-------------------------*/ void main() { int_all();//全局初始化 while(1) { disp_count();//数据处理 if(zhuan>5000) //转速警告 { warning=1; } if(zhuan<4999) { warning=0; } write_command(0x80); for (i=0;i 外部计数中断 /*-------------------外部中断0计数程序-------------------*/ void counter(void) interrupt 0 { EX1=0; //关外部中断0 count++;//计数加1 if(count==4) //4次循环为电机转一圈 { count=1; //初始化计数 z++;//转圈计数加1 } EX1=1; //开外部中断0 } 定时器中断 /*-----------------内部中断0计时计数程序-----------------*/ void Time0(void) interrupt 2 using 0 { TH0=0x4c; //50ms定时 TL0=0x00; msec++; if(msec==20) //50*20=1S { msec=0; zhuan=z; z=0; } } 显示程序 /*--------------------向LCD1602写命令--------------------*/ void write_command(uchar command) { rs=0; //选择写命令 P0=command; //向LCD写命令 lcdcs=1; //信号使能端高电平 lcdcs=0; //信号使能端低电平 } /*-------------------------------------------------------*/ /*--------------------向LCD1602写数据--------------------*/ void write_data(uchar data0) { rs=1; //选择写数据 P0=data0; //向LCD写数据 lcdcs=1; //信号使能端高电平 lcdcs=0; //信号使能端低电平 } 报警程序 蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。 蜂鸣器程序设计思路:本程序通过在输出一个音频范围的方波,驱动实验板上的蜂鸣器发出蜂鸣声,其中Delay延时子程序的作用是使输出的方波频率在人耳朵听觉能力之内的20KHZ以下,如果没有这个延时程序的话,输出的频率将大大超出人耳朵的听觉能力,我们将不能听到声音。更改延时常数,可以改变输出频率,也就可以调整蜂鸣器的音调。 代码为: if(zhuan>5000) { warning=1; } if(zhuan<4999) { warning=0; } 转速程序 测速的方法决定了测速信号的硬件连接,测速实际上就是测频,因此,频率测量的一些原则同样适用于测速。通常,可以用计数法、测脉宽法和等精度法来进行测试。 所谓计数法,就是给定一个闸门时间,在闸门时间内计数输入的脉冲个数;测脉宽法是利用待测信号的脉宽来控制计数门,对一个高精度的高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1误差的问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好的适应性。 /*-----------------------数据处理------------------------*/ void disp_count() { display[9]=(zhuan/1000+'0'); /转换转速的千位 display[10]=(zhuan/100+'0'); //转换转速的百位 display[11]=(zhuan/10+'0'); //转换转速的十位 display[12]=(zhuan+'0'); //转换转速的十位 } 结 论 本文给出了一种单片机实现电机转速的测量系统,克服了传统方法测量的不足,可以实现电机转速不同区段的精度测量。该速度测量系统具有测量速度快,测量精度高的优点,不但可应用于一般的机电控制过程中进行速度测量,而且可应用于其它要求转速精确测量系统中。 主要通过学习了霍尔传感器、89C51单片机、1602LCD显示等知识,查阅了相关资料,实现了“基于霍尔传感器的电机转速测量系统设计”的基本要求,所设计的系统具有以下功能: 1、对于设计采用89C51单片机作为测量转速的主CPU芯片,系统硬件设备结构简单合理,成本低,实时性好。 2、测速系统采用霍尔传感器作为敏感速率信号,具有频率响应快,抗干扰能力强等特点。霍尔传感器的输出信号经信号调理后,通过单片机对连续脉冲记数来实现转速测量,充分利用了单片机的内部资源,有很高的性价比。经过测试并对误差进行分析发现,该系统的测量误差在5%以内,并且在测量范围内转速越高测量精度越高。所以该系统在一般的转速检测和控制中均可应用。 3、针对采用1602LCD显示测速值,直观、稳定,易于实现,该显示方式可以推广到其他工程应用领域。 4、测速系统的功能还有待进一步扩充,如判别转速方向的能力;电路布局、和抗干扰方面还有很大的提升空间。 参考文献 [1] 赵负图.现代传感器集成电路[M].北京:人民邮电出版社, 2000.534-535。 [2] 刘涳主编.毕业设计宝典. 西安:西安电子科技大学出版社.2008年。 [3] 全润,张亚凡,邓洪敏.传感器原理及应用[M].北京:清华大学出版社,2008年。 [4]来清民主编.传感器与单片机接口及实例[M].北京航空航天大学出版社。 [6] 何希才.传感器及其应用[M].北京:国防工业出版社,2001。 班级:09电子1班 姓名:刘荣 学号:090406130