Ich arbeite daran, ein Servo von einem FPGA für eine digitale Sperre ablaufen zu lassen.Servo wird nicht auf einem FPGA stoppen
My code is as follows:
`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;
reg [15:0] counter1;
initial begin
counter1 = 0;
counter = 0;
end
//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 @ (posedge M_CLOCK)
begin
counter <= counter+1;
counter1 <= counter1+1;
end
always @ (negedge M_CLOCK)
begin
//if (counter1 > 500)
//begin
SERVOPWM <= (counter <= 1);
//end
end
endmodule
Derzeit kann ich es den ganzen Weg nach rechts zu drehen, egal ob ich es 2ms oder 1ms senden. Das große Problem, das ich habe, versucht, es zu operieren, nur um nach rechts zu drehen, und dann zu stoppen. Alles, was ich ausprobiert habe, endet entweder gar nicht oder nonstop, als hätte ich nie eine 0 an den Pin geschickt.
Kann jemand den besten Weg vorschlagen, um ihm eine 0 nach genug Zeit zu schicken, um den ganzen Weg in eine Richtung zu drehen?
Danke!
Ich bin verwirrt. Ich sehe nicht, wie das helfen würde, als ob ich voltage_percentage ändern würde, um zB 10 zu sein, es wird nie den Pin für eine korrekte Menge von Zeit so hoch setzen, nie den Stift wirklich setzend, den Servo bewegungslos lassend . Warum setzen wir zusätzlich servo = counter = voltage_percentage? Was ist die Idee dahinter, alle drei gleich zu setzen? –
Nein, wir setzen nicht alle gleich. '(counter <= voltage_percentage)' ist ein Vergleich (größer oder gleich). Mit anderen Worten, Sie können wie folgt denken: if (counter <= voltage_percentage) –
'if (counter <= voltage_percentage) SERVOPWM <= 1; sonst SERVOPWM <= 0; ' –