FPGA-超声波避障小车(ego1)

1,645 阅读3分钟

     基于FPGA的超声波避障小车,利用ego1的100HZ时钟,我们可以自己定义不同占空比的PWM来控制电机的转速和舵机的角度,我们可以通过自己写计时器获得超声波来回所需的时间来测量距离,根据距离的远近返回来控制电机的转速以及舵机转动的角度,我们也可以加上openmv识别色块的功能,来模拟小车识别红绿灯控制小车的出发和停止。结合以上描述,我们可以通过FPGA来实现一个颜色控制启动和停止的利用超声波测距来避障的小车。如下图

image.png

根据项目任务要求,我们可以大致把目标任务分为以下几点:

1.利用计数器来实现不同占空比的PWM输出。

2.通过控制触发信号trig(10us的TTL)使内部循环发出8个40KHZ脉冲即驱动超声波,接收回响信号echo,通过echo得到距离。

3.将超声波的数值显示到数码管上。

3.配置openMV终端,通过io口的高低电平来传输色块颜色信息。

为实现目标,我们在FPGA里设置了如下图所示的六个模块(vivado)

模块1:counter

分频模块实现每0.5s检测一次距离判断是否转向。

模块2:超声波模块

定时发布trig,并检测传来的echo信号,计数并转换为距离。

模块3:转换模块

转化模块将二进制的距离转化为四位二进制,方便后续数码管显示。

模块4:数码管模块

将转化过来的四位二进制距离在数码管上显示。

模块5:PWM模块(电机)

通过设置特定占空比的 PWM波来使电机达到相应速度,同时也接收openmv传来的开机关机命令。

模块6:PWM模块(舵机)

通过设置特定占空比的 PWM波来使舵机转到相应角度

硬件平台:

Ego-one(FPGA主控):

电机(PWM控制):

舵机(PWM控制):

电池(供电):

稳压板(稳压):

电机驱动(将模拟信号转化为电机适配的信号):

超声波(用于测距):

Openmv摄像头(识别色块并且将信息传到ego1里):

相应的,我们可以设计如下方案:

1.打开开关sw1,识别特定色块,小车前行(openmv+电机)

2.数码管显示前置超声波测距示数(超声波)

3.若前置超声波测距示数大于80cm,方向不变

若示数在80cm到40cm之间,方向转动一个小角度

若示数小于40cm,方向转动一个大角度(舵机)

4.转动方向判断:通过左右两个超声波测距比较,若舵机要转动角度,则往超声波测距大的方向转动,实现避障功能。

5.前置超声波的距离与电机的PWM占空比正相关(超声波+电机)

6.识别特定颜色色块,小车停止(openmv)

部分io口设置:

Io FPGA IO PIN对应程序变量作用
IO_L18NG17Go1电机模拟信号
IO_L18PH17Go2电机模拟信号
IO_L17NJ13Go3电机模拟信号
IO_L17PK13Go4电机模拟信号
IO_L16ND17ECHO超声波返回脉冲
IO_L16PE17TRIG超声波发送脉冲
IO_L15NG14PWM舵机模拟信号
IO_L14NF16ECHO1超声波返回脉冲
IO_L14PF15TRIG1超声波发送脉冲
IO_L13NG16ECHO2超声波返回脉冲
IO_L13PH16TRIG2超声波发送脉冲

                   

工程如下:

 project_chaoshengbo.srcs中放的是.v文件和约束文件

双击project_chaoshengbo.xpr可打开工程

资源已上传,链接等审核后会放在文章中。