【CC2530裸机开发-----超声波传感器(HC-SR04)】

1. 超声波传感器简介

简介:超声波传感器是将超声波信号转换成其他能量信号的传感器。超声波是振动频率高于20kHz的机械波超声波测距主要应用于一些工业现场的位置监控、移动机器人的自动避障行走、汽车倒车、建筑施工工地,可在潮湿高温。多尘等恶劣环境下工作。例如:液位、厚度、管道长度等场合。

技术特点:超声波具有指向性强、能量消耗缓慢且在介质中传播的距离较远的优点,因而经常用于距离的测量。相比于其它定位技术而言,超声波定位技术成本低、精度高、操作简单、工作稳定可靠,非常适合于短距离测量定位。cc2530单片机为许多控制提供了高度灵活和低成本的解决办法。

 

2. 超声波传感器测距原理

3. HC-SR04的工作时序

4. 计算测量距离方法

5. 使用定时器1测量响应引脚高电平的时间

6. 定时器工作模式的选择

超声波模块的测量范围为2mm-450mm,对应的时间最大为:4.5*2/340=0.02647S。

我们这里采用32Mhz系统时钟,32分频,自由运行模式。

  1. (1/32000000)*32=0.000001,得出定时器计数周期。
  2. 65535*0.000001=0.065535S。使用计数器最大值*计数器周期得出最大定时时长。

此时定时器的时钟精度为(1/1000000)S,对应的测量距离精度为:340m/S*(1/1000000)S=0.00034m。

7. 计算距离

由定时器1模式和分频划分,我们计数周期是1/1000000S,计数周期*声音在空气中传播速度。

那一个周期时间内声音传播的距离是0.34mm,我们通过计数器的值乘以这个速度,即可得到距离。

S=(0.34*t)/2

8. 实验代码

#include "iocc2530.h"
#include "stdio.h"

#define LED1 P1_0     //数据采集指示灯
#define trig P0_4     //触发,产生脉冲引脚
#define echo P0_5     //响应,回波引脚

void init()
{
  P1DIR |=0X01;
  LED1=1;
  P0DIR |=0X10;   //trig设为输出,默认高电平无触发
  trig=1;
  P0DIR &=~0X20;  //echo设为输入,默认低电平无响应
  echo=0;
}

void Delay_uS(unsigned int n)
{
      unsigned int i = 0;
      for(;i < n; i++);
}

void UART()
{
  PERCFG &=~0X01;
  P0SEL  |=0X0C;
  U0BAUD=59;
  U0GCR=8;
  U0UCR |=0X80;
  U0CSR |=0Xc0;
  UTX0IF =0;
  URX0IF =0;
  URX0IE =1;
  EA=1;
}

void clock()
{
  CLKCONCMD &=~0X40;
  while(CLKCONSTA & 0X40);
  CLKCONCMD &=~0X07;
}

void byte(unsigned char dat)
{
  U0DBUF=dat;
  while(UTX0IF==0);
  UTX0IF=0;
}

void wdt_init()
{
  WDCTL=0X0C;
}

void string(unsigned char *str)
{
  while(*str != '\0')
  {
    byte(*str++);
  }
}

long t=0,s=0;
unsigned char data[10];
void main()
{
  clock();
  UART();
  init();
  wdt_init();
  while(1)
  {
    if(WDTIF==1)
    {
      WDTIF=0;
      trig=0;
      Delay_uS(20);
      trig=1;
      
      while(echo==0);
      T1CTL=0X09;
      while(echo==1);
      T1CTL=0X00;
      
      t = T1CNTH; //读取定时器高8位数据
      t <<= 8;
      t += T1CNTL; //读取定时器低8位数据
        
      s = (t * 0.34) / 2;  
     sprintf(data,"%d",s);
     string(data);
     T1CNTL=0;
     T1CNTH=0;
     t=0;
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值