使用VHDL寫了一個PWM的程式.但是有點問題 |
答題得分者是:㊣
|
marui
一般會員 發表:2 回覆:7 積分:1 註冊:2005-01-14 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 我寫了一個VHDL的程式.用來產生PWM的波形..PWM是可調的 我是使用MAX PLUS2寫的.是下載到7128SLC84-7這顆晶片上 我在軟體上模擬時都是正常..但下載後用示波器看波形就錯了 一直都是高電位的狀況.而不是一個方波...不知道是哪裡出錯了 請大家指教...謝謝這位弟兄,能附上你所寫的內容嗎?你只寫這樣,大家不知道你怎麼寫的ㄚ,也不知道錯誤在那裡. ------------------------------------ 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
marui
一般會員 發表:2 回覆:7 積分:1 註冊:2005-01-14 發送簡訊給我 |
不好意思..現在附上我的程式
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY pwm IS
PORT(
CLK,ENB,RESET : IN STD_LOGIC;
CMD : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
PWMR : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
PWMU,PWMD,PWMI : OUT STD_LOGIC
);
END pwm;
ARCHITECTURE a OF pwm IS
SIGNAL ref : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL clk12 : STD_LOGIC;
SIGNAL system : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL pu,pd,ce2,d0,d1,d2,d3,d4 : STD_LOGIC;
SIGNAL q : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL ce,dir : STD_LOGIC;
BEGIN
DIVCLOCK : BLOCK
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
system<=system 1;
END IF;
END PROCESS;
END BLOCK DIVCLOCK;
clk12<=system(1);
--clk6<=system(2);
TRIANGLE_WAVE : BLOCK
BEGIN
PROCESS(clk12)
BEGIN
IF RESET='1' THEN
q<="000000000111";
ELSIF clk12'EVENT AND clk12='1' THEN
IF ce='1' THEN
IF dir='0' THEN q<=q 1;
ELSE q<=q-1;
END IF;
END IF;
END IF;
END PROCESS;
ce<=system(1);
dir<=system(13);
END BLOCK TRIANGLE_WAVE;
ref<=q;
PWM_WAVE : BLOCK
BEGIN
PROCESS(clk12)
BEGIN
IF clk12'EVENT AND clk12='1' THEN
IF ce2='1' THEN
d4<=d3;d3<=d2;d2<=d1;d1<=d0;
END IF;
END IF;
END PROCESS;
END BLOCK PWM_WAVE;
ce2<=system(5);
d0<= '1' WHEN CMD>ref ELSE '0';
pu<= d1 AND d2 AND d3 AND d4;
pd<= NOT d1 AND NOT d2 AND NOT d3 AND NOT d4;
PWMU<=pu;
PWMD<=pd;
PWMI<= (NOT pu AND NOT pd) OR NOT ENB;
PWMR<=q;
END a; 我做個說明
我使用的實驗版是ALTERA出的UP2..CLK的頻率為25MHZ..先做個除頻器讓PWM使用..TRIANGLE_WAVE : BLOCK是用來產生三角波.頻率約為3KHZ左右
PWM_WAVE : BLOCK是用來產生PWM波形..clk12約為12.5MHZ..CMD是輸入命令.
用來和三角波比較..產生PWM..PWMU為正轉..PWMD為逆轉..PWMI是切換保護信號
..這些輸出信號在軟體上模擬都正常..但實際下載到晶片上後.用示波器看時.
PWMU一直為高電位.PWM一直為低電位..並沒有方波產生..和軟體模擬時不同
我一直查不出原因..希望各位高手幫個忙..幫小弟看看是不是有哪裡出了錯.謝謝
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
我不知道你是怎麼模擬的,基本上有幾個問題:
1.先量看看你的CLK有沒有真的進到系統
2.你的clk12約為6.25MHZ不是12.5MHZ(CLK每次為HI,SYSTEM才加1,SYSTEM(0)的
頻率才是12.5MHZ,你可以量看看),三角波頻率倒是3K沒錯,不過是上數下數
型的,因此你的PWM為中間對齊型.
3.你有使用延遲電路,D1,D2,D3,D4,延遲時間是ce2<=system(5);約390KHZ的時
間,延遲了四次,而你的輸出卻是將這四個信號AND以及反相再做輸出,這有可
能會造成一信號是HI另一信號是LO. 建議:三角波計數改用,上數,或下數(即PWM為前緣對齊或後緣對齊,只留q<=q 1
或q<=q-1)
延遲時間可以縮短一點.或只用d4這個信號輸出(pu<=d4,pd<= not d4) 你再試看看吧,PWM我有寫過,確定可以實現的.我之前寫的是前緣對齊型的,用來驅動馬達並做PID控制的.有問題再PO吧! ------------------------------------
生命的目的,在幻化出多采多姿的組合。
生活的意義,在捕捉住稍縱即逝的感動。
------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
marui
一般會員 發表:2 回覆:7 積分:1 註冊:2005-01-14 發送簡訊給我 |
|
s1800900
一般會員 發表:0 回覆:2 積分:0 註冊:2005-05-06 發送簡訊給我 |
|
sn903209
初階會員 發表:53 回覆:86 積分:32 註冊:2005-03-27 發送簡訊給我 |
|
marui
一般會員 發表:2 回覆:7 積分:1 註冊:2005-01-14 發送簡訊給我 |
|
s1800900
一般會員 發表:0 回覆:2 積分:0 註冊:2005-05-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |