搜索
bottom↓
回复: 27

请教可否DMA+定时器等而不要FPGA完成以下,可行帮搭个配置代码框架

[复制链接]

出0入475汤圆

发表于 2024-1-4 11:11:01 来自手机 | 显示全部楼层 |阅读模式
400汤圆
本帖最后由 1a2b3c 于 2024-1-4 11:19 编辑

1.    原始信息是一个不规整的串行数据流,从一个IO口输入。正常情况下,就只有0.5us和1us两种宽度的连续“bit”,但是实际会有更宽或者更窄的无效bit脉冲出现,需要过滤掉超过一定范围的“bit”,比如小于0.3us,大于1.2us。出现宽度不合适的bit则放弃当前位置继续等待新的bit信息到来。当一个bit变宽后,挨着的一个bit肯定会变窄,也就是说bit宽度误差不会累积,总的波特率永远是2Mbps,这点我觉得可能特别重要,需要说明下。

2.    需要自动从这种源源不断的bit流中识别出特定的16bit“同步字”,识别到同步字后,自动采集30字节后续内容作为一帧数据信息,采完中断通知cpu或者存储到fifo中,由cpu自己去查询取数据。

3.    第二步中仍然遵循上述第一步宽度判断,如果不好处理,就放弃这个判断,改为只对同步字进行宽度和数值判断。同步字为 0xA140(MSB)。同步字不会出现在数据信息中,所以也就不用考虑数据信息中出现同步字后怎么处理的问题。
4. 第二步完成一帧后马上回到第一步,因为可能会有另外一帧有效信号来了。有效帧是随机的,不知道啥时候会有。bit流认为永远都是有的,哪怕它一直是高/低电平或者无效的噪声。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出1310入193汤圆

发表于 2024-1-4 11:26:00 | 显示全部楼层
理论上面 捕捉去实现功能   脉冲宽度<设定值直接滤波掉  高于的逻辑判定   不过    0.5us和1us两种宽度  要使用f7吧  

出1310入193汤圆

发表于 2024-1-4 11:28:04 | 显示全部楼层
处理芯片的中断进出耗时  时间  要考虑先

出0入475汤圆

 楼主| 发表于 2024-1-4 11:42:04 | 显示全部楼层
lb0857 发表于 2024-1-4 11:28
处理芯片的中断进出耗时  时间  要考虑先
(引用自3楼)

你是说直接用单个bit中断来进行吗?
如果是可能就偏离了我的初衷,我是想这些一旦设定好以后能自动后台(DMA一类)进行,当然可以适当参与。如果不是,那就是我还没有理解到你的意思。

我粗略的想到感觉是可以通过捕获本身来进行宽度过滤,甚至可以多个定时器多级进行,然后完了的有效bit又怎么给处理一下,比如收集够16bit了,cpu参与去判断下是否同步头?

概念还很朦胧,就是因为思路和芯片的一些功能没有掌握所以才来求助,看看有没有人能直接搞定

出40入518汤圆

发表于 2024-1-4 11:52:29 | 显示全部楼层
16bit“同步字” 的宽度也会变吗?这个应该是固定的吧?
这个处理速度要求好像也不高,只要没有什么打断、稍微够快的处理器都能处理好吧

出0入475汤圆

 楼主| 发表于 2024-1-4 12:02:12 | 显示全部楼层
智涅 发表于 2024-1-4 11:52
16bit“同步字” 的宽度也会变吗?这个应该是固定的吧?
这个处理速度要求好像也不高,只要没有什么打断、 ...
(引用自5楼)

实际上是所有的bit都会有同样的问题,就是说其宽度(不管是高电平还是低电平)都可能会有变化,同步头字也一样,无非是bit流中出现的一个特殊值而已。
但是其中的宽度误差值不会累积:比如有一个字节 0x55,其中高电平值都变宽了,变成0.6us了,那么这个字节内的低电平肯定会相应的变窄到0.4us。那么整个字节的长度仍然是4us,
哦,还有一点忘了说明,就是除了同步字后的信息数据中,所有的高低电平bit实际上是会抵消的,相当于是那个叫啥归零码的意思(我自己估计的,不一定对),也就是一个字节中1的bit数量和0的bir数量是一样的,且是交替出现的,不会有3个以上的连续0或者1,这样才可以是1变宽后0肯定会变窄,保持总的平均波特率2Mbps不变。

出0入475汤圆

 楼主| 发表于 2024-1-4 12:08:05 | 显示全部楼层
