2012-10-16 46 views
3

如何用linux的串口发出一个pwm信号? (使用python或C++)用linux的串行端口输出PWM信号

我想直接连接电机来改变速度旋转。

+0

? – PherricOxide

+3

您不应该将接收器芯片之外的任何东西连接到串行端口 - 它们不是被设计为/替换电源 – drahnr

+1

没有任何本地化的问题。用一种足够好的方式来解决你需要解决的问题的可能性是常见的。 –

回答

3

这个想法可能是不明智的,除非你真的知道你在做什么接口。任何由这些引脚驱动的信号(如果全部使用的话)都应该只提供信号电平驱动 - 您必须使用它来控制电机控制器或放大器实际电机驱动器,请勿直接连接电机。此外,串行端口的信号摆动-ve和+ ve而不是零/ + ve。

一种可能性是使用DTR信号,因为其通常可以被独立地控制(如在Set serial port pin high using python例如所描述的),但是通过软件可能无法获得准确或有效,并且如果控制马达所需的频率或精度软件会失效,您可能会使电机全速运转 - 因此需要小心。

一个更好的解决方案是获得专用的数字和/或PWM I/O卡或USB设备,甚至是专用的电机控制器接口。像研华这样的工业计算机供应商将拥有一些合适的产品,并且成本较低,可能有更多的机器人爱好供应商。我假设在Linux上有

+0

谢谢,我会尝试使用DTR信号(我不需要高精度)。 – o1863176

+0

@ o1863176:你这么说,但如果控制过程是饿死的CPU时间的电机可能会疯狂失控由于其他进程,使电机要么完全打开或完全关闭的时间不确定性的长度。硬件生成的PWM和/或RTOS通常是合适的。有一些方法可以缓解Linux中的时序抖动,这可能会产生可接受的结果。参见[this](http://www.ibm.com/developerworks/linux/library/l-real-time-linux/index.html)和[this](http://www.linuxfordevices。com/c/a/Linux-For-Devices-Articles/Seven-realtime-Linux-approaches-Part-C) – Clifford

+0

我意识到我所需要的电机的pwm频率不能由非实时操作系统管理,那么我必须使用类似arduino或其他的手动控制器。谢谢。 – o1863176

1

怀疑你能做到这一点,你使用的UART接口...只是得到一个Arduino或someat和发送串行命令到Arduino(串行针),然后把正确的PWM信号进行了销...大概5 Arduino的的代码行和Python代码的另一个5 ...

说了这么多,你或许可以找到一些非常困难的,哈克的方式来输出通过串行PWM信号...但你需要考虑如果多数民众赞成真的很合适......

+0

我会避免使用arduino或其他外部电路。如果我不能这样做,我会使用手动控制器。谢谢。 – o1863176

+0

只是好奇吗?为什么? arduino是非常棒的imho ...很容易做嵌入式的东西,这似乎是一个很好的时间让你的双手弄湿集成电路的和arduino是一个很好的入门级,一个简单的学习曲线......这可能是一个真正的原因你不想... –

+0

我已经使用Arduino的,但在这种情况下,我不喜欢的Arduino解决方案,没有技术的动机:) – o1863176