標題: 關於超音波(SRF05)與伺服馬達的結合問題 [打印本頁] 作者: jackyer1 時間: 2007-7-19 19:11 標題: 關於超音波(SRF05)與伺服馬達的結合問題 各位們我又來囉
這次又要請大家來幫忙我一下囉
我現在要將超音波與伺服馬達結合
程式如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY aas IS
PORT(clk :IN STD_LOGIC;
bb :IN STD_LOGIC;
aa,cc :OUT STD_LOGIC);
END aas;
ARCHITECTURE AS OF aas IS
signal in1:std_logic;
signal in2:std_logic;
BEGIN
process(clk)
variable a:integer range 0 to 240;
begin
if clk'event and clk='1' then
if a<120 then
a:=a+1;
else
a:=0;
in1<=not in1;
end if;
end if;
aa<=in1;
END PROCESS;
process(clk)
variable b:integer range 0 to 24000;
begin
if clk'event and clk='1' then
if b<12000 then
b:=b+1;
else
b:=0;
in2<=not in2;
end if;
end if;
end if;
cc<=in2;
end process;
END AS;
第一個 PROCESS 是超音波的10uS觸發程式
第二個 PROCESS 是伺服馬達的10ms觸發程式
我初步想法是要將超音波探測與物體距離小於50時伺服馬達要有動作
可是我運用VHDL撰寫程式的話 IF BB<50 THEN (BB是超音波接送端)會有錯誤
所以麻煩大家一下如果有人知道我哪裡寫錯了或是要加些什麼程式
都歡迎提出來做參考作者: imas 時間: 2007-7-20 13:18
我覺得好的學習跟練習都應該從架構開始,
如果可以有個程式流程圖,
或是簡易的程式流程說明,
應該可以使人更明白你的問題與目的!作者: jackyer1 時間: 2007-7-23 09:11
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY aas IS
PORT(clk :IN STD_LOGIC;
bb :IN STD_LOGIC;
aa,cc :OUT STD_LOGIC);
END aas;
ARCHITECTURE AS OF aas IS
signal in1:std_logic;
signal in2:std_logic;
BEGIN
process(clk)
variable a:integer range 0 to 240;
begin
if clk'event and clk='1' then
if a<120 then
a:=a+1;
else
a:=0;
in1<=not in1;
end if;
end if;
aa<=in1;
END PROCESS;
process(clk)
variable b:integer range 0 to 24000;
begin
if clk'event and clk='1' then
if b<12000 then
else
b:=0;
in2<=not in2;
end if;
end if;
end if;
cc<=in2;
end process;
END AS;
對於IMAS版主題出來的問題
我在對於這格程式做解釋一下
第一個PROCESS的程式,主要是在寫除頻的功能,A<120主要是要讓這程式除以240(因為我用的版子頻率是24M),所以剛好除出來可以獲得10us的觸發給超音波
第二個PROCESS程式主要是在控制伺服馬達,因為我的伺服馬達前進是靠1ms觸發,以及後退是2ms,停止試1.5ms,所以個process程式也是除頻方式
那我的問題就是,藉由超音波發射與接收原理去控制伺服馬達,我陷在主要是卡在不知道要怎樣寫超音波程式去控制伺服馬達,我之前是在第二個process加入一個 if 判別式如下
process(clk)
variable b:integer range 0 to 24000;
begin
if clk'event and clk='1' then
if b<12000 then
else
b:=0;
in2<=not in2;
end if;
end if;
end if;
cc<=in2;
雖然可以編譯,可是實際操作時會有錯誤
所以請教各位一下,這方面要如何改變
以及可否寫一個程式是控制超音波小於多少距離內開始徵測作者: imas 時間: 2007-7-23 18:19
原帖由 jackyer1 於 2007-7-23 09:11 發表
我初步想法是要將超音波探測與物體距離小於50時伺服馬達要有動作
可是我運用VHDL撰寫程式的話 IF BB<50 THEN (BB是超音波接送端)會有錯誤
所以麻煩大家一下如果有人知道我哪裡寫錯了或是要加些什麼程式
都歡迎提出來做參考