2015-10-22 23:41:12 [显示全部楼层]
9067浏览
查看: 9067|回复: 8

[教程] Edison上程序开发——如何使用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脚的点击应该奔腾起来了啊!


大连林海  初级技神

发表于 2015-10-23 10:31:25

技术贴 我坐沙发
回复

使用道具 举报

孙毅  初级技匠
 楼主|

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


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

使用道具 举报

大连林海  初级技神

发表于 2015-10-23 12:16:29

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

别美  跳舞去 找陈老师要钢管
回复

使用道具 举报

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 看上去就像脉宽的实际时间。给力!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail