【发布时间】:2010-08-09 01:48:46
【问题描述】:
我希望使用耳机端口作为控制信号来控制一些电子伺服系统。我需要能够生成脉冲宽度调制信号并快速改变脉冲宽度。我更愿意在 C# 中执行此操作,但 c++ 也是一种选择。有什么想法可以做到这一点吗?
【问题讨论】:
-
我会担心音频输出的延迟。如果你想做高速伺服控制,那可能就不行了。
我希望使用耳机端口作为控制信号来控制一些电子伺服系统。我需要能够生成脉冲宽度调制信号并快速改变脉冲宽度。我更愿意在 C# 中执行此操作,但 c++ 也是一种选择。有什么想法可以做到这一点吗?
【问题讨论】:
您可以寻找如何进行 midi 输出。
我只用 C++ 做过这个,所以用 C# 是用互操作的,但这里是一个简单的介绍。
http://midiio.sapp.org/doc/windowsmidi/
早在 SO 出现之前,这里就有类似问题的一些不错的答案。
【讨论】:
假设您谈论的是普通型号的无线电控制伺服系统,您谈论的是 1-2 毫秒宽的正向脉冲,脉冲重复频率为 20-50 赫兹。 1 毫秒是左侧硬过,2 毫秒是右侧硬过,1.5 毫秒是居中。脉冲串上的任何一种抖动都会导致伺服不稳定。
在设计用于发声的卡上,这可能是一个非常难以满足的规范。
您可以更轻松地使用外置微控制器生成 PWM 信号,并通过串行端口对其进行控制。假设我的目标是让某些东西快速运行,我可能会使用 Arduino 板(Atmel ATMega328,在一个使硬件黑客非常容易的板上)。
【讨论】:
这看起来可能是您需要的:
http://www.codeproject.com/KB/audio-video/CS_ToneGenerator.aspx
(来自谷歌搜索“c# dsp 音源”的第三项)
编辑:如果您需要能够快速更改音调参数,那么您将进入软件合成领域。那里有许多低延迟(基本上是实时的)软件合成器(Reaktor 是我能想到的)。它们都可以像您所追求的那样管理简单的音调生成,并且它们中的大多数都可以由 MIDI 驱动(这将使 MIDI 成为一个可行的选择,与我刚刚在此处对另一个答案的评论中所说的相反)。 MIDI 是可以的,只要你将它连接到特定的音源/软件合成器。
【讨论】:
NAudio:http://naudio.codeplex.com/
【讨论】: