基于Kinetis 60、HC-SR04超声测距模块的简易水情测量装置

一、HC-SR04超声测距模块介绍

1.1 超声波测距模块简介

图1 超声波模块实物图
图2 电气参数
  • 四个接口端
    • VCC 供 5V电源
    • GND 为地线,
    • TRIG 触发控制信号输入
    • ECHO 回响信号输出等四个接口端。

1.2 超声波测距模块工作原理

(1)采用IO口TRIG触发测距,给至少10us的高电平信号;

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO口ECHO输出一个高电平高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值。
  


超声波模块时序图

二、中央控制器——Kinetis 60

2.1 装置整体分析

本装置采用k60单片机作为中央控制器。K60单片机不仅具有许多144个IO口资源,而且还具备FTM模块、UART模块,内置高精度12位AD通道和PIT定时器中断服务等本装置主要用到8位AD通道与PIT计时系统
在这里插入图片描述
由于单片机的工作电压为3.3v,供电电池组为7.2v,因此设计了一个分压电路,可以很好的用于电池组电压的采集。
在这里插入图片描述
高度计算公式:
超声波模块所测的距离为c(超声波模块)到水面的高度水位高度=超声波对地高度-超声波所测高度,因此超声波模块必须定高,这样才可保证数据精确。

2.2 硬件pcb设计

原理图:
在这里插入图片描述
pcb:
在这里插入图片描述

2.3 主要功能代码片

/*

* 简易水情装置
* 集大电协
*时间:2018.4.21
*/

#include "include.h"

float time=0;
float hight=0;
float vol=0;



void all_init()
{
  LCD_Init();
  gpio_init (PTA8, GPI,0);
  gpio_init (PTA12, GPO,0);
  pit_init_us(PIT0,1) ;
  pit_init_us(PIT1,15);
  adc_init (ADC0_SE8 );
}

void main()
{
   all_init();
   LCD_Fill(0x00); 
   
  while(1)
  {   
    Dis_Float(4,6, vol,2);
    LCD_Print(0, 0, "水情检测装置");//
    
    LCD_Print(100,2,"cm");
    LCD_Print(0,4,"ph:none");
    LCD_Print(0,6,"vol:");
    vol=adc_once(ADC0_SE8, ADC_8bit);
    vol=2*3.3*255/vol;
    
    //———————超声波—————————————————
    gpio_set(PTA12,1);
    pit_delay_us(PIT1,15);
    gpio_set(PTA12,0);
    
    while(gpio_get(PTA8) == 0);             //等待电平变高,低电平一直等待
    pit_time_start  (PIT0);                 //开始计时
    while(gpio_get(PTA8) == 1)              //等待电平变低,高电平一直等待
    time = pit_time_get_us    (PIT0);    //停止计时,获取计时时间
    hight=time/58;
    hight=15.2-hight;
    if(hight<0) hight=0;
    LCD_Print(0,2,"hight:");
    Dis_Float(7, 2, hight,2);
  }
}

注:这还是当时很稚嫩的时候做的,若有错误欢迎指正。

发布了12 篇原创文章 · 获赞 52 · 访问量 3012

猜你喜欢

转载自blog.csdn.net/weixin_42881419/article/details/87388705