基于FPGA的超声波避障小车,利用ego1的100HZ时钟,我们可以自己定义不同占空比的PWM来控制电机的转速和舵机的角度,我们可以通过自己写计时器获得超声波来回所需的时间来测量距离,根据距离的远近返回来控制电机的转速以及舵机转动的角度,我们也可以加上openmv识别色块的功能,来模拟小车识别红绿灯控制小车的出发和停止。结合以上描述,我们可以通过FPGA来实现一个颜色控制启动和停止的利用超声波测距来避障的小车。如下图
根据项目任务要求,我们可以大致把目标任务分为以下几点:
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_L18N | G17 | Go1 | 电机模拟信号 |
IO_L18P | H17 | Go2 | 电机模拟信号 |
IO_L17N | J13 | Go3 | 电机模拟信号 |
IO_L17P | K13 | Go4 | 电机模拟信号 |
IO_L16N | D17 | ECHO | 超声波返回脉冲 |
IO_L16P | E17 | TRIG | 超声波发送脉冲 |
IO_L15N | G14 | PWM | 舵机模拟信号 |
IO_L14N | F16 | ECHO1 | 超声波返回脉冲 |
IO_L14P | F15 | TRIG1 | 超声波发送脉冲 |
IO_L13N | G16 | ECHO2 | 超声波返回脉冲 |
IO_L13P | H16 | TRIG2 | 超声波发送脉冲 |
工程如下:
project_chaoshengbo.srcs中放的是.v文件和约束文件
双击project_chaoshengbo.xpr可打开工程
资源已上传,链接等审核后会放在文章中。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21718.html