基于ar0134摄像头的FPGA工程
-
工程简介:
通过高速摄像头ar0134拍摄流水线上运动物体的一帧画面,显示到VGA,以便用户观察物体状态。 -
系统结构与信号处理流程:
1.流水线主轴接编码器;
2.编码器信号由单片机控制板采集,通过用户设定稍作处理;
3.单片机控制板将8路触发信号分别发送到8路FPGA控制板;
4.FPGA控制板根据触发信号触发摄像头拍照,显示到显示器上。 -
硬件选型:
编码器:欧姆龙1000线差分信号输出;
单片机:stm32f407;
FPGA:核心板采用Cyclone IV E,Flash采用W25Q16;
摄像头:ar0134彩色; -
单片机系统功能:
能接收编码器输入信号,得知主轴转动的位置;
当主轴转动到用户指定的位置,输出一个脉冲信号给FPGA,触发拍照;输出需要8~12路;
通过增减按钮设定上述位置;每一路对应一组增减按钮。 -
FPGA系统功能:
接收单片机的输出信号,触发摄像头拍照;
将画面显示到VGA。 -
设计思路:
电路上,单片机通过光耦低电平输出到fpga引脚,fpga收到后assign到ar0134的trigger脚,fpga底板触发脚使用P沟道mos管与ar0134连接,以给出足够触发电流。
程序上,在单片机中断中,依次比较8路设定,当达到某路通道设定的次数后,给此通道输出低电平,进行拍照,计数到一圈总次数的一半时,再拉高,为下一次触发做准备。 -
遇到的问题:
-
快速运动时画面模糊;
减少曝光时间,当前设为20,问题解决。 -
ar0134在触发拍照模式,单片机给出触发信号,画面会出现错位;
通过在工程里设置状态机得到解决。 -
单片机收不到编码器Z、A相中断信号。
发现个别编码器存在质量问题,输出波形难看,信号弱,更换编码器。
中断程序处理尽可能简短。问题解决。 -
fpga烧写时,将sof文件和elf文件合并成jic文件烧入,nios ii部分不运行;
发现epcs部分引脚未设置连接,设置后问题解决。 -
设计elf部分时,欲直接用eclips里的flash program烧写,结果提示flash芯片缺少layout data;
根据网上搜到的方案,将w25q16的信息写入到烧写说明里,可以烧写。但是断电重启后程序不运行。
该问题未能解决。目前采用jic文件烧写方式,烧写正常,后期考虑更换烧写芯片。 -
拍照在某些频率区域时画面抖动
单片机源程序将判断延时时间是否达到的语句放到while循环中,后将此部分代码改到中断中,有改善但并不彻底。后经示波器测量,发现在单片机一次波形触发中FPGA发出头尾两次信号给摄像头,更改FPGA代码后解决这个问题。 -
如果先开启单片机以发送周期触发信号,再给fpga上电,则画面会错位,并且一直保持这种错位位置
原因是刚上电时,niosii通过iic对ar0134进行配置,导致ar0134在输出数据的时候节奏被打乱;
通过fpga上电后进行适当延时解决该问题。 -
画面下方有一条彩线;
设置ar0134的每帧行数为990解决该问题。 -
自己画的ar0134摄像头板IIC通信不成功;
这个问题很奇怪,一开始是出现时通时断不稳定的现象,后来焊接的基本不通了。对照购买的模块,电路、PCB布局基本一致,替换2个电源芯片后仍然有问题。目前重新用4层板制作,用FPC软排线与FPGA板相连,正在测试。