[Atmel] mbed环境下SAMR21开发板5:PWM

[复制链接]
 楼主| ddllxxrr 发表于 2016-2-12 11:42 | 显示全部楼层 |阅读模式
今天搞一下PWM,脉宽调制(PWM:(Pulse Width Modulation输出。它是一种对模拟信号电平进行数字编码的方法,简单来说就是通过一个时钟周期内高低电平的不同占空比来表征模拟信号,如下面就是一个具体的编码样例(三角波是用来生成PWM编码的)。对于生成的PWM编码还可以用简单的电路进行还原,如下面的低通滤波电路就可以得到原来的模拟信号。




mbed的PWM类如下:






类名
方法
用途
PwmOut
PwmOut(PinName pin)
构造函数,把管脚pin设成PwmOut输出管脚
void write(float value)
设置PWM输出值,范围在0到1之间,0表示在一个时钟周期内全部都是低电平,1表示全部都是高电平
float read()
读取PWM的当前输出值,需要注意的是,该值并不一定等于原先的色丁值
void period(float seconds)
设定PWM输出的时钟周期,单位是秒
void period_ms(int ms)
设定PWM输出的时钟周期,单位是毫秒
void period_us(int us)
设定PWM输出的时钟周期,单位是微秒
void pulsewidth(float seconds)
设定PWM输出的脉宽,相当于设定PWM的输出值,假设时钟周期是10ms,脉宽是5ms,那就相当于输出0.5,这里的单位是秒
void pulsewidth_ms(int ms)
设定PWM输出的脉宽,这里的单位是毫秒
void pulsewidth_us(int us)
设定PWM输出的脉宽,这里的单位是微秒
PwmOut& operator= (float value)
操作符重载,相当于write
PwmOut& operator= (PwmOut& rhs)
操作符重载,相当于write
operator float()
操作符重载,相当于read




我本想不用LED0板子上的,但时在没有时间搭个电路,于是用板子上的LED0试一下:


mbed环境用的是LED1,其实就是一个,只不过有点差别:


程序如下:
  1. #include "mbed.h"

  2. PwmOut PWM1(LED1);


  3. float pv=0;

  4. int main()

  5. {

  6.     PWM1.period_us(100);


  7.     PWM1=0;

  8.    

  9.     while (1)

  10.     {

  11.         PWM1=pv;

  12.         pv=pv+0.01;

  13.         wait(0.05);

  14.         if (pv>1)

  15.             pv=0;

  16.     }



  17. }

把程序下进,LED居然从亮到渐暗,也就是说成功了。

我想这PWM的应是用定时器控制的,否则怎么隨便一个接LED的管脚,尽然会发PWM波呢?

以下是下载成功的截图:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dirtwillfly 发表于 2016-2-13 19:49 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部