2010-05-08 43 views
3

我知道串行端口是通过串行发送单个比特流来工作的。我可以编写程序来发送和接收来自该引脚的数据。控制串口上的各个引脚

但是,串行端口连接上还有更多的其他引脚没有使用正常,但来自文档的信息似乎都具有某种信号功能,而不是数据传输。

是否有可能以任何方式导致不用于直接数据传输的其他引脚被单独控制?如果是这样,我会怎么做呢?

编辑:更多信息

我与现代CPU工作的英特尔酷睿i7处理器,870运行Windows 7 64位。我正在使用串口到USB端口,因为它强加给我直接与USB端口做任何事情,我的电脑没有串口,还有一些莫名其妙的原因,我有一堆这些USB串口端口适配器。

我的目标是控制mutipul步进电机(每转200步,4相电机)。我的简单电路接受单个高脉冲,并将其解释为使电机旋转一步的命令。电路本身将处理电源和相位切换。我希望使用数据传输引脚发送旋转信号(我们可以通过改变高脉冲的数量和通过引脚的高脉冲频率来控制位置和速度,但是没有实际的脉宽调制)。

我有许多电机来控制,但他们不需要同时控制。我希望使用其余的引脚,并通过一个简单的组合逻辑电路来运行它们,以确定哪个电机正在移动以及它将移动到哪个方向。这是电源开关电路的一部分。

数据传输引脚将在一些低端频率下正常工作。但是,我想控制其他引脚,让我给一个稳定的开或关信号(他们不会很快翻转,只有当我切换到控制另一个电机时才会改变)。

回答

2

根据Hans Passant的建议,我想建议您使用Arduino而不是USB转串口转换器。 "Duemilanove"是一款基于Arduino的板卡,提供6路PWM输出(以及8路其他数字I/O和6路模拟)。一些更专业的主板甚至可能更便宜(Arduino Pro Mini,售价15美元,需要一些焊接)。

0

你所描述的也许并行端口 - 在这里你可以设置位模式一次全部 - 然后切换XMIT线送这一切......

0

让我们从“自下而上”的角度看视图:

的串行端口引脚
引脚串行端口上可以连接到一个“控制器”或直接连接到处理器。为了让处理器访问(控制)引脚,必须有从引脚到处理器的电气连接。如果没有,处理器和程序都可以控制引脚。

使用串行控制器
的控制器,诸如USART,将被连接的串行端口和处理器之间。控制器可以用来将8个并行数据比特转换为串行比特流。总体而言,控制器必须提供对端口引脚的访问权限才能对其进行控制。如果不是,则不能访问引脚。 如果连接了控制器,控制器必须连接到处理器以控制引脚。

所述处理器和所述串行端口
假设要控制销被连接到所述处理器,所述处理器必须能够访问它们。有时它们被映射为物理地址(例如使用ARM处理器),或者它们可能连接到端口(如intel 8086)。程序将通过指针或使用I/O指令访问引脚。在某些处理器中,必须先启用和初始化I/O端口,然后才能使用它们。从OS 这里

支持是一个big ticket项目:如果你的平台具有操作系统,操作系统必须提供服务来访问串口的引脚。服务可以是驱动程序或API函数调用。如果操作系统不提供服务,则无法访问串行端口引脚。

OS权限 假设操作系统支持串口,您的程序现在必须具有访问端口的权限。在某些操作系统中,只能将权限授予root或驱动程序,而不是用户。如果您的帐户没有访问引脚的权限,则不会读取它们。

支持编程语言 最后,编程语言必须支持端口。如果语言不提供对端口的支持,则可能需要更改语言,甚至是程序集。

访问串口的“未使用”引脚需要对该平台进行广泛的研究。并非所有平台都有串行端口。串行端口访问取决于平台,并可能在不同的平台上改变。

询问另一个更具体的问题,您将得到更加详细的答案。请提供您正在使用的平台和操作系统。

1

使用握手引脚发送数据可以很好地工作,虽然可能不在多任务操作系统上,但它只是处理器密集型(因为端口需要不断调查)并需要一些定制电缆。事实上,当天,这正是Laplink如何通过串行连接获得如此高的传输速率(以及为什么要获得这些速率,您需要一个特殊的“Laplink”电缆)。而且你需要hte链接的双方知道发生了什么,并能够处理定制通信。 Laplink将通过两个普通的UART引脚发送数据包,同时尝试通过握手引脚从数据包的另一端发送数据。如果没有使用正确的电缆(或通过握手引脚发送一些其他问题),没有问题 - 所有数据都会正常发送。

嵌入式开发人员可能知道这是“位冲突” - 通常在小型嵌入式系统中没有专用的UART电路 - 要使串行通信正常工作,他们必须用正确的时序切换通用I/O引脚。 UART的握手引脚也可以做到这一点。但正如我所说,如果需要做其他工作,这对系统可能是有害的。

+0

我怎么会打开或关闭Windows平台上的c + +针?我现在明白它可能是CPU密集型的,但在我的程序的实际电机控制阶段,CPU(核心i7 870)只做这件事(效率低下,但这是一个概念证明,如果它真的起作用,它将被传递给一个真正的计算机科学家来做到这一点)。 – Faken 2010-05-10 19:47:51

+0

@Faken:'EscapeCommFunction()'API可用于切换'DTR'和'RTS'。 'GetCommModemStatus()'API可用于获取'CTS'和'DSR'的当前状态('CD'和'RI')。 – 2010-05-11 01:58:49

1

您只能使用DTR和RTS,但这是四种可能的状态。您需要小心另一端的设备使用TTL电平。在这个链接的末尾Serial如果你需要的话,硬件上有提示。

当你说高频时,你想到什么样的数据速率?你有什么样的串口?使用计算机背面的旧9针连接器,您可以做的最好是115Kbps左右。使用USB适配器,我已经完成了测试,可以通过端口推到接近1Mbps的位置。

+0

好吧,我需要的最快速度是1kHz左右(我认为电子设备的频率相当低,但在我的情况下,转换为我的电机每秒约5转,这已经比所需的速度快了很多)。我不是在发送数据,而是发送一个控制信号给诸如螺线管这样的开关。 – Faken 2010-05-10 19:41:59

+0

如果你还没有阅读我发布的链接,你应该。 – dbasnett 2010-05-11 12:48:12

1

下面是来自微软的文章,进入非常详细的关于如何使用串行端口工作:

http://msdn.microsoft.com/en-us/library/ms810467.aspx

它提到EscapeCommFunction用于直接控制DTR线。

在您查看此信息之前,我将与其他人说,串口不适合您的应用程序。

1

我一直在试图找到你的问题的答案3小时,似乎没有“简单的方法”,以从计算机获得简单的布尔信号... 但总是有一种方法,和喷气机一样简单(甚至可能是愚蠢的),因为这听起来可能,你是否考虑过使用音频插孔连接器作为输出?,它是立体声的,所以你将有2个输出可用,编程并不困难。而且你不需要购买昂贵的狗屎来使它工作。 如果你还需要一个输入,只需拆卸一个鼠标......并将传感器连接到舵机,这可能是最便宜和最简单的方式...

另一种方法是使用LED的数字-lock,caps-lock和键盘上的dspl-lock,这些都可以使用软件激活,你只需要一个便宜的外部键盘,并使用这三个LED的连接器。