你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2016|回复: 6

转发:ARM®mbed OS入门开发(三 A )PWM

[复制链接]

61

主题

1071

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2016-10-11 15:36:41 | 显示全部楼层 |阅读模式
mbed学习之 PWMOUT

作者:好心情_梦想

本人尽力从网上搜集汇总各个关于mbed的教学帖子,作者如有异议请联系本人删除


PWM通过一个周期内不同占空比来表征模拟量,应用非常广泛。mbed中提供了一个PWM类,来对PWM进行操作,可以分别设置占空比,周期,以及脉冲宽度。
因为这里是使用单片机内部TIM来生成PWM波的,所以并不是所有的IO都支持PWM输出,具体哪些Pin脚支持,需要自己查datasheet,首先第一步,先创建 PWM对象:
PwmOut    mypwm(PB_0);            // PB0 pin输出PWM波

        接下来可以设置PWM的占空比
        mypwm.write(0.1);                        // 0-->1之间,表示从0%-100%的占空比。
        这个时候就已经会有波形输出了,默认PWM波的频率50Hz,周期20ms
        另外,我们还可以通过下面三个函数设置PWM的周期,设置单位分别为s,ms,us。最大值受限于硬件平台,在stm32上最大是65536us,即0.065536s
        period()
        period_ms()
        period_us()
        通过下面三个函数可以设置PWM波的脉冲宽度,设置单位同样为s,ms,us。同样受限于硬件平台,stm32上最大为65535
        pulsewidth()
        pulsewidth_ms()
        pulsewidth_us()
        想知道当前输出占空比,可以通过read()来读取。
        同样的,mbed都提供了操作符重载,我们可以通过 mypwm = 0.2 来代替write。 也可以通过类似 i = mypwm 。来获取当前pwm值

        频率固定,占空比可调
         PwmOut    mypwm(PB_0);            // PB0 pin输出PWM波

         mypwm.period_us(10);                 //设定频率
         mypwm = 0.1                                //占空比


脉宽1us,频率100khz,占空比10%

脉宽3us,频率100khz,占空比30%

         脉宽固定,占空比,频率改变
         PwmOut    mypwm(PB_0);            // PB0 pin输出PWM波

         mypwm.pulsewidth_us()(10);       //设定脉冲宽度
         mypwm.period_us(100);                //设定频率,占空比 = 10/100

脉宽10us,周期100us,频率10khz,占空比 10%

脉宽10us,周期50us,频率20khz,占空比 20%
    PWM通过一个周期内不同占空比来表征模拟量,应用非常广泛。mbed中提供了一个PWM类,来对PWM进行操作,可以分别设置占空比,周期,以及脉冲宽度。

   因为这里是使用单片机内部TIM来生成PWM波的,所以并不是所有的IO都支持PWM输出,具体哪些Pin脚支持,需要自己查datasheet,首先第一步,先创建 PWM对象:

    PwmOut    mypwm(PB_0);     // PB0 pin输出PWM波

    接下来可以设置PWM的占空比

    mypwm.write(0.1);     // 0-->1之间,表示从0%-100%的占空比。

    这个时候就已经会有波形输出了,默认PWM波的频率50Hz,周期20ms

    另外,我们还可以通过下面三个函数设置PWM的周期,设置单位分别为s,ms,us。最大值受限于硬件平台,在stm32上最大是65536us,即0.065536s

period()

period_ms()

period_us()

        通过下面三个函数可以设置PWM波的脉冲宽度,设置单位同样为s,ms,us。同样受限于硬件平台,stm32上最大为65535

pulsewidth()

pulsewidth_ms()

pulsewidth_us()

    想知道当前输出占空比,可以通过read()来读取。

    同样的,mbed都提供了操作符重载,我们可以通过 mypwm = 0.2 来代替write。 也可以通过类似 i = mypwm 。来获取当前pwm值

    频率固定,占空比可调

PwmOut    mypwm(PB_0);     // PB0 pin输出PWM波

mypwm.period_us(10);      //设定频率

mypwm = 0.1     //占空比


脉宽1us,频率100khz,占空比10%
脉宽3us,频率100khz,占空比30%
脉宽固定,占空比,频率改变
PwmOut    mypwm(PB_0);     // PB0 pin输出PWM波mypwm.pulsewidth_us()(10);  //设定脉冲宽度mypwm.period_us(100);     //设定频率,占空比 = 10/100

脉宽10us,周期100us,频率10khz,占空比 10%
脉宽10us,周期50us,频率20khz,占空比 20%

MBED代码
/*
PWM控制呼吸灯
平台 Nucleo f070 + mbed
LED pin 为D11
*/
# include "mbed.h"
PwmOut ledPWM(D11);
int main ()
{
//mbed中提供了一个PWM类,来对PWM进行操作,可以分别设置占空比,周期period,以及脉冲宽度。
ledPWM.period(0.01f);  // 初始化
ledPWM=0.0f;//
while(1)
   {
     for(float val=0.1f;val<1.0f;val+=0.05f )
        {
          ledPWM=val;
          wait(0.05f);//wait XX s  
        }

      for(float val=1.0f;val>0.10f;val-=0.05f )
        {
          ledPWM=val;
          wait(0.05f);//wait XX s  
        }


   }  
}

858478668619593444.jpg




转自:http://www.cnblogs.com/cat-li/p/5079830.html
回复

使用道具 举报

61

主题

1071

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
 楼主| 发表于 2016-10-11 15:54:40 | 显示全部楼层
先占保留位置
回复 支持 反对

使用道具 举报

6

主题

446

回帖

0

蝴蝶豆

金牌会员

最后登录
2017-5-24
发表于 2016-10-12 11:03:24 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

159

回帖

0

蝴蝶豆

高级会员

最后登录
2017-3-9
发表于 2016-10-16 19:07:17 | 显示全部楼层
不错的教程
回复 支持 反对

使用道具 举报

4

主题

484

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-8-12
发表于 2016-11-18 07:16:53 来自手机 | 显示全部楼层
谢楼主分享
回复 支持 反对

使用道具 举报

1

主题

27

回帖

0

蝴蝶豆

初级会员

最后登录
2017-12-9
发表于 2017-12-7 11:19:17 | 显示全部楼层
谢谢分享,正在学习
回复 支持 反对

使用道具 举报

0

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
2018-2-6
发表于 2018-2-5 23:11:01 | 显示全部楼层
学习ing
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版