服务热线:021-60766769
设为首页| 收藏本站|联系我们

高速微位移测量仪--程序流程图


程序流程图
主程序包括串口初始化,启动周期中断,之后为一个无限循环过程。在无限循环中,首先将用于匹配离焦量标定区间的变量进行清零,再通过AD数据采集引脚对电压信号进行采集,然后将采集到的信号值通过换算得到离焦信号,最后用离焦信号逐次对每个离焦标定区间新型匹配,当确定离焦信号所属区间后跳入程序对离焦信号进行换算得出离焦量FES。程序的周期中断的中断周期为1ms,周期中断中所执行的是一个显示程序,以此实现实时输出。

周期中断服务子程序框图如下:

4.2 离焦信号AD采集与计算
为了确保离焦信号的精确度,程序采用求平均值的方式确定离焦信号值。首先将AD采集的字符串型AC和SUM信号值转换为长整形,然后循环200次且两组数值分别自加。得到200次自加后的AC和SUM信号值先取平均值,然后减去暗室无光中测得的QP50-6-TO8四象限探测器的AC和SUM的信号值。之后将AC和SUM的信号值转化为双精度浮点型并进行计算求取离焦量FES。
根据KL25Z128LV飞思卡尔板电路原理图,主控MUC的PTE20,PTE21,PTE22,PTE23四路引脚为AD采样引脚且均能采集0~3V直接的电压信号。

通过CodeWarrior对四路AD引脚分别进行通道(Channel)设置。由于需进行多次AD采样且系统设计要求测量速度小1ms,因此AD转换周期(Conversion time)设置为1.57356us。

for(i=0;i<200;i++)
         {
                ADOUT_MeasureChan(1,0);
                ADOUT_GetChanValue16(0,&OAC);
                AC=OAC;
                AC_S=AC_S+AC;
      
                ADOUT_MeasureChan(1,2);
                ADOUT_GetChanValue16(2,&OSUM);
                SUM=OSUM;
                SUM_S=SUM_S+SUM;
         }
         SUM_S=SUM_S/200-31760;
         AC_S=AC_S/200-31760;
 
         SUM_F=(double)SUM_S;
         AC_F=(double)AC_S;
 
      FES=AC_F/SUM_F*-100;
4.3 周期中断与显示程序
为实现实时显示输出,本设计采样周期中断控制显示程序实现此功能。通过CoadWarror软件添加周期中断控件TimerInt,并将中断周期设置为1ms。通过编译后,在Event.c目录下生成void TI1_OnInterrupt(void),然后进行显示程序编程。

 
根据KL25Z128LV飞思卡尔板电路原理图,显示模块是一个四位LED数码管。四个LED数码管分别由四个PNP型三极管控制位选,当给基极高电平时,发射结反偏,三极管不导通,位选关断,数码管无法写入;当给基极低电平时,发射结正偏,三极管导通,位选打开。
本设计中所用的LED数码管为共阳极的数码管,对于共阳极的数码管,如果要点亮其中的一段,只要对应的LED 有电流流过,且在对应的引脚加低电平。具体显示数值的二进制数值与字符串型如下所示:
0 1100 0000 0xc0
1 1111 1001 0xf9
2 1010 0100 0xa4
3 1011 0000 0xb0
4 1001 1001 0x99
5 1001 0010 0x92
6 1000 0010 0x82
7 1111 1000 0xf8
8 1000 0000 0x80
9 1001 0000 0x90
 
由于显示数值为小数,所有在将显示数值变量定义为double双精度浮点型。先将显示数字乘以1000,然后再通过除十或者取余分别获得千位、百位、十位、个位相应数值。而且因为千位对于原数值的个位,需要显示小数点,所有将千位的字符串于(&) 0x7f。
为了实现四位LED数码管同时显示,需要先将四位LED数码管位选关断,然后再依次开启一位位选并给段选负值,并且如此循环4次。

void display(double d)
{
       unsigned char          TABLENUM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
 
       char ch4,ch3,ch2,ch1;
       int val;
 
       val = d*1000;
       ch4 = TABLENUM[val/1000%10]& 0x7f;
       ch3 = TABLENUM[val/100%10];
       ch2 = TABLENUM[val/10%10];
       ch1 = TABLENUM[val%10];
      
       BitDG1_PutVal(1);
       BitDG2_PutVal(1);
       BitDG3_PutVal(1);
       BitDG4_PutVal(1);
       BitDG1_PutVal(0);
BitsLED_PutVal(ch4);
 
       BitDG1_PutVal(1);
       BitDG2_PutVal(1);
       BitDG3_PutVal(1);
       BitDG4_PutVal(1);
       BitDG2_PutVal(0);
BitsLED_PutVal(ch3);
      
       BitDG1_PutVal(1);
       BitDG2_PutVal(1);
       BitDG3_PutVal(1);
       BitDG4_PutVal(1);
       BitDG3_PutVal(0);
BitsLED_PutVal(ch2);
      
       BitDG1_PutVal(1);
       BitDG2_PutVal(1);
       BitDG3_PutVal(1);
       BitDG4_PutVal(1);
       BitDG4_PutVal(0);
BitsLED_PutVal(ch1);
}
上海育仰科教设备有限公司,立于上海,心怀天下
生产基地:上海松江工业园
销售中心:上海市嘉定区鹤旋路26弄22号
电话:021-60766769 传真:021-60766769 公司邮箱:yuykjsb@126.com
沪公网安备31010702001298号 教学设备|机械教学模型|楼宇实训台|维修电工实验台:上海育仰公司 All Rights Reserved  沪ICP备16023097号-1
展开