- 单片机:Kinetis 60 龙邱开发板
- 开发环境:IAR Embedded Workbench IDE
一、HC-SR04超声测距模块介绍
1.1 超声波测距模块简介
|
|
- 四个接口端:
- 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);
}
}
注:这还是当时很稚嫩的时候做的,若有错误欢迎指正。