本人在玩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訊號分別在相反的極性邊沿有效。兩個邊沿訊號中的乙個被選為觸發...