转速测量仪
摘 要
本设计采用宏晶科技STC12C5410AD 单片机控制结合光电反射
式传感器ST178设计而成,具有低功耗、精度高、人机界面友好等优点,非接触式测量高度最多可达15mm ,适合于多种非接触式转速与方向测量场合,通过间歇式工作方式、交替式工作方式、高速匹配输出控制与低电源供电实现能耗的降低,本设计在测量600r/min的情况下可以达到最低功耗1.54mw 。 关键词:低功耗 转速测量仪 STC ST178
Abstract
This design adopts the STC MCU Co.Ltd’s MCU ‘stc12c5410ad ’ to
design the Rotation Measuring Apparatus which control with the optical reflex sensors ‘st178’. It has many advantages such as low power consumption, high precision, and the friendly man-machine interface There are advantages of a contact in measuring the height of the maximum 15mm for the measurement of speed and direction. All the way through the alternative work style and the high-speed-match-output control technology the power consumption could be reducted,.The apparatus ’s energy consumption can make a lowest power at 1.54mw. keywords :low power consumption, Measuring Apparatus of rotation speed, stc,st1
目 录
1. 系统方案论证
1.1 系统框图---------------------------------------------------------------------- 1 1.2 转速测量仪方案设计----------------------------------------- -------------- 1 1.2.1 传感器方案设计----------------------------------------------------- 1 1.2.2 控制方案设计 ------------------------------------------------------ 1 1.2.3 显示方案设计 ----------------------------------------------------- 2 1.2.4 采样方案设计 ---------------------------------------------------- 2
2. 理论分析与计算
2.1 检测方法的理论分析------------------------------------------------------- 2 2.2 低功耗设计分析------------------------------------------------------------- 2 2.3 方向检测原理分析 --------------------------------------------------- 2
3. 硬件与软件设计
3.1 硬件设计-------------------------------------------------------------------
3.1.1 电源电路设计-------------------------------------------------------- 3.1.2 显示电路设计-------------------------------------------------------- 3.1.3 数据处理与放大电路设计----------------------------------------- 3.1.4 CPU模块电路设计-------------------------------------------------- 3.1.5 传感器电路设计----------------------------------------------------- 3.2 软件设计--------------------------------------------------------------------- 3.2.1 主程序流程图-------------------------------------------------------- 3.2.2 定时器中断流程图-------------------------------------------------- 3.2.3 捕获中断流程图-----------------------------------------------------
4
4 4 4 5 5 5 5 5 5
4. 测试方案与测试结果
4.1 调试方法与仪器----------------------------------------------- ------------- 6 4.2 测试数据完整性------------------------------------------------------------ 6 4.3 测试结果分析-------------------------------------------------- ------------- 6
5. 结束语 附录
5.1 参考文献--------------------------------------------------------------------- 7 5.2 电路总原理图--------------------------------------------------------------- 7 5.3 主要程序附录--------------------------------------------------------------- 10
一、系统方案论证
本系统由电源模块、CPU 模块、数据处理模块、测速传感器模块与显示模块构成。测速传感器模块通过测量将数据送入数据处理模块处理与放大然后交由CPU 模块采样与显示,同时CPU 模块对测速传感器模块实施闭环控制用以降低功耗。
1.1 系统框图
图1-1 系统框图
1.2 转速测量仪系统方案设计
1.2.1 测速传感器模块方案设计
方案一:采用电涡流或电容式接近开关原理设计传感器模块,此类传感器对金属的敏感性高,可以精确地检测并区分金属与非金属,从而达到设计目的,但由于电涡流式传感器对磁场的变化相对敏感,在不采取合适的屏蔽措施下测得的结果将具有不可靠性。
方案二:采取反射式光电传感器设计传感器模块,光电传感器发出的近红外光线波长在900nm 左右,纯铜与FR4材料板(或其他不同类材料)对于近红外光线的吸收程度不同达到不同的反射强度,从而得到不同的信号输出,从而区分纯铜与FR4材料板达到测试目的,采取光电式传感器的设计难度在于输出信号的调节和外界光源的干扰。
综合上述两种方案,鉴于功耗与干扰方面的考虑,本系统采取光电传感器作为传感器设计方案。
1.2.2 CPU控制模块方案设计
方案一:采用32位的LPC2138作为控制CPU ,LPC2138采用了PHILIPS 公司基于ARM7TDMI-S 核的ARM 芯片,拥有RDI 标准接口、同步Flash 刷新技术以及影射寄存器窗口等三项国内ARM 仿真器设计最领先的3种技术,内部PLL 锁相环倍频可以得到更高的CPU 处理速度,硬件自带的AD 、DA 、捕获、匹配以及同步与异步的通信方式更方便用户的编程设计,并且可以达到很高的实时性,但是价格较昂贵。
方案二:采用宏晶科技有限公司的STC12C 系列的5410AD 单片机作为控制CPU ,该单片机拥有4路PCA 捕获/匹配,8路10位高速A/D转换,转换速度可以达到30万次每秒,且价格便宜,使用于各种仪器与工业控制。
综上所述,由于使用ARM 控制需要对所有的接口做电平转换,增加了硬件
电路的复杂性,在同样能够完成功能的前提下考虑到性价比与设计的便利性本系统选择使用stc12c5410ad 的单片机作为CPU 的控制核心。
1.2.3 显示模块方案设计
由于设计要求能够显示速度变化曲线与汉字,考虑到12864正好能够实现此类要求,故本设计毫不犹豫的选择了双屏显示的12864模块作为显示方案。双屏显示的12864可以实现双屏控制,分左右两屏,每屏可设计64³64的点阵显示,内部不带字库,可以使用字模提取软件提取字模编码用以显示。 1.2.4 数据处理模块中采样方案设计 方案一:使用外部AD 芯片构成的采样模块。外部的AD 模块具有可选择性,像ADC0809的8位AD 采样芯片以及其他10位、12位精度采样的模块都可以使用,只需要简单的电路即可搭构成AD 采样电路。
方案二:使用STC12C5410AD 内部自带的AD 模块。STC12C5410AD 单片机内部硬件自带8路10位精度的AD 采样器,采样速度可以达到30万次每秒,完全能够满足本系统设计的任务。
综合考虑stc12c5410ad 单片机内部自带的AD 可以满足本设计的要求,并且不会增加电路的复杂程度,故选用方案二作为本设计的采样设计。
二. 理论分析与计算
2.1 检测方法的理论分析 2.1.1 能耗测试理论分析
图2-1 能耗测试示意图
测速传感器的功耗为其供电电源线上的电压与电流之积,由图2示意,在传感器模块与数据处理与显示电路之间的电源线上断开并接入一电流表,在电路正常工作情况下,电源线上电压表所得电压值与电流表所得值相积,得到功率P ≈V ³I 。
由于设计任务有低功耗的要求,本系统在降低功耗方面采取了间歇式工作方式,为了使功率的检测变化平缓,减小跳动感,在电源与数据处理电路之间增加了LC 滤波器与大电容,电容具有阻碍电压变化的作用,LC 滤波可以减小电流脉动,因此电流会变得平缓,有利于增加检测的可读性,如图2-1所示。 2.2 低功耗设计分析
设计任务要求功耗至少低于2mW ,甚至要低于0.2mW ,并要求输出信号幅度的峰峰值≥1.5V ,硬件上为了降低功耗尽量不采取一些晶体管等耗能元件,由于反射式光电传感器的发射管与接收管的隔离,
故可以采用双电源供电来降低功
图2-2 功耗测试滤波电路
耗,如图2-2光电传感器的结构所示,发射管的发射功率要低,又要接收管能够正常工作,电流应该控制在1.6~1.8mA 左右最为理想,为了达到所需要的管压降,在发射管上方串一电阻用以限流,电源采用1.3V 供电,限流电阻RS11与可 调。电阻Rw2用于调节电流,得到式(1):
I1=1.3V/(10Ω+10Ω+Rw2) -------(1) 当Rw2≈745Ω时,I1≈1.7mA ,P1≈I1²V1=1.7³1.3≈2.21mW 其中RS1和RS2为电流采样电阻。
光电传感器受光部分输出只需要电压跳变即可,故采用合适电压与大电阻20~50K Ω左右,降低电流,光电管在一定环境下有不同的导通压降,在发射电流较低时管压降较大,本设计中测量约800mV ,则功率为:
22
P2≈U2/(Rw5+RS2)=(3.3-0.8)/(RS2+Rw5)≈0.125mW ~0.3125mW-----(2)
图2-3 光电测速传感器的结构原理图
综合上述分析,传感器部分总功耗P all =P1+P2≈2.235mW ~2.5225mW ,由于要检测速度和方向,因此光电测速传感器需要2个,测速传感器部分总共需要消耗4.47mW ~5.045mW 的功率。
硬件设计的低功耗可以控制在4.47mW ~5.045mW 之间,但这仍达不到设计计要求,因此本系统另外采取软件来控制光电测速传感器间歇式工作。
如图2-3所示,光电传感器红外发射管的 K 脚接单片机的匹配高速输出口,精确地控制发射管的工作与截止。当MAT 脚输出为低电平时,光电发射管正向导通,接收管导通后使3脚接近低电平;反之,当MAT 脚输出高电平时,光电发射管反向截止,发射管不工作,接收管同时截止,3脚输出接近高电平。通过MAT 脚匹配输出控制可以实时的控制光电传感器的工作。
按照上述分析,传感器连续工作1s 钟工作消耗4.47mJ ~5.045mJ ,假设1s 内只工作50ms ,那么在忽略电压电流波动的理想情况下,传感器消耗的功耗就
可以大幅度降低,可以估计其消耗能量为:
W=(50ms/1000ms)*(4.47mJ ~5.045mJ) ≈(0.2235 mJ~0.25225 mJ) 在转速被测对象在100~600r/min的前提下,被测对象转动1转的时间大约100ms ~600ms 左右,传感器完全可以在1转中测量2次到12次,这种间歇式的工作方式可以大幅度的降低功耗。
除此之外,在间歇式工作的基础之上本设计还采用了交替式的工作方式降低功耗。测量包含测量速度与方向两个指标,在测量速度的时候只需要1个传感器工作,另一个传感器可以停止工作;在测量方向时两个传感器需要同时工作,考虑到电机转动的特殊性,电机不可能在某一转速下突然换向,必然等待速度减为0以后方向才能换向,因此检测转速可以在换向的过程中工作一小段时间,这样至少可以将其能耗在0.2235 mJ~0.25225 mJ的基础上再降低40%左右,最终所得到的能耗在理想情况下可以控制在0.1341 mJ ~0.15135 mJ 左右,即便在偶然条件下也可以将功耗控制在0.2mW 以下,完全能够满足设计发挥部分的要求。
2.3 方向测量原理分析
光电传感器的装置如图2-4所示, 被测转盘上的投影如图所示,两个 光电传感器成线布置与圆心成90° 夹角。测量方向时需要传感器A 和B 同时工作,捕获到的信号经 过处理送入单片机捕获口,捕 获到的波形如图2-5、2-6所示。 当A 超前于B 1/4个周期时,为 顺时针旋转,表现为AB 捕获差值小于 周期的1/4;否则为逆时针旋转。 图2-4 传感器装置结构示意图
图2-5 A 超前于B 的波形
图2-6
A 滞后于B 的波形
三. 电路与程序设计
3.1 系统电路图
3.1.1 电源电路设计
本系统设计的大多数芯片如单片机、放大器、比较器、串并转换芯片工作电压都为5V ,再加上放大器对于双电源供电的需要,故制作±5V 电源以满足供电需要,其中D5~D10都作保护用,防止电流反向流动造成电源损坏。
另外,对传感器部分采取不同的电源供电,其中1.3V 与3.3V 由LM1117制作的稳压电源提供,电路原理图见附页电路原理图所示(1.3V与3.3V 电源类同,只附上3.3V 电路原理图) ,其中LM1117的输出电压关系式为:
Vout=1.25*(1+R1/Rw2) 3.1.2 显示电路设计
图3-1 显示电路
由于stc12c5410ad 单片机仅有24个IO 口,且许多口拥有第二功能,并且在高速输出模式下,P2口无法用作输出,在接口资源匹配时极其有限,考虑到接口资源与同步串行通信的高速特点,
故在硬件上增加了串并转换并采用SPI 进行显示通信,原理图如图3-1所示,其中74LS164为串并转换芯片,5K 的可调电阻用来调节12864液晶的对比度。 3.1.3 数据处理与放大电路设计
测速传感器的信号峰峰值仅1.5V ,不能满足单片机对高低电平检测的需求,需要用比较器LM339放大整形。而在采样电路模块中,由于采样电流极小,故需要通过采样电阻将其转化为电压后经过12位精度的放大器AD620经过放大,其增益倍数表达式为:
A=(49.4K/470)+1≈106(倍)
图3-2 数据采样与放大电路原理图
当流过传感器红外发射管通路时电流大约为1.7mA ,经过10Ω电阻采样所得
电压为17mV ,经过AD620放大106倍约为1.802V ,再经过单片机采样所得数据精度将更高,同样的,接收通路电流约为20uA ,经过1K Ω电阻采样所得电压为20mV ,经过运放得到电压大约2.12V ,采样所得的数据精度也将更好高。
3.1.5 传感器电路设计 传感器原理图见图3-2,电路设计与分析在功耗分析中已经介绍,就不再赘述。 3.2 系统工作流程图
需要用比较器LM339放大整形。而在采样电路模块中,由于采样电流极小,故需要通过采样电阻将其转化为电压后经过12位精度的放大器AD620经过放大,其增益倍数表达式为:
A=(49.4K/470)+1≈106(倍)
图3-3 数据采样与放大电路原理图
当流过传感器红外发射管通路时电流大约为1.7mA ,经过10Ω电阻采样所得
电压为17mV ,经过AD620放大106倍约为1.802V ,再经过单片机采样所得数据精度将更高,同样的,接收通路电流约为20uA ,经过1K Ω电阻采样所得电压为20mV ,经过运放得到电压大约2.12V ,采样所得的数据精度也将更好高。
3.1.5 传感器电路设计 传感器原理图见图2-2,电路设计与分析在功耗分析中已经介绍,就不再赘述。 3.2 系统工作流程图 本系统设计主要采用Keil4软件编写与调试程序,程序语言采取易读性 图
图3-4 主程序流程图 图3-5 定时器中断流程图 图3-6 捕获中断流程
和移植性更高的C 语言编写。测速系统由多种工作模式组成,在不同的转速下工作模式不同用以达到节能目标,主要采用16位高速匹配输出控制传感器工作并且在设定标志下工作与停止,系统程序主要分为定时器中断,捕获中断(包含匹配中断)与主程序几部分。
四. 测试方案与测试结果
4.1 调试方法与仪器
根据设计要求,需要测量传感器信号峰峰值与功耗,根据测量原理分析,需要测得光电传感器在离被测物不同高度(2m m ~10mm )之间信号的峰峰值与传感器供电线上的总功耗,需要的仪器有数字及模拟万用表与数字式示波器。调试过程中通过支架等装置固定包测速装置并使其工作,被测转盘转速控制在100r/min与600r/min之间变化,测得不同高度下的信号峰峰值,并通过对可调电阻的调节改变工作电流达到最大峰峰值。 4.2 测试数据完整性
测试数据包含有测试的不同高度条件下的光电传感器的发射管工作电流,接收管输出信号峰峰值以及正常工作时的工作电压,并计算得到功耗与转速显示误差,数据测试表格如下表,测试数据所使用的仪器型号为DS1052E 数字型示波器与DT-830B 三位半数字万用表:
表1
测试数据记录表
注:+代表顺时针,-代表逆时针
4.3 测试结果分析
通过对表1测试数据的分析可知,间歇式工作方式消耗功率平均可控制在1.54mW 以下,输出信号的幅度峰峰值平均能够达到1.5V 以上,传感器与被测转盘之间的距离在8~12mm 之间效果最好,实际转速(示波器测得)与12864显示转速误差在1%以内,检测所得方向完全正确。
五、结术语
经过测试,本设计可以完成低功耗、高精度、界面友好的转速测量仪,由于时间上的原因,功耗部分没有降低到0.2mW 以下,功耗部分的降低程度有待提高。
参考文献
[1]余成波,胡新宇,赵勇. 传感器与自动检测技术[M].北京:高等教育出版社,2004.2. [2]华成英,童诗白. 模拟电子技术基础(第四版)[M].北京:高等教育出版社,1980.9. [3]苏家健,曹柏荣等单片机原理及应用技术
[4]谭浩强. C程序设计(第二版)[M]. 北京:清华大学出版社,1999.12. [5]阎石. 数字电子技术基础(第四版)[M].北京:高等教育出版社,1998.11.
[6] 黄智伟. 全国大学生电子设计竞赛系统设计[M].北京:航空航天大学出版社,2006.12
附录
1. 电路总原理图
2. 主要程序附录
#include "stc12c5410ad.h"//头文件
#include "intrins.h"
#include "math.h"
#include //包含类型定义库文件
#include //包含字库文件
#include //包含宏定义文件
#include //包含管脚定义文件
uint16 glv=0;
uint8 cnt_dot; //打点次数计数
uint8 xdata speed[64];//
unsigned int disp_cnt;
void initial_spi()
{
// SPCTL=0xfc; //;0FCH, 忽略 SS 脚, 设为主机
SPCTL=(0
(0
(1
(1
(0
(1
(1
SPSTAT=0xc0; //;清0 标志位 SPIF(SPSTAT.7), WCOL(SPSTAT.6)
//;向该两个标志位写"1" 会将它们清0
}
void spi_send(uint8 buffer)
{
SPDAT=buffer;
SPSTAT=SPSTAT&0x80; // ;等待 SPIF=1 即等待 SPI 发送完毕
while((SPSTAT&0x80)==0x00);
}
//------------------------
// 初始化LCD
//-------------------------
void initlcd()
{
write_com(guanxian);
write_com(kaixian);
write_com(ye);
write_com(lie);
write_com(hang);
}
unsigned int cnt;
unsigned int disp_cnt;
sbit out1=P2^0; //定义I/O的硬件接口 光电传感器A 控制口
sbit out2=P2^4; //定义I/O的硬件接口 光电传感器B 控制口
unsigned char KeyCurrent,data1000,data100,data10,data1;
uint8 direction=5;//方向标志,>5为正转,
void PCA_init()
{
CMOD=0x80; // PCA 在空闲模式下停止 PCA 计数器工作 // PCA 时钟模式为fosc/12
// 禁止 PCA 计数器溢出中断
CCON=0x00; //;禁止 PCA 计数器工作, 清除中断标志、计数器溢出标志;
CL=0; //清零计算器
CH=0;
CMOD|=0x01;//PCA 计数器溢出中断
CCAPM0=0x31;//16位上、下降沿捕获功能 P3.7
CCAPM1=0x31;//16位上、下降沿捕获功能 P3.5
//CCAPM2=0x4c;//16位高速脉冲输出 P2.0 控制传感器A 速度传感器
//CCAPM3=0x4c;//16位高速脉冲输出 P2.4 控制传感器B 方向
CCON=0X82; //CF=1;CCF1=1;CCF0=1;
EPCA_LVD=1; //;开 PCA 中断
CR=1; //;将PCA 计数器打开
}
//定时器设置
void init_time0()
{
TMOD = 0x01; //设定时器0为模式1,16位模式
TH0=(65536-10000)/256; //1.0MS定时
TL0=(65536-10000)%256;
TR0 = 1; //启动定时器0
ET0 = 1; //定时器0中断打开
}
uint32 T_a=0;
//uint16 T_a1=0;
uint8 ccf0_flag;//捕获标志
uint8 ovf=0,ccf0_ovf=0,ccf1_ovf=0,Gzh_flag,ccf1_flag=0;
uint16 m_a,t;
uint32 T_x;
uint32
ccf0_time,ccf0_time1,ccf0_time2=0,ccf1_time,ccf1_time1,ccf1_time2=0,ccf0_t;
uint32 T_time_a; //NextPoint,
uint8 cntr=0; //zhuansubiaozhi
uint8 v_cnt=0; //zhaunsujshu
uint16 vv;//zhuansu
//uint16 zhq[5];
//uint16 tab[5];
uint8 zhqcnt=0,zhqcnt1=0 ,tabcnt=0;
uint32 temp,ccf0_zp;
void PCA_INT(void) interrupt 6 //过零捕获,电机转速检测捕获
{
if(CF==1)//计数器溢出中断
{
++ovf; ccf1_ovf++;
if(m_a>0)//下一次匹配时间的溢出次数
{
m_a--;
if(m_a == 0) //允许匹配
{
CCF2=0;
CCAPM2 = 0x4c;//ECCF2 = 1; 允许CCF2中断; }
}
CF=0;
}
Gzh_flag = 4;
switch (Gzh_flag)
{
case 0://工作方式为0,处于未开启状态
//不开启传感器的工作
//12864显示欢迎字幕
break;
case 1://工作方式为1,处于刚开启状态
//刚启动,全过程检测转速和方向,工作10个周期,提高转速测量精度
break;
case 2://工作方式为2,处于低于100转每分钟
//全过程检测转速和方向
break;
case 3://工作方式为3,处于正常工作状态 100-550转
break;
case 4://工作方式为4,处于正常工作状态 大于550转
///////////////匹配中断
if(CCF2==1)
{
CCAPM2 = 0x00;//ECCFN = 0; 关闭CCF2中断;
CCF2=0;
}
if(CCF1==1)//电机辅助方向检测捕获 PCA1
{ // temp= ccf1_time+ccf1_ovf-ccf0_t; if (ccf1_flag ==1) { ////////方向检测 / ccf1_time1 = (CCAP1H10) direction =10; } else { direction --;//反转 if (direction==0) direction =1; } //ccf0_zp = 0;//清0周期值 ccf1_flag =0;//清0 //ccf1_ovf=0; //ccf0_ovf=0; } CCF1 = 0;//清 PCA 模块1 中断标志 } if(CCF0==1)//电机转速检测捕获 PCA0 { ccf0_time1=(CCAP0H500) { out1 = 1;//关闭传感器A, 等待下一次匹配中断 ////////////每一个周期后计算平均值 cntr++; T_a += ccf0_time; //一个周期 if(cntr>1) { ccf1_ovf = 0;//qing溢出值,用于测定方向 ccf0_t=ccf0_time1; //CCF1=0; //ccf0_flag = 1;//捕获0 标志开AB 传感器间的溢出计数; //ccf1_ovf=0;
T_time_a+=T_a;//计算转速//11059200/12*60=55296000/2 v_cnt++;
ccf0_zp = T_a;//保留周期值
/////求出匹配时间\溢出个数
T_x = ( T_a*8/10 ) +ccf0_time1;
//T_a1= T_a;
T_a =0;
m_a = T_x /65536 ;//溢出个数 /200
CCAP2L = t&0xff;
CCAP2H = t>>8;
CCF2=0;
if(m_a == 0) //允许匹配
{
CCAPM2 = 0x4c;//ECCF2 = 1; 允许CCF2中断; }
cntr= 0;
}
ccf0_time2=ccf0_time1;
ccf1_flag = 1;//开启AB 传感器计算 标志
ovf = 0;//清溢出次数标志
}
CCF0=0;//;清 PCA 模块0 中断标志
}
break;
}
}
/******************************************************************** 函数功能:键盘初始化
入口参数:无。
返 回:无。
备 注:P1.2 IO口的设置,开漏,作A/D使用
********************************************************************/ void InitKeyboard()
{
P1M1=0x0f; ////P1.2 IO口的设置,开漏,作A/D使用
P1M0=0x0f;
}
unsigned char ADC_Conversion_1()
{
unsigned char temp,KeyCurrent;
ADC_CONTR=0x81; //ADC开始转换
delay02(1);
ADC_CONTR=0x89;
delay02(1);
ADC_CONTR=0x89;
delay02(1);
temp = ADC_DATA/*4+ADC_LOW2*/;//高8位的计算值+低2位的计算值=实际值
KeyCurrent = temp;
return KeyCurrent;
}
unsigned char ADC_Conversion_2()
{
uint16 temp,KeyCurrent;
ADC_CONTR=0x82; //ADC 通道0 开电源
delay02(1);
ADC_CONTR=0x8a;//ADC 通道0 开始转换
delay02(1);
ADC_CONTR=0x82;
delay02(1);
temp = ADC_DATA/*+ADC_LOW2*/;//高8位的计算值+低2位的计算值=实际值
KeyCurrent = temp;//(temp>>8)*5;//1.3V的采样回来的电压值
return KeyCurrent;
}
unsigned char ADC_Conversion_3()
{
unsigned char temp,KeyCurrent;
ADC_CONTR=0x83; //ADC开始转换
delay02(1);
ADC_CONTR=0x8b;
delay02(1);
ADC_CONTR=0x83;
delay02(1);
temp = ADC_DATA/*4+ADC_LOW2*/;//高8位的计算值+低2位的计算值=实际值
KeyCurrent = temp;
return KeyCurrent;
}
uint16 i,t_cnt=0,k=0,vsp,gonghao;
uint8 xshflag=0;
unsigned char KeyCurrent_a=0,KeyCurrent_b,KeyCurrent_c,KeyCurrent_d; void Time0(void) interrupt 1
{
//unsigned char data100,data10,data1;
TH0=(65536-2000)>>8;
TL0=(65536-2000)&0xff; //设定时值为2000us (2ms)
t_cnt=(t_cnt+1)%250; disp_cnt=(++disp_cnt)%25; if(disp_cnt == 0) { KeyCurrent_a = ADC_Conversion_0();//ADC开始转换 1.3 V 电压 } if(disp_cnt == 1) { KeyCurrent_b = ADC_Conversion_1();//ADC开始转换通过1.3V 的电流 } if(disp_cnt == 2) { KeyCurrent_c = ADC_Conversion_2();//ADC开始转换 3.3 V 电压 } if(disp_cnt == 3) { KeyCurrent_d = ADC_Conversion_3();//ADC开始转换通过3.3V 的电流 } if(disp_cnt == 4) { gonghao=((KeyCurrent_b*19)>>4);//KeyCurrent_b*13*500*100/256/106/10; //单位:0.01mw gonghao =gonghao *2; gonghao += (KeyCurrent_d*15)>>8; //KeyCurrent_d*33*500*100/256/106/1000; } if(disp_cnt == 19) { data100 = (unsigned char)(gonghao / 100) ; data10 = (unsigned char)(gonghao %100 /10); data1 = (unsigned char)(gonghao %10) ; } //平均转速 if (t_cnt==0) { EA=0; if (v_cnt>0) { vv= 55296000 /(T_time_a/v_cnt) ; T_time_a =0; v_cnt =0; } EA=1; xshflag=1;
}
//led输出计算
if (m_a>0)
{
m_a--;
if ( m_a==0)
{
out1=0;
}
}
}
//uint8 data10000;
void main()
{
uint8 j=0;
InitKeyboard();
initial_spi();
delay1(50000);//适当延时,等待LCD 复位
initlcd(); //初始化
cleanlcd(); //清空整屏
display_left_zuobiao();//在左半屏显示坐标轴
displaylcd_right_measurementname();//在右半屏显示测量项目名称 displaylcd_right_value();//在右半屏参量值
IPH = 0x02;//高速脉冲输出,将PV A 中断设为最高优行级。 IP = 0x42;
for(i=0;i
{
speed[i]=0;
}
//T_time_a=500;
PCA_init();
init_time0();
EA = 1; //允许CPU 中断
while(1)
{
if (xshflag==1)
{
display_wave_left();
display_fresh_right();
xshflag=0;
}
}
}