打印
[技术讨论]

如何10ms内实现主单片机对33个从单片机完成通信

[复制链接]
682|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
阿man|  楼主 | 2022-10-19 08:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
gx_huang| | 2022-10-19 11:23 | 只看该作者
这没法回答,没有条件描述,距离,是否需要应答

使用特权

评论回复
板凳
xiaofei558008| | 2022-10-19 13:23 | 只看该作者
10ms
33个
每个设备10/33ms,303us一个周期,假如数据量一样多再除以2,来回应答;

也就是150us 需要传输20字节,波特率需要至少150us/(20 * 10bit) = 0.75us/bit = 1.3Mbps;
CANFD,RS485,可以看看
推荐max13488(16Mbps自带换向功能),max14840E(3.3v 40Mbps)
当然,STM32可以支持好几M的串口波特率,看你用啥单片机,和楼上说的一样,距离是关键;这么高波特率,距离就难以保证了;

如果速度还不够,建议直接用以太网,100M还是很容易实现的;加个36**换机一下子解决;成本也就上去了;

使用特权

评论回复
评论
zyj9490 2022-10-19 14:25 回复TA
1.3M,太完美了,只少要打过6折,2M差不多。原因,线,干扰,程序。 
地板
QuakeGod| | 2022-10-19 13:58 | 只看该作者

这是1Mbps 的485 通讯,16个字节数据量。
每个子站轮询时间基本上在300-400uS。和楼上估计差不多。
7个子站,循环周期3mS. 如果33个子站,那么循环时间要15mS。
这样的话,想要10mS之内的循环时间,需要至少1.5Mbps 的波特率才行。
这个1.5Mbps的485,通讯距离在几十米是没问题的。
另外,单片机用的STM32系列,因为数据速率很高,对单片机的处理能力要求也很高,51系列根本处理不过来。

使用特权

评论回复
5
oufuqiang| | 2022-10-19 15:29 | 只看该作者
20字节,33从机=660字节,加上起始位,停止位,每字节10位,总共6600位,10ms一次,每秒660000bps,压得紧点,800kbps应该也够。
注意发送一个回传开始请求帧,从机排队回复就好了,不用一问一答。

使用特权

评论回复
6
xch| | 2022-10-19 16:08 | 只看该作者
通信距离多远?

使用特权

评论回复
7
descope| | 2022-10-19 16:36 | 只看该作者
没必要挑战难度,可以考虑带多串口的MCU,可以考虑MCU树性通信,变串行为并行;

使用特权

评论回复
8
阿man|  楼主 | 2022-10-19 17:19 | 只看该作者
xch 发表于 2022-10-19 16:08
通信距离多远?

在一个PCB内,距离20厘米左右吧

使用特权

评论回复
9
coody| | 2022-10-19 17:27 | 只看该作者
阿man 发表于 2022-10-19 17:19
在一个PCB内,距离20厘米左右吧

那应该用SPI。

使用特权

评论回复
10
圣骑士by| | 2022-10-19 17:31 | 只看该作者
SPI +1

使用特权

评论回复
11
xch| | 2022-10-19 20:15 | 只看该作者
阿man 发表于 2022-10-19 17:19
在一个PCB内,距离20厘米左右吧

如果每个单片机串口都支持跑 33x20X10 bps 不丢数据 ,使用Token-Ring即可.

使用特权

评论回复
12
zzele| | 2022-10-20 06:47 | 只看该作者
估计是假想题目

使用特权

评论回复
13
William1994| | 2022-10-20 08:31 | 只看该作者
QuakeGod 发表于 2022-10-19 13:58
这是1Mbps 的485 通讯,16个字节数据量。
每个子站轮询时间基本上在300-400uS。和楼上估计差不多。
7个子 ...

8051用汇编中断实现的ring_buffer DMA(xdata 256字节接收缓冲区,位置整256对齐才能用单周期的movx @r0指令),跑3Mbps一点问题没有。
CH341系列的最高就是3Mbps。
测试极限,MCU主频降低到16MHz,串口3Mbps接收没有问题,发送帧长了之后CH341的发送缓冲区满了,会丢。问FAE,说发送的流控内部是空的,他们假设MCU不会发这么快而且发这么多,USB的极限12Mbps和电脑主控芯片及其HUB拓扑结构都有关。接收的流控是完全没有问题的。

串口3Mbps,加上stop位占1bit,对应的中断频率大概是300kHz,也就是3.3us。在16MHz的低端8051里面大概是50条汇编指令的时间。10条汇编完成DMA的功能,大概还有80%的CPU时间留给应用程序。

使用特权

评论回复
14
William1994| | 2022-10-20 08:36 | 只看该作者
楼主的这个方案,建议换个IO多的MCU,一个搞定。
如果是分离模块,一定要主从结构如果是IO不够的话,建议加个CPLD或者74LS系列的IO扩展芯片扩展。

By the way,在我们美国,现在主从这个词已经禁用了。因为涉及种族歧视。要用控制器和目标机。 从去年开始ITU(固定串口的协会),以太网,I2C等等标准都已经慢慢的修订过来了。,文明发言。谢谢。

使用特权

评论回复
15
rocHP| | 2022-10-20 08:56 | 只看该作者
或者你可以并行发送数据,

使用特权

评论回复
16
hjl2832| | 2022-10-20 08:57 | 只看该作者
同一个PCB,不明白为什么要用串口,用SPI不香吗?

使用特权

评论回复
17
xl071310| | 2022-10-20 11:00 | 只看该作者
这种情况,最好的办法是直接用IO口高低电平解析,主单片机通过高低电平长度来打包数据(设置一个定时器,频率为波特率的1/7 或 1/9)。 在这个定时器中断里面,把33路IO口都读一遍,进而封装打包成一个字节,

使用特权

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

本版积分规则

6

主题

31

帖子

1

粉丝