智涅 发表于 2024-1-4 11:52
16bit“同步字” 的宽度也会变吗?这个应该是固定的吧?
这个处理速度要求好像也不高,只要没有什么打断、 ...
(引用自5楼)

光说处理的确问题不大,我之前就是直接用了一个芯片来专门做这个事情,采用单bit中断,中断中判断bit宽度以及其它,但是这样芯片就啥其它事情都没法做了,
现在想看看能不能后台处理,cpu少量参与关键点协助,把芯片解放出来做点其他事情,

出1310入193汤圆

发表于 2024-1-4 12:15:40 来自手机 | 显示全部楼层
捕获本身来进行宽度过滤,
对,捕捉就是干这个事情哦。

甚至可以多个定时器多级进行,然后完了的有效bit又怎么给处理一下,比如收集够16bit了,cpu参与去判断下是否同步头?

目前接触到芯片没有这样功能,其他坛友看看。

出0入475汤圆

 楼主| 发表于 2024-1-4 12:23:32 | 显示全部楼层
lb0857 发表于 2024-1-4 12:15
捕获本身来进行宽度过滤,
对,捕捉就是干这个事情哦。

(引用自8楼)

好的,谢谢指导

再看看有没有哪位可以想出来一个巧妙的思路能实现。
否则还是只有保持fpga了,之前很多人说不知道啥地方会用到fpga,其实很多跟时序相关的地方普通mcu还真没法搞

出0入0汤圆

发表于 2024-1-4 12:33:50 | 显示全部楼层
以前做过纯门电路实现的红外遥控器,里面也涉到头码,尾码。感觉你这个用门电路的话就是一个反向操作。

出0入475汤圆

 楼主| 发表于 2024-1-4 12:44:41 来自手机 | 显示全部楼层
风速241 发表于 2024-1-4 12:33
以前做过纯门电路实现的红外遥控器,里面也涉到头码,尾码。感觉你这个用门电路的话就是一个反向操作。 ...
(引用自10楼)

门电路肯定好处理,前面我说fpga已经搞定了的。无非就是门电路嘛
这里难点是脉冲宽度过滤,然后数据自动获取。
要利用mcu的一些外设特性来巧妙实现,需要一个熟悉mcu的外设特点,二是要综合思路。

出40入518汤圆

发表于 2024-1-4 12:49:12 | 显示全部楼层
宽度变化大的话,即使有现成的解码芯片也有可能出错
DMA或者其它芯片内置的外围应该都不好解决,帧头和帧内数据还不一样编码?,还是加个一块钱单片机自行解决吧

出0入475汤圆

 楼主| 发表于 2024-1-4 12:55:06 来自手机 | 显示全部楼层
智涅 发表于 2024-1-4 12:49
宽度变化大的话,即使有现成的解码芯片也有可能出错
DMA或者其它芯片内置的外围应该都不好解决,帧头和帧内 ...

(引用自12楼)

😂 好难啊
宽度值差太大肯定就已经是无效的了,是需要丢弃的

出40入518汤圆

发表于 2024-1-4 13:49:09 | 显示全部楼层
感觉不难呀,发点图出来更好地说明一下吧。
锁相,位宽判断,帧头识别
根据实际情况调整1码和0码的判断阈值等等,看具体情况和需求调整一下

出0入475汤圆

 楼主| 发表于 2024-1-4 13:51:44 来自手机 | 显示全部楼层
智涅 发表于 2024-1-4 13:49
感觉不难呀,发点图出来更好地说明一下吧。
锁相,位宽判断,帧头识别
根据实际情况调整1码和0码的判断阈值 ...

(引用自14楼)

我的意思是说我现在这个想法好难
上面的处理本身无论是fpga还是专门用一个mcu来实现均已完成:)
这个帖子的目的就是看看能不能提高mcu效率

出0入0汤圆

发表于 2024-1-4 13:55:12 | 显示全部楼层
楼主发点时序图出来看看呗,看那些情况下需要规避,方便理解

出0入0汤圆

发表于 2024-1-4 14:13:07 | 显示全部楼层
个人想法:先在数据变化的沿上做锁相,然后按两种宽度分别采样,采样放到缓冲区(多缓冲区)里,定期对缓冲区数据进行帧头检索。

FPGA最适合做这个了。

出0入228汤圆

发表于 2024-1-4 14:40:40 | 显示全部楼层
本帖最后由 wxws 于 2024-1-4 14:42 编辑

有点像是用mcu软解码RF遥控器信号,杂波多得要死,但只要MCU不是太累(处理很多其他业务),就应该没啥问题吧

