如何10ms内实现主单片机对33个从单片机完成通信
如何10ms内实现主单片机对33个从单片机完成通信,每个从单片机的数据量20字节。 这没法回答,没有条件描述,距离,是否需要应答 10ms33个
每个设备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**换机一下子解决;成本也就上去了;
这是1Mbps 的485 通讯,16个字节数据量。
每个子站轮询时间基本上在300-400uS。和楼上估计差不多。
7个子站,循环周期3mS. 如果33个子站,那么循环时间要15mS。
这样的话,想要10mS之内的循环时间,需要至少1.5Mbps 的波特率才行。
这个1.5Mbps的485,通讯距离在几十米是没问题的。
另外,单片机用的STM32系列,因为数据速率很高,对单片机的处理能力要求也很高,51系列根本处理不过来。
20字节,33从机=660字节,加上起始位,停止位,每字节10位,总共6600位,10ms一次,每秒660000bps,压得紧点,800kbps应该也够。
注意发送一个回传开始请求帧,从机排队回复就好了,不用一问一答。
通信距离多远? 没必要挑战难度,可以考虑带多串口的MCU,可以考虑MCU树性通信,变串行为并行; xch 发表于 2022-10-19 16:08
通信距离多远?
在一个PCB内,距离20厘米左右吧
阿man 发表于 2022-10-19 17:19
在一个PCB内,距离20厘米左右吧
那应该用SPI。 SPI +1 阿man 发表于 2022-10-19 17:19
在一个PCB内,距离20厘米左右吧
如果每个单片机串口都支持跑 33x20X10 bps 不丢数据 ,使用Token-Ring即可.
估计是假想题目 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时间留给应用程序。 楼主的这个方案,建议换个IO多的MCU,一个搞定。
如果是分离模块,一定要主从结构如果是IO不够的话,建议加个CPLD或者74LS系列的IO扩展芯片扩展。
By the way,在我们美国,现在主从这个词已经禁用了。因为涉及种族歧视。要用控制器和目标机。 从去年开始ITU(固定串口的协会),以太网,I2C等等标准都已经慢慢的修订过来了。,文明发言。谢谢。 或者你可以并行发送数据,
同一个PCB,不明白为什么要用串口,用SPI不香吗? 这种情况,最好的办法是直接用IO口高低电平解析,主单片机通过高低电平长度来打包数据(设置一个定时器,频率为波特率的1/7 或 1/9)。 在这个定时器中断里面,把33路IO口都读一遍,进而封装打包成一个字节,
页:
[1]