1 / 9

Chap. 18 라인 트레이서의 설계

Chap. 18 라인 트레이서의 설계. 라인 트레이서 바닥에 그려진 선을 따라가는 로봇을 의미. 라인 트레이서 구성도. ( 선을 잘 따라가도록 판단 및 제어 ). ( 바퀴를 굴려줌 ). ( 선 감지 ). 라인 트레이서의 설계 - 개념도. 라인 트레이서 VHDL 코드 작성 개념도. 라인 트레이서의 설계 - Design. 센서 데이터에 따른 좌 , 우 모터 속도 결정. 라인 트레이서의 설계 - Design. 라인 트레이서의 설계 - Design.

zarita
Download Presentation

Chap. 18 라인 트레이서의 설계

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chap. 18 라인 트레이서의 설계 • 라인 트레이서 • 바닥에 그려진 선을 따라가는 로봇을 의미 • 라인 트레이서 구성도 (선을 잘 따라가도록 판단 및 제어) (바퀴를 굴려줌) (선 감지)

  2. 라인 트레이서의 설계 - 개념도 • 라인 트레이서 VHDL 코드 작성 개념도

  3. 라인 트레이서의 설계 - Design • 센서 데이터에 따른 좌,우 모터 속도 결정

  4. 라인 트레이서의 설계 - Design

  5. 라인 트레이서의 설계 - Design when "1011111" => mtl_speed <="11";                                   mtr_speed <="01"; -- 빠른우회전 when "1110011" => mtl_speed <="10";                                   mtr_speed <="11"; -- 느린좌회전 when "1111011" => mtl_speed <="01";                                   mtr_speed <="11"; -- 빠른좌회전 when "1110001" => mtl_speed <="01";                                   mtr_speed <="11"; -- 빠른좌회전 when "1111001" => mtl_speed <="01";                                   mtr_speed <="11"; -- 빠른좌회전 when "1111101" => mtl_speed <="01";                                   mtr_speed <="11"; -- 빠른좌회전 when others => mtl_speed <="00";                               mtr_speed <="00";       -- 정지 end case;  end if; end process;

  6. 라인 트레이서의 설계 - Design process(mtr_speed) variable for_sim : std_logic; begin       for_sim := '0';  -- 1: 시뮬레이션시 0:정상동작시 if for_sim = '0'  then            case mtr_speed is             when "00" => speed_r <= 0; -- 0 Hz when "01" => speed_r <= 19999;-- 100Hz                 when "10" => speed_r <= 9999; -- 200Hz                 when "11" => speed_r <= 6249; -- 320Hz                 when others => speed_r <= 6249; --320Hz               end case; else case mtr_speed is when "00" => speed_r <= 0; when "01" => speed_r <= 8; when "10" => speed_r <= 4; when "11" => speed_r <= 2; when others => speed_r <= 2; end case; end if; end process;

  7. 라인 트레이서의 설계 - Design process(RSTB,speed_l, CLK_4M,motor_lcnt) begin if RSTB = '0' or speed_l = 0 then motor_lcnt <= 0; phase_lclk <= '0'; elsif rising_edge (CLK_4M) then if (motor_lcnt >= speed_l) then motor_lcnt <= 0; phase_lclk <= not phase_lclk; else motor_lcnt <= motor_lcnt + 1; end if; end if; end process; process(RSTB,speed_r, CLK_4M,motor_rcnt) begin if RSTB = '0' or speed_r = 0 then motor_rcnt <= 0; phase_rclk <= '0'; elsif rising_edge (CLK_4M) then if (motor_rcnt >= speed_r) then motor_rcnt <= 0; phase_rclk <= not phase_rclk; else motor_rcnt <= motor_rcnt + 1; end if; end if; end process; --===================================== --===== 왼쪽 모터 phase Output(1상 여자방식) ====== process(RSTB,phase_lclk,phase_lcnt) begin if RSTB = '0' then phase_lcnt <= (others => '0'); elsif rising_edge (phase_lclk) then phase_lcnt <= phase_lcnt + 1; end if; end process; process(RSTB, phase_lcnt) begin if RSTB = '0' then phase_lout <= (others => '0'); else case phase_lcnt is when "00" => phase_lout <= "1000"; when "01" => phase_lout <= "0100"; when "10" => phase_lout <= "0010"; when "11" => phase_lout <= "0001"; when others => phase_lout <= "0000"; end case; end if; end process; --===========================

  8. 라인 트레이서의 설계 - Design --====== 오른쪽 Phase Output(1상 여자방식) ========= process(RSTB,phase_rclk,phase_rcnt) begin       if RSTB = '0' then        phase_rcnt <= (others => '0');      elsif rising_edge (phase_rclk) then             phase_rcnt <= phase_rcnt + 1;      end if; end process; process(RSTB, phase_rcnt) begin if RSTB = '0' then phase_rout <= (others => '0'); else case phase_rcnt is when "00" => phase_rout <= "0001"; when "01" => phase_rout <= "0010"; when "10" => phase_rout <= "0100"; when "11" => phase_rout <= "1000"; when others => phase_rout <= "0000"; end case; end if; end process; --========================================== MTL_A <= phase_lout(0);         MTL_B <= phase_lout(1);         MTL_nA <= phase_lout(2);         MTL_nB <= phase_lout(3);         MTR_A <= phase_rout(0);         MTR_B <= phase_rout(1);         MTR_nA <= phase_rout(2);         MTR_nB <= phase_rout(3); end Behavioral;

  9. 라인 트레이서의 설계 - Simulation • 라인 트레이서의 시뮬레이션 결과 파형 화면

More Related