或者简单点:直接用个小mcu专门解码这信号,再通过串口给主mcu。
肯定是用不着fpga的。

出0入475汤圆

 楼主| 发表于 2024-1-4 14:46:21 来自手机 | 显示全部楼层
wxws 发表于 2024-1-4 14:40
有点像是用mcu软解码RF遥控器信号,杂波多得要死,但只要MCU不是太累(处理很多其他业务),就应该没啥问题 ...
(引用自18楼)

是的,输入的bit流可以理解为就是普通的遥控信号,这样酒方便理解了,大部分人或多或少都了解,只是也没有遥控器那样多如牛毛的杂草罢了

出0入79汤圆

发表于 2024-1-4 15:16:02 | 显示全部楼层
我做过一个小产品,连续测量几个 脉冲,脉冲高电平时间大约20us ,低电平时间 1ms 到 10ms 不等,刚开始用单片机 输入捕获搞,模拟发脉冲是没问题,但实际使用时 现场变频器干扰太大,就测不准了,误差时大时小。不过我这精度要求不高也能用。 后来改成FPGA做,基本不抖。

出0入8汤圆

发表于 2024-1-4 15:27:01 | 显示全部楼层
楼主可以看看nxp家的mcu,里面有个FlexIO,可以实现自定义协议,不知道能不能帮上忙

出0入0汤圆

发表于 2024-1-4 23:12:22 | 显示全部楼层
现在国产fpga已经白菜价了,低引脚数的fpga价格只要5块钱左右,和单片机差不多,既然fpga已经搞定了,就不要再折腾了。

出0入8汤圆

发表于 2024-1-4 23:56:18 来自手机 | 显示全部楼层
LZ,这个用一片STM32G030应该可以搞定,MCU还可以做点其他事情。方法:利用一个timer一条input capture channel pin就够,设置成dma pwm capture功能,在后台不断把波形(0.5/1us)捕捉进ring buffer,前台MCU读取ring buffer波形数据进行处理。
以STM32G030 64MHz的速度,timer捕捉0.3us波形的解析度是19 ticks,不是太高但由于你的波形误差不会累积,这就比较好处理

出0入115汤圆

发表于 2024-1-5 08:28:29 | 显示全部楼层
看楼主的描述要处理0.5us的脉冲,采集 +cpu处理<0.5us完成,要对于单片机纯软件处理,基本很艰难,cpu基本被中断挤爆了,而且还有可能丢包情况

出0入475汤圆

 楼主| 发表于 2024-1-5 11:51:39 | 显示全部楼层
三年模拟 发表于 2024-1-5 08:28
看楼主的描述要处理0.5us的脉冲,采集 +cpu处理
(引用自24楼)

你没有看明白我的意思,或者我没有说清楚
如果单纯mcu只做这一件事情,早就完成了的,而且没有任何问题。
现在是想把mcu解放出来,看看能不能利用一些特殊一点的mcu外设功能达到”后台处理“的目的,这样mcu可以同时兼顾其它功能。
现在倒不是说节约芯片少一个ic钱的事,是其它原因,所以看看能不能都塞到一个mcu完成

出0入475汤圆

 楼主| 发表于 2024-1-5 11:55:32 | 显示全部楼层
smallwood 发表于 2024-1-4 23:56
LZ,这个用一片STM32G030应该可以搞定,MCU还可以做点其他事情。方法:利用一个timer一条input capture cha ...
(引用自23楼)

说白了就是我不会搭建这些外设的综合利用,所以我标题或者发这个帖子的目的就是看看谁能帮我把框架代码搭好,我自己去处理应用

也就是构建那些初始化函数,比如捕获啊,然后怎么捕获的数据自动进去fifo啊,然后又怎么怎么,甚至是不是还有哪里有一种功能可以自动匹配数据值(同步头字)岂不是更完美,
大概就是这些意思,如果你可以帮到我,就多花几分钟搭建一个框架嘛,F1,F23,F4,F7芯片无所谓,

出0入0汤圆

发表于 2024-1-5 12:30:47 | 显示全部楼层
看错了

出0入8汤圆

发表于 2024-1-5 19:29:16 来自手机 | 显示全部楼层
1a2b3c 发表于 2024-1-5 11:55
说白了就是我不会搭建这些外设的综合利用,所以我标题或者发这个帖子的目的就是看看谁能帮我把框架代码搭 ...
(引用自26楼)

stm32cubemx软件里面有timer用作dma pwm capture的例程,你参考一下,应该不难
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 19:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表