【数据采集】使用USB口作为trigger的发送接口

博主因研究需要从电脑引出trigger信号,考虑从USB口引出。因USB电平不适合作为trigger,而TTL电平更适合作为边沿触发的trigger信号,故采用USB转TTL方案,有现成硬件也可自制,后续只需编写控制软件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做研究需要从电脑引出一个trigger信号,但是从主板上引脚引出不太现实,所以考虑从USB口引出,记录一下。

USB口的引脚如下图所示,

由于USB的两个根数据线D+\D-使用的是差分信号表示01,更详细地说,对于USB2.0,D+比D-大200mV时为1,D-比D+大200mV时为0。因此USB电平不适合作为trigger。

考虑到TTL电平为单纯的高低电平信号,+5V等价于逻辑“1”,0V等价于逻辑“0”,因此更适合作为边沿触发的trigger信号。

USB转TTL有很多现成硬件,自己做也行

USB转TTLãUSB转串å£ãUSB转232çåºå«

这样trigger信号的方案设计和硬件准备就做完了,只需要写一个控制软件就行。

程序部分参考了https://download.youkuaiyun.com/download/qq_36696964/10780279,做了部分修改。

传输数据为1的时候采集图像如图所示:(起始位+数据位+停止位)

(突然传不了图,改天再传)

(还是传不了图,不写了0 0)

基于RP2040(Arduino框架)运行频率200Mhz,实现以发射脉冲后,以50Msps速率驱动AD9220读取一定数量数据。 设计两个pio状态机sm0,sm1,分频均设置为1。IO14负责发射单个100ns宽度的低电平,100ns宽度使用pio指令内置延时[]功能,然后IO14恢复高电平,由状态机sm0负责驱动,状态机sm0中增加同步标记,发射100ns低电平后,立刻启动状态机sm1开始读取数据。 状态机sm1驱动IO15作为pclk输出到ad9220工作时钟,rp2040读取12位数据读取脚是io0~IO11, sm1在IO15输出50mhz时钟pclk,涉及延时的使用pio内置延时 [],ad9220在pclk低电平开始自行采样,在上升沿高锁存数据,使用测设置功能,在pclk高电平期间状态机sm1并行读取io0~IO11的12位数据,并存入一个buff数组。 当一定数量(20000)数据被读取后,停止sm1 ,使用proce_data()函数处理。 IO13作为按钮btn1设计为低电平触发,使用内部上拉,按钮触发在主程序里运行,并软件消抖。按钮触发一次,运行一次发射脉冲、采集数据、处理和发送数据。IO16负责LED指示灯使用反馈触发状态。 请确认各个io功能使用,请进行dma优化,分别给出pio代码和arduino代码,复核pio代码,特别是在pclk高电平期间是否读取12位数据,符合功能要求。 并扩展优化: 添加双缓冲机制实现连续采样 使用PIO IRQ实现精确同步 实现数据校验机制 添加tinyUSB数据传输接口
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值