搜索
bottom↓
回复: 43

请教高人用一片CPLD能扩展50个个串口吗?

[复制链接]

出0入0汤圆

发表于 2008-8-5 14:11:07 | 显示全部楼层 |阅读模式
一个项目串口需求量大的吓人,要用50个,其中49个只接收,单向就可以了,用一片CPLD能做出来吗,我没有用过CPLD,请教各位,能实现吗?如果能实现不知道难度怎么样?如果不能有没有什么好的办法呀,请指教,先谢了!

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入4汤圆

发表于 2008-8-5 15:01:41 | 显示全部楼层
CPLD是不可能的: 里面的D触发器远远不够用.
只能是FPGA:  就算1个串口用10个D触发器, 也要近500个D触发器.
市面上的CPLD容量不够的, 找一个上1000个D触发器的FPGA就足够了.

出0入0汤圆

 楼主| 发表于 2008-8-5 15:04:15 | 显示全部楼层
谢谢楼上的指点,看来难度大了。

出0入0汤圆

发表于 2008-8-5 15:13:03 | 显示全部楼层
EPM1270,30个还可以

出0入0汤圆

发表于 2008-8-5 16:05:45 | 显示全部楼层
把串口换成485方式通讯,接在一条总线上。

出0入0汤圆

发表于 2008-8-5 16:15:53 | 显示全部楼层
如果通信量不是很大,而且实时性要求不高的话,可以采用RS232多机通信方式,一个UART口就够了。

出0入0汤圆

发表于 2008-8-5 16:32:59 | 显示全部楼层
EPM1270,30个还可以 -->>1270这点资源,不可能的。
如果要做16550兼容,1270做了16倍速采样、baud发生器、收发器、FIFO、错误检测、内部寄存器和总线接口,资源就耗得差不多了。

还是需要FPGA做,我原先打算用Actel的A3P250做,25万门,只能做16个16C550兼容UART。

楼主要做UART的比较精简,A3P400之类的Flash FPGA应该可以了,100多点。

出0入0汤圆

发表于 2008-8-5 16:38:16 | 显示全部楼层
RS232也可以做多机通讯?

出0入0汤圆

发表于 2008-8-5 16:47:19 | 显示全部楼层
RS232可以的,1对多。1个主多个从。我的教材中有介绍。

出0入0汤圆

发表于 2008-8-5 16:58:03 | 显示全部楼层
问一下搂主,“其中49个只接收”都是与同一个串口通讯吗? 如果是的话,只需要做1路--49路的总线切换就可以了,不必做成串口的。

出0入0汤圆

发表于 2008-8-5 17:09:11 | 显示全部楼层
to 【6楼】,楼主提到,49个是接收的,这样的话,EPM1270是可以做到30个左右的,因为我做过

出0入0汤圆

 楼主| 发表于 2008-8-5 17:10:50 | 显示全部楼层
谢谢各位的热心指教,我的目的是做一个电子靶盘,上面有49个红外接收头,想采集每一个接收头的数据,然后通过第50个串口把采集到的数据串出去,波特率是固定的,马老师的书我也买了,如果都先转换成RS232的话,成本是不是就高多了呀,9楼的意思我没有明白,请明示谢谢。

出0入0汤圆

发表于 2008-8-5 17:46:13 | 显示全部楼层
因为波特率相同,如果速度比较低,可以用单片机模拟接收。

不过红外接收头 输出的是串口格式吗?

出0入0汤圆

发表于 2008-8-5 17:56:30 | 显示全部楼层
我的意思是CPLD中写一个串口 和 1路--49路切换开关,串口通过切换连线来轮流采集49个接收头的数据,编号,再通过串口发出去。
(我只在读书时接触过Verilog,水平有限,当不起“明示”,说错了望楼主见谅!)

出0入0汤圆

 楼主| 发表于 2008-8-26 17:34:13 | 显示全部楼层
谢谢各位的热情,如果一片资源不够的话,用两片也可以呀,因为这个项目没有量,就计划做两个,成本不是问题。以前没有接解过VHDL和CPLD,现在项目比较急了,看了两天VHDL的书,还是一头雾水,请问【10楼】 durgy 大哥或哪位好心大哥能不能给一个例程让小弟先参考参考,先谢了!

