Forums

使用LPC2148捕获超声传感器中的值

开始于 阿卡什 4 years ago 3回复 最新回复4年前 535意见

大家好,我正在尝试使用超声波传感器捕获该值以确定物体的距离,但是在LCD上将该距离设为0,检查了示波器中触发引脚的状态,从而获得了该引脚上的脉冲而不是回波引脚上的脉冲。

将触发器分配为输出&回声作为输入,下面是代码:

已将ECHO_PIN连接到PIN 16&TRIGGER_PIN至PIN 12

uC:LPC2148
编译器:Keil uvision 5.1

件数:60Mhz

#包括<LPC214x.h>
#包括<stdio.h>
#包括 "lcd.h"

#define PRESCALE 60
#定义TIMER_TICK_1_MS(59999)/ * 60 MHz时钟下的VPB * /

#定义ECHO_PIN(1<<16)//输入密码[PIN 16]
#定义TRIGGER_PIN(1<<17)。//输出PIN [PIN 12]

void initTimer(void);
void delay3(int);
unsigned char buf [16] = {0};
void delay_ms(unsigned int count);


无效的initTimer()
{

 T1TCR = 0x00; / *确保计时器1已关闭* /
 / *设置计时器计数器和预分频计数器* /
 T1TC = 0x0;
 T1PC = 0x0;

 / *设置预缩放和匹配值,以提供1 ms的“刻度” * /
 T1PR = 0x0;
 T1MR0 = TIMER_TICK_1_MS;

 / *将控制设置为在MR0匹配时中断,然后重置为0(即“滴答”)* /
 T1MCR = 0x3;

 / *进入启动计时器1 ... * /
 T1TCR = 0x1;

}

void delay_ms(无符号整数)
{
  无符号整数j = 0,i = 0;
  for(j=0;j<count;j++)
  {
    for(i=0;i<3000;i++);
  }
}

int main()
{
init_lcd();

IO1DIR&= ~(1<<16); //Echo pin
IO1DIR| =(1<<17); //trigger pin

initTimer();
lcd_clear();

        while(1)
        {
    long time,dist;
               

    IO1SET = 1<<17; //将高电平发送到触发引脚

    delay_ms(1000); //延迟10us
    IO1CLR = 1<<17; // 10us后发送低电平

    T1TCR = 0x01; //启用Timer1
    if(T1CR0 == 0)
    {
    delay_ms(100);
    } //等待回波引脚上出现上升沿
    delay_ms(3); //等待去抖
    if(T1CR0 == 0)
    {
    时间= T1CR0; //读取CR0 reg的值
    dist =(时间* 340)/ 2; //以米为单位的距离
    IO1SET = 1<<16;
    delay_ms(100);
    IO1CLR = 1<<16;
    sprintf((char *)buf,“ dist:%d cm”,dist);
    lcd_putstring(1,(char *)buf);
    }
     else

    T1TCR = 0x00; //禁用Timer1

        }
    
}


谢谢,

阿卡什




[-]
回覆者 珍妮 2017年7月8日

为什么在回波针上没有收到脉冲?

触发脉冲是否在规格范围内?

你了解你的传感器吗?


[-]
回覆者 阿卡什 2017年7月10日

谢谢您的回复,先生,并提到了工作原理 

传感器,将在回波针上工作。



[-]
回覆者 蜘蛛肯尼 2017年7月10日

>>delay_ms(1000); //延迟10us

这不是10 us的延迟-那将是1秒!