2016-12-08 11 views
0

私はSpartan-6ベースのFPGAでサーボ作業をしようとしています。Servo on FPGA

`timescale 1ns/1ps 


/* 
1 pin for servo--ORANGE CABLE 
red cable-- 5V, brown cable-- GND. 
Position "0" (1.5 ms pulse) is middle, 
"90" (~2ms pulse) is all the way to the right, 
"-90" (~1 ms pulse) is all the way to the left. 
servo stuff: 
http://www.micropik.com/PDF/SG90Servo.pdf 
*/ 


//All i need to do is set SERVOPWM to 1 and 0 with delays i think 
module ServoTestNShit(input M_CLOCK, 
          output [7:0] IO_LED, // IO Board LEDs 
          output reg SERVOPWM);  

    assign IO_LED = 7'b1010101; // stagger led lights just cause 

    reg [15:0] counter; 

    //use counter to have a 1ms or 2ms or 1.5ms duty cycle for a while inorder to actually run 
    //because run it this way is asking the servo to move for 1.5ms so it cant atually move that fast 
    always @* 
    begin 

     for(counter = 0; counter < 3000; counter = counter + 1) 
     begin 
     SERVOPWM = 1; 
     #2; 
     SERVOPWM = 0; 
     #2; 
     SERVOPWM = 1; 
     #2; 
     SERVOPWM = 0; 
     #2; 
     SERVOPWM = 1; 
     #2; 
     SERVOPWM = 0; 
     #2; 
     end 

     for(counter = 0; counter < 3000; counter = counter + 1) 
     begin 
     SERVOPWM = 1; 
     #1; 
     SERVOPWM = 0; 
     #2; 
     SERVOPWM = 1; 
     #1; 
     SERVOPWM = 0; 
     #2; 
     SERVOPWM = 1; 
     #1; 
     SERVOPWM = 0; 
     #2; 
     end 

    end 


endmodule 

と私のUCFファイルがちょうどほとんどです::次のように

私のコードがある

# Clock signal 

NET "M_CLOCK" LOC = P123; 


NET "SERVOPWM" LOC = P121 ;//0P1 

だから私の頭の中で、私のコードは、最初にすべての方法をパルス波を作成します右に2msの間ハイに、次に2msの間ハイに、そして次に2msの間ハイに設定して繰り返します。その後、1msなどの間、高い方で左へと続きます。 私はIOピンに1または0を送信しているので、この問題は比較的簡単だと思っていました。 、グランド、および問題のIOピンについて説明します。

愚か/明白/簡単なことがありますか? 私が紛失している概念の一部がありますか?

事前にお問い合わせいただきありがとうございます。 Cody

答えて

0

遅延(#)文は、Verilogで合成されません。このようにして最終的な値だけが出力されます。出力をクロックと同期させる必要があります。私はどうなる

方法は

always @ (posedge clk) 
begin 
    counter <= counter+1; 
end 

always @ (negedge clk) 
begin 
    SERVOPWM <= (counter <= pwm_value); 
end 
+0

ありがとうです!それは間違いなく私が正しい道を始めることになった。私は、遅延の文が合成されなかったことは知らなかった。 –

+0

ようこそ。あなたの質問を解決した場合は、その答えを承認してください。 –

関連する問題