今天的仿真分享来啦!基于超声波的测距测速系统设计~~需要程序和源代码的小伙伴点一波关注后台回复 “004超声波测距测速”,有问题记得私信阿目。
主要模块HC-SR04超声波模块,LCD12864显示模块,霍尔传感器检测电路,制动电机控制电路和报警电路。proteus仿真电路图如下:
介绍下各个部分,其中单片机最小系统看上一期,本期只介绍没有介绍过的模块,超声波模块:
需要注意的是,仿真不是真实的实物,所以仿真中的距离调节是使用左侧的滑动变阻器上的分压来改变的,即电压改变模拟距离改变。
超声波的测距思路:
单片机控制超声波模块的trig引脚维持10uS的高电平,超声波模块便会发出一个声波信号,在声波信号返回时,超声波模块的echo引脚会输出高电平,程序中测量高电平的时间T,就是声音往返的传播时间,根据声速乘以时间就是往返距离了,再除以2就是单边距离。
float MeasuringDistance()
{
TH0=0; // 定时器从0开始计时
TL0=0;
Trig=1; //霍尔传感器触发信号持续20us
Delay20us();
Trig=0; //关闭触发信号
//等待回响信号变低电平
while(!Echo);
TR0=1; //启动定时器0
//等待回响信号变低电平
while(Echo);
TR0=0; //关闭定时器0
//计算距离(mm)
return (SPEEDSOUND*(TH0*256.0+TL0))/2000;
}
注意配置单片机的定时器,来测量超声波echo引脚上的高电平时间。
霍尔传感器的测速电路:
霍尔传感器的输出一般是一个微小的电压信号,所以此电路点半部分是一个负反馈放大电路,将电压放大到5V左右,再经过一个反相器将电压转为正电压输入单片机。使用单片机的T1计数器对方波信号进行计数,一个方波触发一次中断,计数在中断函数中完成。速度的计算就是根据霍尔传感器的脉冲数来的,有车轮的周长以及脉冲数和时间就可以算测速了,具体见程序。
void counter1() interrupt 3
{
TH1=0xff; // 一个脉冲触发一次中断
TL1=0xff;
TF1 = 0; //清除中断标志
if((is_ok==1&&is_st_count ==0)){ //这是第一个脉冲的话,执行这个if
TR0 = 1;
is_st_count =1;
st_count = count;
puls_num++; // 脉冲数加 1
}
else if((is_ok ==1&&is_st_count ==1 && is_ed_count==0 && (count- st_count) <20)){ //其他脉冲执行这里
puls_num++; // 脉冲数加 1
}
if((count- st_count) >=20){ //到达1S ,停止计数
is_ed_count = 1;
is_sec = 1;
TR0 = 0;
TR1 = 0;
}
}
制动控制电路和蜂鸣器电路原理类似,使用NPN三极管控制,单片机在基基输入高电平,NPN导通,电机转动,蜂鸣器工作,输入低电平他们都不工作,控制简单。
完成这几个模块的设计,就可以写控制逻辑的代码了,当距离小于阈值时控制报警以及制动。
仿真和程序都开源了,需要的小伙伴点点关注,后台回复“004超声波测距测速”,就可以获取资料了~~
补充说明下小伙伴的问题,仿真软件需要proteus8.8及以上版本,程序软件是keil4.6及以上版本,有问题可私信阿目~
ending~~