Mbed OS 输出 PWM信号
PWM 脉宽调制是通过改变脉冲信号的波形来控制模拟量的方法。PWM可以用来控制灯光亮度,电机速度,电源电压等等。
PWM 信号是一种脉冲信号,具有下面几个特点:
PWM 频率
PWM信号的周期是不变的,而高电平的宽度是变化的。
PWM 占空比
PWM 的占空比=100%*(高电平时间)/(脉冲周期)。PWM 的占空比决定了输出信号的电压平均值,占空比高,输出的平均值就高。使用一个RC滤波器电路就可以方便地将PWM 信号转换成平均值的电信号。所以PWM是另一种形式的模拟量输出方式。
Mbed OS PWMOut 类
Mbed 提供了PWMOut 类,它内部是使用STM32 中的TIM 产生PWM 信号的。所以并不是所有GPIO脚都可以输出PWM信号的。具体的选择方式要查找modular-2 IO引脚定义表。
| 1 构造函数
|
|
| pwmout() |
|
| 2 成员函数 write (float value) | 写入当前的占空比。浮点百分比 |
| Read() | 读出当前的占空比。浮点百分比 |
| period (float seconds) | 设置周期(秒) |
| period_ms (int ms) | 设置周期(豪秒) |
| period_us (int us) | 设置周期(微秒) |
| pulsewidth (float seconds) | 脉冲宽度(秒) |
| pulsewidth_ms (int ms) | 脉冲宽度(毫秒) |
| pulsewidth_us (int us) | 脉冲宽度(微秒) |
例子 主板LED灯渐变
modular-2主板上的双色灯控制线PC_6和PC_7 支持PWM 输出,所以可以实现颜色的渐变。PWM 的频率为100Hz(周期为10ms),改变的速度为50HZ,每次该变量为1%。
#include "mbed.h"
PwmOut myled(PC_7);int main() {float fade;fade=0;myled.period(0.01f);//10mswhile(1) { wait(0.02); // 20 msmyled.write(fade);fade=fade+0.01;if (fade>1) {fade=0;myled.write(fade);wait(1);}
}
值得注意的是,PWMOut 是利用STM32 TIM 时钟来实现的,所以并不是所有的GPIO都支持PWM 输出。modular-2 上的用户LED指示灯选择了具有TIM 时钟输出的能力(PC6,PC7)。
例2: RGB 灯条渐变
LED RGB 灯条是24V 共阳极RGB 彩色LED 灯条,我们使用modular-2 的数字IO板来控制该灯条实现渐变。
modular-2 使用双极性晶体管数字输出IO模块,控制彩色LED 灯条。
代码
#include "mbed.h"
PwmOut red(PB_1);
PwmOut green(PE_8);
PwmOut blue(PE_14);
DigitalOut LED(PC_6);
int main() {float Value;int mode=0;red.period_ms(1); green.period_ms(1); blue.period_ms(1); Value=100;blue.write(1);green.write(1);red.write(0);while(1) {LED=!LED;wait(0.01);switch (mode){case 0:{red.write(Value/100);//Downgreen.write((100-Value)/100);//Upbreak;}case 1: {green.write(Value/100);//Downblue.write((100-Value)/100);//Upbreak;}case 2: {blue.write(Value/100);//downred.write((100-Value)/100);//upbreak;}}Value=Value-0.4;if (Value<0) {Value=100; mode++;if (mode>2) mode=0;wait(1);}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
