- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
柴油机的转速测量柴油机的转速测量
柴油机的转速测量关键词: 单片机 转速测量 柴油机 消息
前言
柴油机的转速是一个较为重要的运行参数,也有很多种用于测量转速的仪表,如:机械软轴式转速表、频率-电压转换式转速表、数字式转速表等,它们中间有的成本很高而且精度较差、有的工艺复杂而且可靠性不高。本文介绍了一种利用单片机技术制成的智能转速表,不仅精度高、工艺简单、线路简洁,而且可靠性高、功能强。其不仅可以测量转速,而且可以统计机器运行的累计时间,当柴油机超速时,还可发出报警信号,切断油路,保护机器不发生飞车事故。
1 测量原理
在测量柴油机转速时我们采用了电磁感应式传感器,这种传感器可将转速信号转变成一个脉冲信号输出,而脉冲信号的频率与柴油机的转速是一种线性的正比关系。因此对柴油机转速的测量,实质上是对脉冲信号的频率的测量,可以采用闸门法进行测量。
2 线路设计
智能转速表的框图如图1所示
智能转速表主要由脉冲放大及整形电路、单片机(AT90S2313)、多路动态扫描LED显示电路和报警信号输出电路组成。
在设计中我们采用了ATMEL的AVR系列单片机中的AT90S2313,该单片机有如下特点:
(1) 片内有2K字节可在线编程(ISP编程)的FLASH存贮器。
(2) 片内有128字节SRAM和128字节EEPROM存贮器。
(3) 精简指令集结构单片机,尤其内部32个寄存器全部与ALU直接连接,突破传统瓶颈限制,每MHZ时钟具有1MIPS的性能。
(4) 内含带预分频的8位和16位的定时器各一个,16位定时器还具有捕捉、比较及PWM功能。
(5) 一个片内WatchDog定时器。
(6) 除具有普通UART串行口外,还具有高速SPI接口。
(7) AVR的输出端口可直接驱动LED。
AT90S2313的定时器0(8位)工作于定时器方式,用来产生定时闸门信号;而定时器1(16位)工作于计数器方式,对整形电路送来的脉冲信号进行计数;片内的EEPROM用于保存机器运行累计时间,在断电时可以保持数据不丢失。
3 程序设计
在AVR单片机的程序设计中,我们采用了ImageCraft的C语言编译器ICCAVR,并在单片机程序设计中引入了WINDOWS系统中消息的概念。主要程序流程图如图二所示。
主程序 中断服务程序
定时器0以中断方式工作,其负责采集定时器1 的计数值、对运行时间累计和发送消息。由于在仪表中对采集到的定时器1 的计数值,需要进行一些处理,如:判断是否超过额定速度、将16位二进制数转换成BCD码、为动态LED显示电路进行软件译码及扫描控制等等。如果所有工作全部放在中断程序中完成,就会导致中断服务程序执行时间过长。由于仪表还要完成运行时间的累计工作,尽管中断服务程序执行时间过长对转速的测量不会有太大影响,但势必会给时间累计造成过大的累积误差,影响累计时间的精度。为了解决这个问题,我们采取了下面的方法:
借鉴windows 编程的原理,在单片机编程中引入消息的概念,将中断产生的标志作为消息,而数据处理则放在消息循环中进行。在这个例子中中断服务程序中只进行数据的采集和标志位的设置(发送消息),而将数据的处理放到运行时间要求不很精确的中断服务程序之外的主程序循环中(消息循环)。这样一方面减少了中断服务程序的长度,缩短了中断服务程序执行的时间,提高了中断处理的实时性,另一方面又不影响数据的处理。从而很好地解决了数据采集的实时性和数据处理耗时多而影响时间累计之间的矛盾。 和PC机相比,单片机资源十分有限。因此,单片机系统不可能象windows系统那样建立庞大的消息循环机制,将消息分发给各个程序并行处理。在基于消息的单片机编程中,采取一种简化的方式,消息可以这样来定义:当某个事件(例如中断)发生时,事件处理程序(例如中断服务程序)设置相应的标志,不同的标志即代表不同的消息;而主程序所进行的消息循环就是主程序不断地判断这些标志,以决定启动哪一个处理函数(即将消息发送给特定的消息处理函数)。这种方法在多中断系统中使用,可以明显地提高中断的实时性;另外,由于在中断服务程序中不需要调用数据处理程序,也有效地防止了代码重入带来的问题。
如下面的T0中断服务程序,发送消息:
void timer0()
{
if (——timercount==0)
{
TCCR1B = 0x00;
count=TCNT1; //采集数据
second++; //运行时间累计
flag=1; //发送消息
WDR();
TCNT1H = 0x00;
TCNT1L = 0x00; //清除T1
TCCR1B = 0x06;
timercount=20;
}
TCNT0 = 76; //重装T0
}
而下面这段程序是主程序消息循环中一部分,对T0发送的消息进行检查,如果没有消息产生则跳过数据处理部分
文档评论(0)