出0入0汤圆

 楼主| 发表于 2008-8-26 17:37:39 | 显示全部楼层
我明白了13楼的意思,但是我觉得可能不可以,虽然数据量非常小,平时几乎没有,但是也有同时有数据的情况存在,如果能同进接收的最好了。

出0入0汤圆

发表于 2008-8-26 17:47:50 | 显示全部楼层
其实用2个二极管即可实现简单的RS232的扩展,实现把一个RS232变成2个RS232,当然也能扩到更多,本人最多扩了7个的,也许能扩的更多,元件呢就是多一个二极管而已,是不是成本降低了N多啊,也不用修改代码和印制板的,只要再数据线上焊接一个一个二极管就满足咯。

当然这些扩展出来的串口地位平等的,类似RS485总线上的东西,还要注意的是这些串口也只能做从机用,相互间不能直接通信,在同一时间内也只有一个在发送数据,不能同时发送,即主机发送的时候大家都能接收的,只有一个从机应答。

这种扩展方式非常适合时下poling通信方式,简单的原理图如下:

(原文件名:20080618102121_29335.jpg)

出0入0汤圆

发表于 2008-8-26 19:24:46 | 显示全部楼层
49个红外接收头  这个都是uart的?

出0入0汤圆

 楼主| 发表于 2008-8-26 19:28:46 | 显示全部楼层
是呀,别人做好的硬件,说是用串口就可以接收,我用单片机串口,接收过,没有问题的,N ,8 ,1,接收到4个字节,一个字节头,一个字节尾,中间两个用效数据字节。

出0入0汤圆

发表于 2008-8-26 20:42:13 | 显示全部楼层
1路IIC下挂若干AVR T25,每个T25实现两个串口,你要挂出254个串口都没问题……

使用FPGA,最终也还要归结到某种上传协议上,很累也很贵,意义不大……

出0入0汤圆

 楼主| 发表于 2008-8-27 09:03:04 | 显示全部楼层
我原计划想用一片AVR单片机和一片CPLD,如果需要两片CPLD,那就用一片双串口的AVR单片机。我想协议很简单,用单片机给某一个CPLD一个电平变化信号,CPLD就把接收到的数据透明传给单片机,CPLD不做处理,这些工作由单片机来做。这样是不是好做一点呀。

出0入0汤圆

发表于 2008-8-27 09:20:57 | 显示全部楼层
串口波特率是多少?波特率低的话,直接用一个单片机模拟接收即可!

出0入0汤圆

 楼主| 发表于 2008-8-27 09:26:25 | 显示全部楼层
串口波特率4800,我想过单片机,但是如果用单片机模拟接收,同一时间只能接收一路吧,如果有两三路同时发,那不就丢了吗?4800年波特率一片AVR能模拟出来几路来,有没有人试过,我只做过模拟两路的。

出0入0汤圆

发表于 2008-8-27 11:42:57 | 显示全部楼层
如果4800的波特率,那么软件模拟应该可以。采用一个50个io以上的avr单片机,如M169,M64等。

4800波特率,一个位是208us,采用8倍采样,用定时器中断的方法,那么时间是208/8=26us。中断里查询io状态并处理每个输入的bit流。

如果单片机采用16M晶振,则单周期指令0.0625us,那么26us里可以执行416条单周期指令,处理49路io应该时间足够处理。

单片机里开49个ram缓冲,用于存放每路串口接收到的数据。

主程序采用查询的方法通过单片机的标准串口的txd发送收到的数据流给上位单片机。这样单片机只有一个定时器中断。不会对模拟查询造成时间上的延迟。


以上只是一个想法,如果可行,那将是成本最低的方案了。只是对时间和编程要做详细的论证。

实在不行可以把49路分成3个芯片实现,每路做17个输入,那么估计M48就可以了。成本也是很低的。

出0入0汤圆

 楼主| 发表于 2008-8-27 14:37:45 | 显示全部楼层
楼上好办法,做个试验板试试,三片M48,CPLD以后再说,这次时间太紧了,赶不上了。

出0入0汤圆

发表于 2008-12-30 21:53:35 | 显示全部楼层
疯狂的串口。

出0入0汤圆

发表于 2008-12-30 21:00:14 | 显示全部楼层
感觉楼主的方案可能有问题,有时候方案做不好,后续的事倍功半。



