2048浏览
查看: 2048|回复: 5

PYNQ-Z2开发板——制作巡线小车

[复制链接]
本帖最后由 云天 于 2021-10-4 13:05 编辑

IMG_20211004_102852.jpg
IMG_20211004_102749.jpg
PYNQ-Z2

PYNQ-Z2是一款FPGA开发板,它以ZYNQ  XC7Z020 FPGA为核心,利用ZYNQ中的可编程逻辑和Arm处理器的优势可以构建强大的嵌入式系统,PYNQ的开源框架可以使嵌入式编程用户在无需设计可编程逻辑电路的情况下充分发挥Xilinx ZYNQ SoC的功能,使用Ethernet作为PC和board之间的通讯方式,这块开发板除支持传统ZYNQ开发方式外,还可支持Python进行SoC编程,并且代码可直接在PYNQ-Z2上进行开发和调试。可编程逻辑电路以硬件库的形式导入并且可以通过API编程,这种方式基本上与软件库的导入和编程方式相同。

PYNQ-Z2配备有以太网,HDMI输入/输出,MIC输入,音频输出,Arduino接口,树莓派接口,2个Pmod,用户LED,按钮和开关。  兼容树莓派连接器、Arduino屏蔽连接器以及Pmod连接器可以支持多种配件拓展,同时这些接口也可以用作GPIO。  

IMG_20211004_102917.jpg IMG_20211004_102927.jpg IMG_20211004_102937.jpg IMG_20211004_102904.jpg

PYNQ 是 Python On Zynq 的缩写,它是一个软件开发框架,指导硬件层、驱动层和应用层之间的接口设计,PYNQ框架通过高层次的封装,将底层硬件FPGA实现细节与上层应用层的使用脱耦,让上层应用开发者通过Python编程就可以调用FPGA模块。其适用于大面积的设计者和开发者,能帮助用户实现多种高性能的嵌入式应用,包括:并行硬件执行,高帧率视频处理,硬件加速算法,实时信号处理,高带宽IO,低延时控制。

IMG_20211004_102808.jpg

PYNQ结合了ZYNQ与Python的全部优势,可结合DF arduino扩展板,树莓派扩展板使用;可广泛应用于机器学习、研究和原型制造等领域。


硬件资源
PYNQ包括有
① 选择板子的启动方式,分别从JTAG、QSPI Flash和SD卡启动。
JTAG启动方式:通过Micro-USB接口连接到电脑上,下载bit文件和elf文件,进行在线调试;
Flash启动方式:将程序烧录到Flash中,断电后从Flash中开始运行程序;
SD启动方式:将镜像文件拷贝到SD卡中,从SD卡中读取运行程序。
② 选择电源供电模式,分为从USB供电运行和从外部电源供电运行。
③SD卡配置,PYNQ从SD卡启动,SD卡中配置有启动镜像文件,需要有一块空白的SD卡、读卡器和配置教程

启动步骤
将配置好的SD卡放入SK卡槽;
将①跳线帽连接到SD卡启动,②跳线帽连接到USB供电;
连接Micro USB和网线,USB线作为电源线和UART串口线,网线作为系统传输线;
将电源开关拨到ON位置;
现象:红色LED亮起表示板上有电源。几秒钟后,黄色/绿色LED亮起,表示板上设备正常运行。一分钟后两个蓝色LED和四个黄色/绿色 LED同时闪烁,之后蓝色LED关闭,而黄色/绿色发光二极管常亮,系统现已启动并可供使用。
打开web浏览器连接到Jupyter Notebook(http://192.168.2.99),登录账号密码为xilinx。
也可以在主机上访问,打开windows资源管理器,键入“ \\192.168.2.99\xilinx ”,登录账号密码为xilinx。
【巡线】
IMG_20211004_102500.jpg IMG_20211004_102503.jpg
1、加载overlay
  1. from pynq.overlays.base import BaseOverlay
  2. from pynq_peripherals import ArduinoDIGILENTGroveAdapter, PmodGroveAdapter
  3. import time
  4. base = BaseOverlay('base.bit')
复制代码
Overlay(硬件库)是可编程/可配置的 FPGA 设计,可将用户应用程序从 Zynq 的处理系统扩展到可编程逻辑。

2、Adapter配置
  1. adapter_A = PmodGroveAdapter(base.PMODA, G4='geared_motor')
  2. adapter_B = PmodGroveAdapter(base.PMODB, G4='geared_motor')
  3. arduino_adapter = ArduinoDIGILENTGroveAdapter(base.ARDUINO, G6='grove_line_finder',G5='grove_line_finder',G7='grove_usranger')
复制代码
PYNQ 外设的驱动程序和Jupyter Notebook是开源的。
您可以忽略传感器电路细节,通过简单地操作 python 对象来实现传感器数值的读取。
3、定义电机与传感器
  1. right_motor = adapter_A.G4
  2. left_motor = adapter_B.G4
  3. right_motor.backward()
  4. left_motor.backward()
  5. right_motor.set_speed(0)
  6. left_motor.set_speed(0)
复制代码
电机设置前进方向:motor.forward()
将方向设置为向后:motor.backward()
设置速度:motor.set_speed(10)
有效的速度值是从 0 到 100
  1. left_line_finder = arduino_adapter.G5
  2. right_line_finder = arduino_adapter.G6
  3. usranger = arduino_adapter.G7
复制代码
传感器
4、电机控制函数
  1. def stop():
  2.     left_motor.set_speed(0)
  3.     right_motor.set_speed(0)
  4.     left_motor.backward()
  5.     right_motor.backward()
  6. def left_forward(speed):
  7.     left_motor.forward()
  8.     left_motor.set_speed(speed)
  9. def right_forward(speed):
  10.     right_motor.forward()
  11.     right_motor.set_speed(speed)
  12.    
  13. def left_backward(speed):
  14.     left_motor.backward()
  15.     left_motor.set_speed(speed)
  16. def right_backward(speed):
  17.     right_motor.backward()
  18.     right_motor.set_speed(speed)   
  19.    
  20. def forward(speed):
  21.     right_forward(speed)
  22.     left_forward(speed)
  23. def backward(speed):
  24.     right_backward(speed)
  25.     left_backward(speed)
  26. def turn(speed_left,speed_right):
  27.     right_forward(speed_left)
  28.     left_forward(speed_right)
  29. flag=0
复制代码
5、主程序
  1. while 1:
  2.     distance=usranger.get_distance()
  3.     if distance>15:
  4.         left_line=left_line_finder.line_found()
  5.         right_line=right_line_finder.line_found()
  6.         if not(left_line) and not(right_line):
  7.             forward(30)
  8.         elif not(left_line) and right_line:
  9.             flag=1
  10.             turn(20,30)
  11.         elif left_line and not(right_line):
  12.             flag=2
  13.             turn(30,20)
  14.         elif flag==1:
  15.             turn(20,40)
  16.         elif flag==2:
  17.             turn(40,20)
  18.     else:
  19.         stop()
复制代码
【演示视频】


大湿  学徒

发表于 2021-10-14 23:54:37

好耶好耶好耶
回复

使用道具 举报

李臻飏  学徒

发表于 2021-10-16 17:09:22

厉害厉害
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-2-3 11:00:39

厉害厉害厉害!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-2-3 11:01:00

点赞点赞点赞!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-2-3 11:01:20

6666666666
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail