[STM32]

wifi通信延时问题

[复制链接]
2589|18
手机看帖
扫描二维码
随时随地手机跟帖
thy_1994|  楼主 | 2016-10-21 13:08 | 显示全部楼层 |阅读模式
场景是这样的:用的stm32f1加wifi模块,一个stm32负责数据采集并计算,量不大,通过wifi发给另一个stm32f1进行舵机控制。
现在发现:舵机控制延时比较严重,正常wifi延时会在100ms以内,可实际情况延时会达到半秒甚至1秒以上,已经明显感觉出卡顿了。
求助:有人做过类似的wifi通信实验吗?这种不正常的延时怎么解决?

相关帖子

thy_1994|  楼主 | 2016-10-21 13:10 | 显示全部楼层
补充说明下:wifi是一对二,两个stm32f1分别控制一个wifi往一个wifi上发数据

使用特权

评论回复
aozima| | 2016-10-21 13:13 | 显示全部楼层
WIFI在实时性上没法保证的。
紧要的事实不应该使用WIFI来传输。

使用特权

评论回复
thy_1994|  楼主 | 2016-10-21 13:25 | 显示全部楼层
aozima 发表于 2016-10-21 13:13
WIFI在实时性上没法保证的。
紧要的事实不应该使用WIFI来传输。

嗯 这个我知道。只是现在觉得延时时间长的离谱,应该是我处理方式不对的原因。想向这方面有经验的请教下

使用特权

评论回复
aozima| | 2016-10-21 18:38 | 显示全部楼层
thy_1994 发表于 2016-10-21 13:25
嗯 这个我知道。只是现在觉得延时时间长的离谱,应该是我处理方式不对的原因。想向这方面有经验的请教下 ...

几秒都是有可能的。

丢包,重传,乱序的比例太高了。

即使如此,依然可以达到比较高的带宽,可以看电影,但实时控制很渣。
即使你限定测试环境,包括电磁环境,但这环境随时都可能改变。

使用特权

评论回复
皈依| | 2016-10-22 08:33 | 显示全部楼层
如果你的wifi模块数据传输走的是服务器端的话那影响因素太多了,网速,服务器处理速度,wifi强度等等。
如果应用场景允许的话,可以把一个wifi模块设为sta模式,另外一个设置为ap,直连的话速度肯定很快
当然这样子性价比不如2.4G和蓝牙

使用特权

评论回复
thy_1994|  楼主 | 2016-10-23 18:42 | 显示全部楼层
皈依 发表于 2016-10-22 08:33
如果你的wifi模块数据传输走的是服务器端的话那影响因素太多了,网速,服务器处理速度,wifi强度等等。
如 ...

一个wifi模块是ap模式,另两个是sta模式,建立的tcp连接,连好好数据透传,效果并不理想,像我上面发的,延时很严重

使用特权

评论回复
thy_1994|  楼主 | 2016-10-23 18:43 | 显示全部楼层
aozima 发表于 2016-10-21 18:38
几秒都是有可能的。

丢包,重传,乱序的比例太高了。

可不可以理解为:平时用的wifi也是存在这么严重的延时?

使用特权

评论回复
皈依| | 2016-10-23 22:45 | 显示全部楼层
thy_1994 发表于 2016-10-23 18:42
一个wifi模块是ap模式,另两个是sta模式,建立的tcp连接,连好好数据透传,效果并不理想,像我上面发的, ...

这么差么?是那个牌子的wifi?建议试试UDP

使用特权

评论回复
thy_1994|  楼主 | 2016-10-24 09:56 | 显示全部楼层
本帖最后由 thy_1994 于 2016-10-24 11:15 编辑
皈依 发表于 2016-10-23 22:45
这么差么?是那个牌子的wifi?建议试试UDP

有人wifi模块,还有网上很多的esp8266wifi模块(8个引脚的那种),udp我也试过,也不大好。
另外,数据在sta模块上已经转换成pwm脉宽的数字量,通过wifi发到ap模块,单片机的usart接收到以后直接就给舵机用了,这种方式有没有问题?不带帧头帧尾,只判断数据长度,来辨认是哪个sta发过来的数据。

使用特权

评论回复
besovideo| | 2016-10-24 10:41 | 显示全部楼层
用UDP会好一些,检查软件做好丢包重传工作。

使用特权

评论回复
thy_1994|  楼主 | 2016-10-24 11:18 | 显示全部楼层
besovideo 发表于 2016-10-24 10:41
用UDP会好一些,检查软件做好丢包重传工作。

直接用的wifi模块,丢包重传是模块自己处理的是吗?单片机要怎么判断是否丢包?

使用特权

评论回复
皈依| | 2016-10-24 21:35 | 显示全部楼层
thy_1994 发表于 2016-10-24 09:56
有人wifi模块,还有网上很多的esp8266wifi模块(8个引脚的那种),udp我也试过,也不大好。
另外,数据在s ...

一般8266内部都是一个定时器扫描接收到的数据,开发的不是很尽如人意。。。
延时会有,不会不会那么大。你可以分段试试主要延时是在云端到sta,sta到ap,ap到MCU,还是MCU到舵机
另外你如果是做产品的话不建议这么简单的数据校验。。。
起码包头,长度,结尾校验要有,这样的话你将来拓展设备也方便开发

使用特权

评论回复
xydzx| | 2016-10-25 09:45 | 显示全部楼层
辛苦!嵌入式学习3026827905

使用特权

评论回复
besovideo| | 2016-10-25 16:11 | 显示全部楼层
thy_1994 发表于 2016-10-24 11:18
直接用的wifi模块,丢包重传是模块自己处理的是吗?单片机要怎么判断是否丢包? ...

这个丢包重传机制不复杂,实现比较复杂,就是每个包加序号,而且包的大小要注意,
设定一个超时,超时内的丢包都要重传过来,超出去的就丢弃了。

使用特权

评论回复
besovideo| | 2016-10-25 16:12 | 显示全部楼层
thy_1994 发表于 2016-10-24 11:18
直接用的wifi模块,丢包重传是模块自己处理的是吗?单片机要怎么判断是否丢包? ...

UDP就是要自己代码做,这个丢包重传机制不复杂,实现比较复杂,就是每个包加序号,而且包的大小要注意,
设定一个超时,超时内的丢包都要重传过来,超出去的就丢弃了。

使用特权

评论回复
thy_1994|  楼主 | 2016-10-25 20:21 | 显示全部楼层
皈依 发表于 2016-10-24 21:35
一般8266内部都是一个定时器扫描接收到的数据,开发的不是很尽如人意。。。
延时会有,不会不会那么大。 ...

单独测试过舵机,手头的这种舵机,小角度动还好,大角度动的话响应时间加动作时间,这个间隔就有点长了,半秒以上,能明显感觉出来。sta到ap和ap到MCU没有测试过。

我的数据是20ms发送一次,只要动作不快,20ms动作角度并不大,舵机的反应应该是跟的上的。

实际现象是:大概两三秒的时间,效果很好,突然舵机不动了,就像没接收到数据,然后又突然到达目标位置,继续流畅动作,周而复始,整体显得很不流畅。

使用特权

评论回复
thy_1994|  楼主 | 2016-10-25 20:27 | 显示全部楼层
besovideo 发表于 2016-10-25 16:12
UDP就是要自己代码做,这个丢包重传机制不复杂,实现比较复杂,就是每个包加序号,而且包的大小要注意,
...

这个难度有点大。我指的试过UDP,只是建立了UDP连接,并没有自己写关于两边通讯确保数据完整接收的程序,怪不得效果并不理想。

使用特权

评论回复
皈依| | 2016-10-25 21:08 | 显示全部楼层
thy_1994 发表于 2016-10-25 20:21
单独测试过舵机,手头的这种舵机,小角度动还好,大角度动的话响应时间加动作时间,这个间隔就有点长了, ...

突然不动了。要查明白原因 到底是没接到数据还是舵机本身的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

31

帖子

1

粉丝