상기 목적을 달성하기 위한 본 발명의 고속카운터 유니트회로는 본 발명의 고속카운터 회로는 모터의 엔코더에서 만들어진 2상 혹은 1상의 고속 펄스 입력을 극성 별로 분류하기 위한 다이오드부와, 상기 다이오드부를 거쳐 분류된 펄스신호를 입출력 분리하여 출력하기 위한 포토커플러와, 상기 포토커플러의 출력신호를 증폭하는 증폭기와 상기 증폭기의 출력신호를 입력하여 상변화에 따른 엔코더 신호의 정밀계수 및 고속 펄스신호의 계수를 수행하여 속도 및 위치제어용 응용 제어신호를 출력하는 카운터블록과, 상기 카운터블록에서 출력되는 펄스 카운트 출력을 외부기기에 전달하는 PLC버스인터페이스장치를 포함하는 것을 특징으로 한다.
첨부한 도면을 참고로 하여 본 발명을 설명하면 다음과 같다.
도 1은 본 발명 장치의 구성도이다.
여기에서 참고되는 바와 같이 본 발명의 유니트회로는 모터의 엔코더에서 만들어진 2상 혹은 1상의 고속 펄스신호는 전압레벨선택부(8)에 의해 입력전압레벨이 선택된 후 다이오드부(10)에 입력되게 연결하고, 상기 다이오드부(10)에서 입력신호의 극성이 분류되어 포토커플러(12)에 인가되게 연결한다.
상기 포토커플러(12)는 다이오드부(10)를 거쳐 분류된 펄스신호를 입출력 분리하여 증폭기(14)로 출력하게 연결하고, 상기 증폭기(14)에서 출력되는 극성이 분류된 상변화에 따른 엔코더 신호는 카운터블록(16)에서 정밀계수 및 고속 펄스신호의 계수를 수행하여 속도 및 위치제어용 응용 제어신호를 출력하게 연결하고 이 응용 제어신호들은 PLC버스 인터페이스장치(18)를 거쳐 외부기기로 전달되게 구성한다.
도 2는 상기 카운터블록(16)의 구체적인 회로블록 구성도이다.
여기에서 참고되는 바와 같이, A,B상의 입력신호는 상변화 감지부(20)를 통하여 위상 업다운카운터(24)에 입력되게 연결하고, 상기 위상 업다운카운터(24)의 카운트는 데이터 버스를 통하여 비교기(18), 맥스레지스터(30), 프리세트 레지스터(32) 및 출력레지스터(26)와 데이터를 주고받게 연결하여 구성한다.
또한 외부제어신호가 입력되며 어드레스 버스에 결합된 디코더(22)는 상기 데이터 버스를 통하여 상기 위상 업다운카운터(24)와 결합시킨다.
이와 같이 결합된 본 발명의 작용을 설명하면 다음과 같다.
본 발명은 24-bit/32-bit 2채널 업다운 카운터는 2채널 1상 및 2상 입력 카운터가 가능하고 카운터 인에이블 및 디스에이블 지정이 가능하며 카운터 가능한 주파수는 100Kpps이다.
이 카운터는 링 카운터 기능 및 내부 리세트 기능을 수행할 수 있으며, 프리세트 기능은 각 채널마다 프리세트가 가능하므로 임의의 설정 값에 의해 지정 범위를 카운터 할 수 있다.
이때 프리세트 레지스터(32)의 값은 프로그램에서 설정되며 프로그램이나 외부에서 동작 제어가 가능하다.
비교기(28)는 2진 24-bit/32-bit의 설정 값과 비교하여 일치 신호 및 대,소 신호를 외부에 출력할 수 있는 독립적인 2채널을 가진다.
카운트 부분은 다섯 개의 작은 기능으로 나누어져있다. 채널 1과 2는 동일한 구조로 되어있으나 각각 별도의 동작을 수행한다. 초기값을 설정할 수 있는 프리세트 레지스터 부분과 최대값을 기억시킬 수 있는 맥스 레지스터 부분과 가,감산이 가능한 2진 형태의 24/32 Bit의 카운트 부분과, 2진 24/32 Bit의 설정 값과 비교하여 일치신호 및 대, 소 신호를 외부에 출력하는 부분과 카운터채널 부분으로 이루어져 있다.
먼저, 로타리 인코더의 (+)와 (-)부분 입력은 서로 반대로 인가하여도 4개의 다이오드에 의한 다이오드부(10)의 조합에 의해 포토커플러(12)입력단에는 항상 정해진 극성의 입력만 인가되게 된다.
이때 인코더의 출력전압의 크기에 따라 전압레벨선택부(8)의 로타리 스위치를 조작에 의해 선택된 입력전압 크기별 저항(R1-R3)중 하나를 통하여 다이오드부에 인가되게 된다. 예를 들면, 전압레벨선택부(8)의 입력저항 값은 5V, 12V, 24V의 3가지의 입력을 선택할 수 있게 할 수있다.
상기 포토커플러(12)는 입출력을 분리하여 신호를 출력하게 되며, 이러한 포토커플러의 출력은 증폭기(14)에서 증폭된 후 카운터블록(16)에 인가된다. 이 포토커플러는 입력신호만 전달하고 외부 잡음이나 이상전압을 절연시키는 기능을 포함한다.
엔코더에서 발생된 입력신호가 카운터블록(16)에 입력되면, 그의 구체적인회로블록을 보이고 있는 도 2의 상변화 감지부(20)에 입력되어 상변화에 따라서 카운터트 업(up)할 것인지 또는 카운트다운(down)할 것인지를 자동으로 감지하여 위상 업다운카운터(24)에 카운트 제어신호를 출력한다.
또한 소프트웨어에 의한 카운터의 동작은 시스템의 어드레스 버스와 데이터 버스를 이용하여 카운터를 동작시키게 된다.
이에 대한 디코더 콘트롤 로직 진리치표를 아래 표 1에 나타내었다.
도 3은 상 변화에 따른 상기 카운터의 동작상태를 파형도로 나타내었다.
여기에서 참고되는 바와 같이, 2상 입력에서 A상의 하이신호가 먼저 들어 오고 B상의 신호가 나중에 들어오면 증가(up) 카운터로 동작하고 B상의 하이신호가 먼저 들어 오고 B상의 신호가 나중에 들어오면 감소(down) 카운터로 동작한다.
도 4는 상 입력에 대한 업 다운상태별 상태천이도(State Machine)를 보이고 있다.
여기에서 Phase1or2 신호는 1상 입력 인지 2상 입력 인지를 나타내는 신호(0= 1상 입력, 1=2상 입력)이고, PhaseA 신호는 A상 입력 신호, PhaseB 신호는 B상 입력 신호를 나타내며 현재상태에서 각각의 신호가 그림에 나타난 조건을 만족하면 다음상태로 이동하여 증가 또는 감소 카운터로 동작하는 신호를 만들어 준다.
아래 표 2는 상기 업 다운 상태 판별을 위한 상태천이 테이블표 이다.
여기에서 Phase1or2는 1상 입력인지 2상 입력인지를 나타내는 신호(0은 1상 입력,1은 2상입력)이고, PhaseA는 A상 입력신호이고, PhaseB는 B상 입력신호이다.
도 5는 상기 카운터 블록을 집적화시킨 실제적인 원칩 IC 회로구성도로서, 각각의 필요한 입력과 출력신호가 표시되고 있다.
한편, 프리세트 레지스터에서는 먼저 시작 값을 설정할 수가 있다. 프리세트 값은 프로그램에서 설정하여 프로그램이나 외부에서 제어할 수 있으며 실제 카운터는 메모리의 래치 기능이 없으므로 전원의 오프시나 리세트의 실행 시에는 카운터의 현재 값, 설정 값, 프리세트 값이 초기화 되므로 계속적인 작업 시 현재의 값을 CPU의 데이터 레지스터에 저장하여 두고, 다음의 작업 시작 시 이 내용을 리세트값으로 설정하면 계속적인 카운터를 수행할 수 있다.
카운터를 프로그램에서 실행할 경우, 프리세트는 라이트하고 싶은 값을 미리 프리세트 레지스터에 24/32 bit 2진 형식으로 써 넣고, 데이터 버스에 값을 실어준 후 프리세트 동작신호( PRSVALL1(2), PRSVALH1(2) )를 온하면 값이 카운트의 초기치로 세트된다.
프리세트 값의 설정(예 프리세트 값을 1234H로 할 때)은 데이터 버스가 16비트이므로 16비트씩 상, 하위 워드로 나누어서 실행한다.
카운터를 외부에서 실행 할 경우, PREST1(2) 핀을 온시킴으로써 프리세트의 동작을 수행할 수 있다. 일단 외부에서 한번 프리세트 전압이 입력되면 플립플롭이 세트되고 프로그램에서 프리세트 리세트 되지 않는 한 다음에 다시 PREST1(2)에 전압이 인가 되어도 상태는 변하지 않는다.
프리세트의 동작 신호가 온 되면 프리세트의 값이 카운트의 초기치로 입력된다. 츠리세트 요구검출 신호가 온인 경우에는 프리세트 값이 입력되지 않는다.
프리세트를 온하기 전에 외부 프리세트 검출신호 리세트를 걸어 주어야 한다. 프리세트는 임의의 위치에서 프리세트할 수 있다.
프리세트 동작은 프로그램에서의 프리세트, 외부 프리세트 단자에서의 입력, 링카운터 온시의 카운터 일치시에 동작한다.
맥스 레지스터(30)에서 카운터 값의 최대값을 설정(설정 값을 567801로 할 때)할 때에는 데이터 버스에 값을 실어준 후 맥시멈 라이트 동작신호( MAXWR)를 온하면 값이 카운트의 설정치로 세트된다.
맥시멈 값의 설정(예: 프리세트 값을 567801H로 할 때)은 데이터 버스가 16비트이므로 16비트씩 상, 하위 워드로 나누어서 실행한다.
카운터 값의 최대값을 읽을 때에는 맥시멈 리드 동작신호(MAXRDL1, MAXRDH1 )를 온하면 레지스터에 기억된 값을 읽을 수가 있다.
비교기(28)는 각 채널의 설정된 최대값(CH_MAX[0:31])과 현재 카운트중인 값(CH1_COUNT[0:31])을 비교하여 외부 핀으로 출력한다.
CH1MODE24-32핀을 온/오프함으로써 24Bit/32Bit를 선택할 수 있다( ON:24Bit, OFF:32Bit).
비교신호를 인에이블하는 경우에는 EQENA1(2) 동작시키면 설정 값과 카운트 값의 비교하여 일치할 경우 외부 출력 핀에 이퀄(EQUAL)신호를 출력한다. 동시에 EQU, LESS, GRT 핀을 구동한다.
외부 핀에 링카운터 설정 핀을 온 시켜줌으로써 카운트 값과 설정 값이 일치하면 자동적으로 프리세트 값으로 된다.
일치 신호가 온될 때 내부적으로 프리세트를 동작 시킨다. 외부 출력은 카운트 값과 설정 값의 비교 결과에 따라서 일치, 대, 소의 신호를 온한다. 따라서 외부 단자대에 EQU 출력 단자대에 오픈 콜렉터 형식으로 출력이 가능하다.
이때 출력 값의 선택은 외부 핀의 설정으로 가능하며 반드시 시퀀스 프로그램에서 외부출력 신호를 온 해야 한다.
업다운카운터(24)는 채널의 업다운을 1상 카운트일 경우에는 프로그램에 의해 정하고 2상 펄스 입력의 경우는 위상의 차이에 따라 가산과 감산이 자동적으로 정한다.
가산일 경우에는 CHU-D가 1이고 감산일 경우에는 CHU-D가 0이다. CHLOAD[0:31] 버스를 통하여 초기값이 설정되고 INHIBIT? 단자가 0이 되면 카운트를 시작한다. 현재 카운트중인 값을 읽기 위해서는 먼저 CHOLD?신호를 실행시켜서 현재의 값을 홀드시켜야 한다.
CHOLD?가 온한 시점에서 카운트의 내부가 현재의 값으로 래치 된다. 항상 현재치를 읽을 때에는 현재치 읽기 요구를 온한 후에 동작시켜야 한다. 그렇지 않을 경우에는 정상적인 값을 읽지 못할 수 있다.
카운터 값을 읽으려 할 때에는 CNTVALL1(2), CNTVALH1(2)를 온하면 레지스터에 기억된 값을 읽을 수가 있다. 카운트 값을 리드할 때는 데이터 버스가 16Bit이므로 16Bit씩 상, 하위 워드로 나누어서 실행한다.
CH1MODE24-32핀을 온/오프함으로써 24Bit/32Bit를 선택할 수 있다 (ON:24Bit, OFF:32Bit).
카운터채널은 카운트 입력을 인에이블하는 경우(CNTENA?)에는 이 신호가 온에서 외부 신호인 디스에이블 입력(CH?DIS)이 오프 되어야 한다.
CH?PST신호는 초기에는 하이로 정해져야 하고 PRESET?신호는 로우 액티브 동작신호로써 PRESET1이 `0'가 되고 RSTPR?신호에 의해 로우로 된다.
다음 표3 내지 표12는 입력조건별 디코더의 동작에 다른 유니트 동작을 나타낸 테이블 표로서, ID체크, 카운터인에블, 1상/2상변환, 1상에서의 다운카운터 전환, 맥시멈 값 설정, 맥시멈 값 읽기, 프리세트 값 설정, 프리세트 값 읽기, 현재 카운터 값 읽기, 이퀄 및 이퀄 리세트의 동작을 보이고 있다.
ID 체크
입 력 |
출 력 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
DB[15:0] |
0 |
0 |
0 |
1 |
3E |
ZZZZ |
000B |
카운터 인에이블
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
DB[0] = CH1, DB[8] = CH2 |
0 |
0 |
1 |
0 |
04 |
0101 |
CH1, CH2 Counter On |
DB[0], DB[8] = 1 이면 Counter EnableDB[0], DB[8] = 0 이면 Counter Disable |
1상 혹은 2상으로 변환
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
DB[0] = CH1, DB[4] = CH2 |
0 |
0 |
1 |
0 |
07 |
0101 |
CH1, CH2 1phase operation |
DB[0], DB[4]=1 이면 1 phase 로 동작DB[0], DB[4]=0 이면 2 phase 로 동작 |
1상 모드일 때 Down Count로 전환
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
DB[0] = CH1, DB[8] = CH2 |
0 |
0 |
1 |
0 |
03 |
0101 |
CH1, CH2 1phase down count |
DB[0], DB[8] = 1 이면 Down Counter로 동작DB[0], DB[8] = 0 이면 Up Counter로 동작 |
맥시멈 값 설정
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
0000 |
0000 |
1111 |
0000 |
08090A0B |
xxxxxxxxxxxxxxxx |
채널1 최대 카운터 값 하위16비트 설정채널1 최대 카운터 값 상위16비트 설정채널2 최대 카운터 값 하위16비트 설정채널2 최대 카운터 값 상위16비트 설정 |
WR 신호의 rising edge에서 DB[15:0]의 값을 저장 |
맥시멈 값 읽기
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
0000 |
0000 |
0000 |
1111 |
18191A1B |
ZZZZZZZZZZZZZZZZ |
채널1 최대 카운터 값 하위16비트 읽기채널1 최대 카운터 값 상위16비트 읽기채널2 최대 카운터 값 하위16비트 읽기채널2 최대 카운터 값 상위16비트 읽기 |
프리세트 값 설정
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
0000 |
0000 |
1111 |
0000 |
0C0D0E0F |
xxxxxxxxxxxxxxxx |
채널1 Preset 값 하위16비트 설정채널1 Preset 값 상위16비트 설정채널2 Preset 값 하위16비트 설정채널2 Preset 값 상위16비트 설정 |
WR 신호의 rising edge에서 DB[15:0]의 값을 저장 |
프리세트 값 읽기
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
00000000 |
00000000 |
11001100 |
00110011 |
0106141501061C1D |
00010001ZZZZZZZZ01000100ZZZZZZZZ |
채널1 Preset값을 카운터로 Load채널1 카운터 값을 읽기 위하여 Hold채널1 Hold 값 하위 16비트 읽기채널1 Hold 값 상위 16비트 읽기채널2 Preset값을 카운터로 Load채널2 카운터 값을 읽기 위하여 Hold채널2 Hold 값 하위 16비트 읽기채널2 Hold 값 상위 16비트 읽기 |
Preset 값을 카운터로 Load 한후에 다시 Counter를 ON 시켜야 함A[5:0]=01, DB[15:0]=0000, WR=0, RD=1, MID=0, IOD=0Preset value write -> load -> ch_hold -> read |
현재 카운터 값 읽기
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
000000 |
000000 |
100100 |
011011 |
061415061415 |
0001ZZZZZZZZ0100ZZZZZZZZ |
채널1 카운터 값을 읽기 위하여 Hold채널1 Hold 값 하위 16비트 읽기채널1 Hold 값 상위 16비트 읽기채널2 카운터 값을 읽기 위하여 Hold채널2 Hold 값 하위 16비트 읽기채널2 Hold 값 상위 16비트 읽기 |
이퀄 및 이퀄 리세트
입 력 |
동 작 |
MID |
IOD |
RD |
WR |
A[5:0] |
DB[15:0] |
00 |
00 |
11 |
00 |
0200 |
00010001 |
채널1 Equal Enable채널1 Equal Reset |