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

查看: 2023|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版