Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4871|回復: 6

關於超音波(SRF05)與伺服馬達的結合問題

[複製鏈接]
發表於 2007-7-19 19:11:09 | 顯示全部樓層 |閱讀模式
各位們我又來囉
這次又要請大家來幫忙我一下囉
我現在要將超音波與伺服馬達結合
程式如下:
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是超音波接送端)會有錯誤
所以麻煩大家一下如果有人知道我哪裡寫錯了或是要加些什麼程式
都歡迎提出來做參考
發表於 2007-7-20 13:18:24 | 顯示全部樓層
我覺得好的學習跟練習都應該從架構開始,
如果可以有個程式流程圖,
或是簡易的程式流程說明,
應該可以使人更明白你的問題與目的!
 樓主| 發表於 2007-7-23 09:11:56 | 顯示全部樓層
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;
雖然可以編譯,可是實際操作時會有錯誤
所以請教各位一下,這方面要如何改變
以及可否寫一個程式是控制超音波小於多少距離內開始徵測
發表於 2007-7-23 18:19:43 | 顯示全部樓層
原帖由 jackyer1 於 2007-7-23 09:11 發表
我初步想法是要將超音波探測與物體距離小於50時伺服馬達要有動作
可是我運用VHDL撰寫程式的話 IF BB<50 THEN (BB是超音波接送端)會有錯誤
所以麻煩大家一下如果有人知道我哪裡寫錯了或是要加些什麼程式
都歡迎提出來做參考


測距離的程式段?
測完距離後將數值放哪?
有先測試超音波量測到的值是不是正確的嗎?

因為每個人寫程式的習慣都不太一樣,
很建議利用流程圖來描述你的程式,
不是只是說明哪一段式幹麻的,
應該要完整的描述程式的行進流程!
 樓主| 發表於 2007-7-23 20:30:58 | 顯示全部樓層
超音波流程圖.bmp

因為imas版主的提醒,我製作一個流程圖po上來
主要我不瞭解的部份,就是要怎樣將這兩個部份結合起來
發表於 2007-7-25 06:48:51 | 顯示全部樓層
整個都對了,
您的用心讓人感到開心!
透過這樣的流程絕對會讓您更有收穫。

看這個流程圖,我認為問題很大,
因為很多部份的觀念在我看來並不是那麼正確,
所以我希望可以一個一個慢慢來跟您討論。

首先,超音波應該是個被動元件,
它的量測值應該是被動取出,也就是要的時候在取出,
所以超音波不會產生主動給予觸發的情況,
應該是

控制端
 |
 V
下命令讓超音波量測距離
 |
 V
取出距離值
 |
 V
判斷距離值(確認有沒有遇到障礙物)
 |
 V
決定避開的反應(決定伺服馬達要如何轉動)

應該是這樣的流程架構才是合理的,
參考一下吧!
 樓主| 發表於 2007-7-31 21:22:20 | 顯示全部樓層
多謝imas版主提出我的問題所在
對於你所提的5個步驟
我現在就是卡在

下命令讓超音波量測距離
 |
 V
取出距離值
 |
 V
判斷距離值(確認有沒有遇到障礙物)

這兩個步驟上面
一、我有用示波器量測超音波遇到障礙物(距離)時的頻率與時間
      並且將測出來的值代入到超音波距離運算公式去運算距離的值(不過我不知道它本身公式的單位,算出來是相差0.01被)
二、我使用的描寫超音波程式是使用(vhdl),所以在判斷距離這邊我找過很多vhdl書籍,判斷式本身不能直接給整數,而是
      只能給位元(01010101)的方式寫成

以上兩點是我的提問
或許是我剛接觸VHDL的關係,很多不懂地方還要麻煩大家幫忙一下下
切磋是一切原動力的來源
還有跟大家說抱歉一下,之前比較忙所以到今天才能上來回文><!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2021-10-26 11:11 , Processed in 0.131644 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表