孙毅 发表于 2015-10-22 23:41:12

Edison上程序开发——如何使用PWM

在Edison上,PWM的使用跟Arduino相比,稍微复杂了一点点,但是如果掌握了其中“奥秘”就很简单了。
下面就来教大家这个“奥秘”。

最基本的用法呢,其实就只要理解两个概念:周期(period)

            +---------+               +----------+               |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            |                |                |                |                |
            +            +---------+                +---------+
            ^                              ^
            |                              |
            |<------ 周期 ------>|
            |            ^               |
            |               |                |
                            |
            pwm.period_us(5000)

这里个人认为周期多少都无妨,PWM印象中挺好的脉冲频率,这里5000微秒,或者使用period_ms(5) 5毫秒

第二个概念:duty (占空比):
            +---+                        +---+                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            |      |                            |      |                           
            +   +----------------+      +------------------+
            ^   ^
             |      |
             |<->|
                ^
               |
               |
   pwm.write(0.2)

这里write的参数就是占空比,就是矩形波信号每个周期内高电平时间与一个周期(高低电平总时间)的比值.
0.2的意思是,在一个周期内有 五分之一 的时间是高电平,剩下的时间是低电平。

好了,完全理解的这两个概念,下面可以实战了!

#!/usr/bin/python

import mraa
import time

PWM_PIN = 5
pwm = mraa.Pwm(PWM_PIN)

pwm.period_us(5000)      # Set the period as 5000 us or 5ms

pwm.enable(True)         # enable PWM
value = 0

delta = 0.05               # Used to manipulate duty cycle of the pulse

while 1:
   
    if (value >= 1):
      # Itensity at max, need to reduce the duty cycle, set -ve delta
      value = 1
      delta = -0.05
    elif (value <=0):
      value = 0
      # Intensity at lowest, set a +ve delta
      delta = 0.05
      
pwm.write(value) # Set the duty cycle
   
    value = value + delta

    time.sleep(0.5)
如果一切顺利,那么接在第5个pin脚的点击应该奔腾起来了啊!


大连林海 发表于 2015-10-23 10:31:25

技术贴 我坐沙发

孙毅 发表于 2015-10-23 11:13:19

大连林海 发表于 2015-10-23 10:31
技术贴 我坐沙发

明明是艺术贴!你看我那两个图画的是不是很艺术啊?!一目了然啊!

大连林海 发表于 2015-10-23 12:16:29

孙毅 发表于 2015-10-23 11:13
明明是艺术贴!你看我那两个图画的是不是很艺术啊?!一目了然啊!

别美跳舞去 找陈老师要钢管{:5_168:}

lianuo 发表于 2015-10-28 10:31:10

本帖最后由 lianuo 于 2015-10-28 10:59 编辑

多谢楼主,这个pwm的周期和脉宽有限制么?可以用来驱动舵机么?

孙毅 发表于 2015-10-28 14:30:10

lianuo 发表于 2015-10-28 10:31
多谢楼主,这个pwm的周期和脉宽有限制么?可以用来驱动舵机么?

舵机必须可以啊,没问题,只是忘记具体角度是如何控制的了,但用PWM是确定的。
啊,关于周期和脉宽。。。好问题——我也不确定的问题就是好问题,吼吼。
Arduino的PWM可以支持的频率。。。。好像是xxxx/s,上岁数了,这些个细节总要查下才能知道。嘻嘻。我觉得,如果超过了支持的频率上线,多半就是按照最高频率吧,也就是最小周期了。 脉宽的话,就是占空比 0~1 这个没什么限制吧

lianuo 发表于 2015-10-30 16:27:58

我在程序里面加入了pulsewidth_us(1000);用于实时控制脉宽,不过好像还没起作用,不知道是哪里的问题。

另外楼主的pin取值是5,这个值对应的是板子上的哪个针脚呢?

lianuo 发表于 2015-10-30 17:14:59

我明白了,write和pulsewidth_us(1000);都可以控制脉宽,只是我刚才设置的针脚不对,所以没出来结果。

孙毅 发表于 2015-10-30 21:08:29

lianuo 发表于 2015-10-30 17:14
我明白了,write和pulsewidth_us(1000);都可以控制脉宽,只是我刚才设置的针脚不对,所以没出来结果。 ...

官方文档写的不够清楚,恩,我觉得你是对的。
那个pulsewidth 看上去就像脉宽的实际时间。给力!
页: [1]
查看完整版本: Edison上程序开发——如何使用PWM