建议楼主更上一层楼。

出330入0汤圆

发表于 2008-12-29 17:34:26 | 显示全部楼层
超级串口

出0入0汤圆

发表于 2008-12-29 17:12:33 | 显示全部楼层
50个串口可以用FPGA实现,1片a3p250足够,成本很低,我的项目30个串口,可以和51进行8位数据总线相连,查询或中断方式传输数据都可以

出0入0汤圆

发表于 2008-12-10 12:35:09 | 显示全部楼层
epm570

出0入0汤圆

发表于 2008-12-10 12:08:19 | 显示全部楼层
绝对做不了 ,我就吃了这个亏,CPLD做逻辑还可以,做时序电路的时候里面的触发器太废LE了,我现在在找EPM240的替代型号也没找到,PIN完全兼容的  哪位大哥知道说一下

出0入0汤圆

发表于 2008-12-10 12:02:35 | 显示全部楼层
我曾经做过用1片LPC2138I/O口接收16路4800波特的串口数据的项目(只收,是用来接串口输出的压力表的).芯片速度没问题!

出0入0汤圆

发表于 2008-12-16 17:35:04 | 显示全部楼层
49个串口都在一个位置吗,如果在一起不如直接修改前置电路,复用在一起,用以太网代替,如果分散,考虑无线

怎么看50个串口都不是个好方案,未来维护将带来巨大困难.我们做过180多个串口/RS485/RS422的改造,全部改成光纤以太网

效果超级好,客户都没有想到以太网这么好的

出0入0汤圆

发表于 2012-1-9 17:38:36 | 显示全部楼层
也在想做一个

出0入0汤圆

发表于 2012-2-27 13:34:06 | 显示全部楼层
那在这里的朋友,有没有谁可以告诉我一种要么使用CPLD,要么使用GAL,从一个串口扩展6个串口的办法。要求是全双工通讯!

出0入0汤圆

发表于 2012-3-6 10:28:43 | 显示全部楼层
这么多不如i2c

出0入0汤圆

发表于 2012-3-6 12:09:15 | 显示全部楼层
回复【35楼】frozen  
这么多不如i2c
-----------------------------------------------------------------------

鄙视这种回帖的人,楼上是混 百度知道 的吧

出20入186汤圆

发表于 2012-3-24 10:39:01 | 显示全部楼层
别听楼上乱讲,其实不要想的太复杂,别说50个,100个都没问题~

完全不用写啥FIFO的,你只要把它想像成类似于74HC138的这种器件

编号分别1-49个输入,一个输出,编号为0

完全不用管它啥协议之类的

有一个地址脚,6位,单片机控制,
CPLD根据这6位地址来选择接收哪一个串口信号,如果选择2号串口,则2号上的任何变化直接传递给0号输出串口,也就是always @(clk) begin txd0=rxd2;end,时钟嘛?大于串口约4倍就行


实际上不用在乎啥协议,就是根据地址,输出信号跟随输入信号即可~ 很简单,我前段时间用CPLD做过1转8,可输入,输出,3根地址选择,就类似于这样的,

不要想的太复杂,
头像被屏蔽

出0入0汤圆

发表于 2012-3-28 11:34:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-4-10 06:55:47 | 显示全部楼层
我最近完成一个项目,96个红外线并口接受信号,仅判断“0”或“1”,用ep3c16q240c8.该芯片提供115个可用IO.

出0入0汤圆

发表于 2012-4-10 07:22:16 来自手机 | 显示全部楼层
用25片STM8.如果再用定时器接收那么一片最少可以做到3个.那就17片.1块6一片加起来成本也不算高

出0入0汤圆

发表于 2012-4-12 12:42:21 | 显示全部楼层
EPM240可扩展出30个双向串口,EPM570可扩展出50个双向串口

出0入0汤圆

发表于 2012-4-12 13:54:02 | 显示全部楼层
两块板子 不需要多考虑成本    使用xilinx的 spartan3的FPGA  选个资源多的 一块芯片搞定
一个Microblaze上挂30个uart而已,不会VHDL就能搞定!

出0入0汤圆

发表于 2012-4-12 14:40:26 | 显示全部楼层
为什么不挂总线啊?485不行可以CAN啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 11:14

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

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