目次

試走会からの改良

 夏の試走会で明らかになったコース面の反射を
 なくすために、LED光照射器を作成しました。



 LED光照射器には、白色LEDを利用したので3.3Vでは
 発光しません。そこで、簡易DCDCコンバータを発振
 ICの555で作って、付加しています。



 3.3Vの電源を接続すると、次のような発光状態に
 なります。写真では、白く見えますが、長い時間
 見てられないほどです。



 DCDCコンバータの発振周波数を決めるため、CPLD
 ボードで下のチャージポンプ回路を、クロックに
 より動かしてみました。



 周波数は、100、50、25Hzとしたところ
 50Hz以上では、フリッカを感じません。

 そこで、発振ICの555の発振周波数を50Hz
 から100Hzの間になるように、抵抗、キャ
 パシタの値を選びました。

 チャージポンプの周波数を決めるために
 使ったVHDLコードは、以下。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ltst is
  generic (
    TOPX : integer := 16 ; 
    XMAX : integer := 58880 --; 11.776MHz => 100Hz
  );
  port (
    -- system 
    nRESET : in  std_logic ;
    CLOCK  : in  std_logic ;
    -- selector
    SEL    : in  std_logic_vector(1 downto 0) ;
    -- monitor output
    CLK100 : out std_logic ;
    CLK50  : out std_logic ;
    CLK25  : out std_logic ;
    -- out
    FOUT   : out std_logic --;
  );
end ltst;

architecture behavioral of ltst is
  -- clock generator component
  component clkgenx is
    generic (
      TOPX : integer ; 
      RMAX : integer --;
    );
    port (
      -- system
      nRESET : in  std_logic ;
      CLOCK  : in  std_logic ;
      -- output
      CLKOUT : out std_logic -- ;
    );
  end component ;
  -- clock
  signal iCLK100 : std_logic ;
  signal iCLK50  : std_logic ;
  signal iCLK25  : std_logic ;
  signal iFOUT   : std_logic ;
  -- selector
  signal iSEL : std_logic_vector(1 downto 0) ;
begin
  -- clock generator component
  CLKX : clkgenx generic map (TOPX,XMAX) port map (nRESET,CLOCK,iCLK100) ;

  -- input
  iSEL <= SEL ;

  -- output
  FOUT <= iFOUT ;

  -- monitor
  CLK100 <= iCLK100 ;
  CLK50  <= iCLK50  ;
  CLK25  <= iCLK25  ;

  -- selector
  iFOUT <= iCLK100 when ( iSEL = "01" ) else
           iCLK50  when ( iSEL = "10" ) else
           iCLK25  when ( iSEL = "11" ) else
           CLOCK;

  -- divider
  process (nRESET,iCLK100)
  begin
    if ( nRESET = '0' ) then
      iCLK50 <= '0' ;
    elsif rising_edge(iCLK100) then
      iCLK50 <= not iCLK50 ;
    end if ;
  end process ;

  process (nRESET,iCLK50)
  begin
    if ( nRESET = '0' ) then
      iCLK25 <= '0' ;
    elsif rising_edge(iCLK50) then
      iCLK25 <= not iCLK25 ;
    end if ;
  end process ;

end behavioral;

 上のVHDLコードから、分周に関係するコードを
 呼び出しています。内容は、以下です。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity clkgenx is
  generic (
    TOPX : integer ; 
    RMAX : integer --;
  );
  port (
    -- system
    nRESET : in  std_logic ;
    CLOCK  : in  std_logic ;
    -- output
    CLKOUT : out std_logic -- ;
  );
end clkgenx;

architecture Behavioral of clkgenx is
  signal iSCNT : std_logic_vector(TOPX-1 downto 0);
  signal iCLK  : std_logic ;
begin
  -- output
  CLKOUT <= iCLK ;

  -- divider
  process (nRESET,CLOCK)
  begin
    if ( nRESET = '0' ) then
      iSCNT <= (others => '0') ;
      iCLK  <= '0' ;
    elsif rising_edge(CLOCK) then
      if ( conv_integer(iSCNT) = RMAX-1 ) then
        iSCNT <= (others => '0') ;
        iCLK  <= not iCLK ;
      else
        iSCNT <= iSCNT + '1' ;
      end if ;
    end if ;
  end process ;

end Behavioral;

 動作確認は、次のボードを使いました。



 写真の中にあるA、B、C、Dのタックに
 あわせたピンアサインは、UCFファイル
 に記述してあります。

# system
NET "clock"  LOC = "P5" ;
NET "nreset" LOC = "P39" ;

# monitor outpout(A lower nibble)
NET "clk100"  LOC = "P1" ;
NET "clk50"   LOC = "P2" ;
NET "clk25"   LOC = "P3" ;

# selector(A upper nibble)
NET "sel<0>" LOC = "P6" ;
NET "sel<1>" LOC = "P7" ;

# data output(D)
NET "fout" LOC = "P35" ;

 LED照光器をマシンの前部に装着すると
 次のようになります。



 電源は、FPGA+ARM基板かモータドライブ
 基板のどちらかから供給できます。

 LED照光器を動かすと、コースに対し
 光照射するので、上から見ると次の
 ようなイメージとなります。



 メカ、ハードの改良ができたのでファームウエア
 VHDLコードの改造にかかります。

 実際に動かしてみると、光量が不足して
 いたので、対策を考えました。

 基板がLED光を反射するように
 アルミテープを貼りました。



 これでも、光量が不足する感じなので
 昇圧回路を挟むことに。

 電源を接続するだけで済ませたいので
 インダクタとキャパシタの充放電による
 簡単な回路で昇圧しました。

 回路図は、以下です。



 インダクタの先にあるトランジスタは
 28kHzくらいでスイッチングしています。

 スイッチング用クロックの生成には、LMC555
 を使いました。昇圧回路での消費電力が少なく
 なるように、ICを選定しています。

 また、インダクタは330uHを並列接続し165uHで
 使っています。電流容量を少し増やすためで
 手持ちで120uH、500mA程度流せるインダクタなら
 1個で済ませられます。

 基板に実装すると、次の写真となります。
 名刺の半分くらいのサイズになっている
 ので、マシンのシャーシに両面テープ等
 で貼り付けて走らせます。



 この回路で、LEDに与える電圧は直結の
 約2倍になりました。

 電池入手に、ダイソーへいくと写真
 のようなライトが売られていました。



 レンズと反射材がついているので
 場合により、このライトを使おう
 と\105で購入してきました。

 白色LEDを実装したユニバーサル基板に
 アルミテープを貼付けると、次のように
 なりました。



 床面に、アルミテープで反射した光が
 見えます。


目次

inserted by FC2 system