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

2015-10-221.2万
AI 快速预览详细 收起
本文介绍了如何在Edison上使用PWM技术。首先解释了两个核心概念:周期和占空比。周期是指脉冲信号的一个完整周期的时间长度,例如5000微秒;占空比是指在一个周期内高电平时间与总时间的比值,例如0.2表示五分之一的时间是高电平。文章还提供了Python代码示例,展示了如何使用mraa库设置PWM的周期和占空比,从而实现精确的脉冲控制。
在Edison上,PWM的使用跟Arduino相比,稍微复杂了一点点,但是如果掌握了其中“奥秘”就很简单了。
下面就来教大家这个“奥秘”。

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

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

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

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

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

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

  1. #!/usr/bin/python
  2. import mraa
  3. import time
  4. PWM_PIN = 5
  5. pwm = mraa.Pwm(PWM_PIN)
  6. pwm.period_us(5000)        # Set the period as 5000 us or 5ms
  7. pwm.enable(True)           # enable PWM
  8. value = 0
  9. delta = 0.05               # Used to manipulate duty cycle of the pulse
  10. while 1:
  11.    
  12.     if (value >= 1):
  13.         # Itensity at max, need to reduce the duty cycle, set -ve delta
  14.         value = 1
  15.         delta = -0.05
  16.     elif (value <=0):
  17.         value = 0
  18.         # Intensity at lowest, set a +ve delta
  19.         delta = 0.05
  20.         
  21. pwm.write(value) # Set the duty cycle
  22.    
  23.     value = value + delta
  24.     time.sleep(0.5)
复制代码

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


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
lianuo
lianuo
我明白了,write和pulsewidth_us(1000);都可以控制脉宽,只是我刚才设置的针脚不对,所以没出来结果。
孙毅
孙毅
作者
回复lianuo
官方文档写的不够清楚,恩,我觉得你是对的。
那个pulsewidth 看上去就像脉宽的实际时间。给力!
lianuo
lianuo
我在程序里面加入了pulsewidth_us(1000);用于实时控制脉宽,不过好像还没起作用,不知道是哪里的问题。
另外楼主的pin取值是5,这个值对应的是板子上的哪个针脚呢?
lianuo
lianuo
多谢楼主,这个pwm的周期和脉宽有限制么?可以用来驱动舵机么?
孙毅
孙毅
作者
回复lianuo
舵机必须可以啊,没问题,只是忘记具体角度是如何控制的了,但用PWM是确定的。
啊,关于周期和脉宽。。。好问题——我也不确定的问题就是好问题,吼吼。
Arduino的PWM可以支持的频率。。。。好像是xxxx/s,上岁数了,这些个细节总要查下才能知道。嘻嘻。我觉得,如果超过了支持的频率上线,多半就是按照最高频率吧,也就是最小周期了。 脉宽的话,就是占空比 0~1 这个没什么限制吧
qq815076543322
qq815076543322
技术贴 我坐沙发
qq815076543322
qq815076543322回复孙毅
别美 跳舞去 找陈老师要钢管
孙毅
孙毅
作者
回复qq815076543322
明明是艺术贴!你看我那两个图画的是不是很艺术啊?!一目了然啊!
- 没有更多了 -