FPGA輸出五路PWM

2021-08-14 02:11:32 字數 2742 閱讀 4229

本人在玩fpga之前玩了很久的微控制器,用stm3的計時器和51的io口模擬pwm都試過,其實原理都一樣,通過設定乙個累加器和乙個闕值,累加器中的數小於闕值時輸出低,大於闕值時輸出高,累加器加滿的時間即為pwm波的週期

標準pwm脈寬調變的頻率是50hz,週期20ms,脈衝寬度在0.5ms到2.5ms之間。

我使用的basys2開發板預設晶振頻率為50mhz

設定的脈寬精度為0.01ms,即0.01ms判斷一次輸出高低

首先,定義乙個週期為0.01ms的時鐘訊號pwm_clk

計算方法為,0.01ms/20ns=500,故count加到250時清零,使pwm_clk每0.005ms翻轉一次

reg [19:0] count_for_pwmclk=0;  //pwm_clk的累加器

reg pwm_clk=0; //pwm_clk的訊號

always @(posedge clk) //clk是50mhz的時鐘訊號

begin

if(count_for_pwmclk == 20'b0000_0000_0000_1111_1010-1) begin

// 0.01ms觸發一次,故pwm波形精度為0.01ms

count_for_pwmclk <= 0;

pwm_clk <= ~pwm_clk; //按位取反

endelse

count_for_pwmclk <= count_for_pwmclk + 1;

end

定義pwm輸出部分,可通過開關等改變pwm_compare的數值(50~250),即可使脈寬在0.5ms到2.5ms之間變化

reg [11:0] count_pwm=0;

reg [11:0] pwm_compare1=12'b0000_1001_0110; //初值定在150,即1.5ms,是舵機的中位

reg [11:0] pwm_compare2=12'b0000_1001_0110;

reg [11:0] pwm_compare3=12'b0000_1001_0100;

reg [11:0] pwm_compare4=12'b0000_1001_0110;

reg [11:0] pwm_compare5=12'b0000_1001_0110;

regpwm_flag1=0;

regpwm_flag2=0;

regpwm_flag3=0;

regpwm_flag4=0;

regpwm_flag5=0;

always @(posedge

pwm_clk) //控制五路pwm訊號輸出

begin

count_pwm

<=count_pwm+1;

if (count_pwm

< pwm_compare1) //pwm1

pwm_flag1

<=1;

else

pwm_flag1

<=0;

if (count_pwm

< pwm_compare2) //pwm2

pwm_flag2

<=1;

else

pwm_flag2

<=0;

if (count_pwm

< pwm_compare3) //pwm3

pwm_flag3

<=1;

else

pwm_flag3

<=0;

if (count_pwm

< pwm_compare4) //pwm4

pwm_flag4

<=1;

else

pwm_flag4

<=0;

if (count_pwm

< pwm_compare5) //pwm5

pwm_flag5

<=1;

else

pwm_flag5

<=0;

if (count_pwm ==12'b0111_1101_0000-1) //每0.01ms加一次,加2000次即為20ms的週期

count_pwm

<=0;

endassign

pwm_out[0]=pwm_flag1; //pwm_flag即為對應到輸出口的暫存器

assign

pwm_out[1]=pwm_flag2;

assign

pwm_out[2]=pwm_flag3;

assign

pwm_out[3]=pwm_flag4;

assign

pwm_out[4]=pwm_flag5;

1.pwm_clk的週期為10us,即0.01ms,通過改變pwm_compare 可使脈寬精度以0.01ms變化

pwm輸出的波形週期為20ms,50hz

PWM波形輸出

在學習嵌入式開發板例程時,剛開始的時候不懂pwm波形是怎樣輸出的,後來漸漸的消化了,mark下 stm32 clock init 9 系統時鐘設定 delay init 72 延時初始化 uart init 72,9600 串列埠初始化 led init 初始化與led連線的硬體介面 tim1 pw...

Mbed OS 輸出 PWM訊號

pwm 脈寬調變是通過改變脈衝訊號的波形來控制模擬量的方法。pwm可以用來控制燈光亮度,電機速度,電源電壓等等。pwm 訊號是一種脈衝訊號,具有下面幾個特點 pwm 頻率 pwm訊號的週期是不變的,而高電平的寬度是變化的。pwm 占空比 pwm 的占空比 100 高電平時間 脈衝週期 pwm 的占空...

PWM輸出捕獲模式

pwm輸入捕獲模式是輸入捕獲模式的特例,自己理解如下 每個定時器有四個輸入捕獲通道ic1 ic2 ic3 ic4。且ic1 ic2一組,ic3 ic4一組。並且可是設定管腳和暫存器的對應關係。同乙個tix輸入映 兩個icx訊號。這兩個icx訊號分別在相反的極性邊沿有效。兩個邊沿訊號中的乙個被選為觸發...