
#include "기본정의.h"

//[DC모터 관려 정의]
//{
    //모터 선택.
    #define  모터R          0b01
    #define  모터L          0b10
    #define  모터RL         0b11

    //동작구분 관련(직접 가상 레지스터에 적용할수 있는 값).
    #define  모터_급속정지    0b00
    #define  모터_정지       0b11
    #define  모터_정회전      0b01
    #define  모터_역회전      0b10

    //속도구분 관련.
    #define  모터_등속        0
    #define  모터_가속        1
    #define  모터_감속        2

//}

struct DC모터제어구조체
{
  //[!]{--------------------------------------
  //DC모터를 제어하는데 관련된 변수 정의.
  //이는 관리하기 쉽게 한군데 변수들을 몰아 놓은것.
  //외부에서 간단하게 주소로 모든 관련 변수에 접근 가능.
  //}-----------------------------------------

  //실제 L298 에 공급되는 PWM 의 주기값.
  //실제 적용되는 듀티비가 100% 일때 이 주기값과 같은 값.
  unsigned short  PWM_주기;

  //0 - 100% 듀티까지를 나눌 단계수.
  //이 단계마다 [단계유지시간] 이 적용돼 가감속 구현.
  unsigned short  단계;

  //각 단계를 유지시킬 시간 지연값.
  unsigned int    단계유지시간;

  //현재 구동에 적용되고 있는 듀티비.
  //[정지] 시에 이 값을 알아야 [감속] 제어부에서 [속도] 를 계산할수 있으므로 별도 관리.
  unsigned char   현재구동듀티비;

};

//[2010.04.23.금][완료!!!]
void DC모터_제어구조체위치얻기(struct DC모터제어구조체  **r구조체);

//[2010.04.22.목][완료!!!]
void DC모터_초기화(void);

//[2010.04.23.금][완료!!!]
void DC모터_가감속정보설정(//0 - 100% 듀티까지를 나눌 단계수.
                       //작은 경우는 [가감속] 이 빠르게 진행.
                       unsigned short  p단계,
                       //각 단계를 유지시킬 시간 지연값.
                       //작은 값일수록 [가감속] 이 빠르게 진행.
                       unsigned int    p단계유지시간);

//[2010.04.25.일][완료!!!]
void DC모터_기동(//[오른쪽/왼쪽/양쪽] 중 하나 설정.
               unsigned char  p모터선택,
               unsigned char  p회전방향,
               //0-100 까지 %값으로 입력.
               unsigned char  p듀티비,
               //가속사용(true), 등속사용(false).
               bool           p가속사용);

//[2010.04.25.일][완료!!!]
void DC모터_정지(//[오른쪽/왼쪽/양쪽] 중 하나 설정.
               unsigned char  p모터선택,
               //감속사용(true), 등속사용(false).
               bool           p감속사용);

//[부가 함수]
//{
    //[!]{-----------------------------------------------------
    //DC모터 구동을 위하여 내부적으로만 사용되며 사용자는 사용할 필요가 없음.
    //}--------------------------------------------------------

    //[2010.04.25.일][완료!!!]
    void DC모터_제어(//[오른쪽/왼쪽/양쪽] 중 하나 설정.
                   unsigned char  p모터선택,
                   //[급속정지(0)/정지(1)/정회전(2)/역회전(3)] 중 선택.
                   unsigned char  p동작구분);

    //[2010.04.25.일][완료!!!]
    void DC모터_속도(//[오른쪽/왼쪽/양쪽] 중 하나 설정.
                   unsigned char  p모터선택,
                   //[등속(0)/가속(1)/감속(2)] 중 선택.
                   unsigned char  p속도구분,
                   //0-100 까지 %값으로 입력.
                   unsigned char  p듀티비);

//}

