上海妇科疾病研究所 上海女性不孕医院 上海引产医院 无痛引产痛不痛 上海人流医院 白癜风治疗医院 上海小儿脑瘫医院 上海女子医院
基于ADI的Blackfin 的大型货车超载超速实时检测系统-获取速度模块设计-Blackfin-技术中心-国内专业ADI仿真器,Blackfin开发板,DSP芯片,软件算法,解决方案提供商-北京四维卓信电子有限公司
用户名: 密码:
主页 设为首页 加入收藏
      产品中心       技术中心       下载中心        社区新闻        诚聘英才       大学计划        关于我们       技术论坛
  您的当前位置:ADSP开源社区 >> 技术中心 >> Blackfin 今天是:
技术中心  
SigmaDSP
SHARC
A2B音频总线
Blackfin
ADI操作系统
ADSP-218X
TigerSAHRC
ADI DSP仿真器
产品导航
ADI DSP仿真器
SigmaDSP开发板
ADI A2B总线开发板
SHARC DSP开发板
销售网络
Blackfin  
基于ADI的Blackfin 的大型货车超载超速实时检测系统-获取速度模块设计
[ 作者: ] [ 来源:ADSP开源社区 ] [ 发布时间:2011-11-22 ]

本方法采用测量一个转盘的转速间接地测出货车的速度,因此转盘要与货车的转轴相连,转盘的转速与车轴的转速成一定的关系。将转盘等分为四等份,在每等份的分界线上安装一块磁钢,如图1所示。

图1 测速硬件原理

霍尔开关的VCC端接5~12V直流电源,OUT端接到SPCE061A的IOB3(外部中断2输入口),另一端接公共地。每次磁钢经过霍尔开关下方时,OUT端都会产生一个脉宽的负脉冲。

4.2.2软件设计

软件采用C语言程序,定时采用低频定时器,用2Hz时基定时,定时周期为1s(定时时长0.5s),同时要用外部中断2对OUT脉计数。使用一个标志(signal)显示计时长度(第几个0.5s)。当signal为1时,启动外部中断计数;当signal为3时,关闭外部中断,同时关闭定时中断,完成一次计数。

(1)函数流程图分析

测速度模块主要由三个子函数组成:测速主函,定时中断子函数,外部中断子函数。

数测速函数是测速模块的主体,是主函数直接调用的子函数,流程图如图2所示。

图2 定时中断子函数流程图

为了能够及时地计下AH44E产生的每个负脉冲,必须采用外部中断计数。外部中断子函数流程图如图3所示。

 

图3 外部中断子函数流程图

定时子程序是用于给定准确的时间,以便能够计算出精准的速度,定时使用2Hz低频时基计时。定时中断子函数流程图如图4所示。

图4定时中断子函数流程图

(2)部分程序代码

unsigned int signal=0;      //计时标志

unsigned int count=0;      //计外部脉冲数

double speed(void)

{

 unsigned int uiDelay=0xffff;

 __asm("INT OFF");      //关闭中断

 *P_INT_Ctrl=C_IRQ3_EXT2 | C_IRQ5_2Hz;   //设置中断IRQ3_EXT1、IRQ5_2Hz

 __asm("INT IRQ");      //开中断

  while(uiDelay--)

      *P_Watchdog_Clear = C_WDTCLR;       //延时等待

 uiDelay=0xffff;

 while(uiDelay--)

      *P_Watchdog_Clear = C_WDTCLR;       //延时等待

return (double)count/(signal-1)*2;        //计算速度

}

 

//中断服务子程序代码如下:

void IRQ5(void)

{

 if(*P_INT_Ctrl&0x0004)

 {

 signal++;

 if(signal==1){  count=0;              //signal=1时计数开始

 *P_IOB_Dir=0x00;               //设IOB3为上拉电阻输入

 *P_IOB_Attrib=0x00; 

 *P_IOB_Data=0x08;

 } else if(signal==3)               //signal=3时计数结束

            (*P_INT_Ctrl)&=~(C_IRQ3_EXT2 | C_IRQ5_2Hz); //关IRQ3_EXT1、IRQ5_2Hz中断

  *P_INT_Clear=C_IRQ5_2Hz;               //清中断标志位

 }  else

 { //IRQ5_4Hz

  *P_INT_Clear=0x0008;           //清中断标志位

 }

}

 

void IRQ3(void)

{

if(*P_INT_Ctrl&C_IRQ3_EXT1)      //外部中断1

 { //IRQ3_Ext1

 *P_INT_Clear=C_IRQ3_EXT1; //清中断标志位

 }

 else if(*P_INT_Ctrl&C_IRQ3_EXT2)    //外部中断2

  { //IRQ3_Ext2

 count++;                                //计数加1

 *P_INT_Clear=C_IRQ3_EXT2; //清中断标志位

 }

}

联系我们 | 关于我们 | 免责声明 | 诚征英才 | 友情链接
Copyright 2019 All rights reserved  本网页版权属Open ADSP所有
北京海淀区中关村大街32号新中发市场3659 邮编100100
电话 18611096839 
粤ICP备14035876号-1