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%