마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 32. CPLD와 PIC를 사용한 저주파 발진기
첨부파일

 

                  CPLD로 다이렉트 디지탈 신디사이저를 구성해, 그것을 PIC로
                  제어하는 것으로, PC로부터 시리얼 인터페이스로 리모트
                  컨트롤 가능한 저주파 발진기입니다.
 


CPLD와 PIC에 의한 저주파 발진기

고속 동작의 CPLD로 다이렉트 디지탈 신디사이저를 구성해
그것을 PIC로 제어하고 있습니다.
PIC는 시리얼 인터페이스로 PC와 접속해 PC로부터
리모콘이 가능한 저주파 발진기입니다.



【개요】

 VHDL로 정현파의 디지탈 패턴을 생성할 수 있는 것을 힌트로 해, 원수-회로
(을)를 더해 다이렉트 디지탈 신디사이저를 구성했습니다.
6비트로 64 분해가능의 정현파이므로, 상당히 예쁜 정현파를 생성하는 것이 성과
.
이 VHDL를 CPLD(Complex Programmable Logic Device)에 생성해, 최고 260 kHz
까지의 정현파를 1 Hz단위로 설정해 생성할 수 있습니다.
이 CPLD를 PIC로 제어해 임의의 주파수의 정현파를 생성시킬 수가 있습니다.
한층 더 PIC의 시리얼 인터페이스로 PC와 접속해, PC측으로부터 모두
리모콘으로 작동시킬 수 있는 저주파 발진기를 제작했습니다.
이것으로 이른바 스위프 제네레이터로서 움직일 수가 있습니다.

CPLD측의 VHDl의 상세한 것에 대하여는 아래와 같이 페이지를 참고로 해 주세요.

  ★ VHDL에 의한 DDS의 제작
  


【실제의 출력 파형】

본저주파 발진기로 생성한 파형은 밑그림과 같이 되어 있습니다. 거의 실용역의 파형과
말해 좋다고 생각합니다. 앰프의 주파수 특성이나 필터의 특성의 측정에 사용할 수 있다고 생각합니다.

10 Hz의 파형
계단파가 되어 있다
의를 잘 안다
100 Hz의 파형
아직 날아 나는 일의
계단파를 알 수 있다
1 kHz의 파형
상당히 예쁘게 되어
왔다
10 kHz의 파형
거의 매끄러운
파형이 되어 있다
50 kHz의 파형
6비트의 최고치
100 kHz의 파형
5비트의 최고치
250 kHz의 파형
4비트의 최고치


【전체의 구성】

이 저주파 발진 블록의 전체 구성은 밑그림과 같이 되어 있습니다. 전체는 PIC와 CPLD
(을)를 중심으로 해 구성해 있습니다.
CPLD는 DDS 기능의 대부분을 완수해, 출력은 직접 D/A컨버터의 DAC0808에 접속
되어, 아날로그 데이터 에 변환됩니다. 그것을 고출력 유효증폭기로 출력 전류 증폭을 해
lowpass filter를 통하고 나서 외부 신호로서 출력하고 있습니다.
이 lowpass filter는 디지탈 신호로 작성한 계단상의 정현파를 매끄러운 파형으로 한다
기능을 합니다. 즉 계단상의 파형의 고주파 성분을 없애, 톱니 모양을 줄입니다.
이 lowpass filter의 상한 주파수가 낮을 정도(수록) 예쁜 정현파로 할 수가 있습니다만,
출력 신호의 진폭도 비례해 작아져 버리기 때문에, 상한 주파수를 1 MHz 정도로 해
있습니다.






이 CPLD의 DDS의 주파수 설정 제어는 PIC로 가고 있습니다. PIC는, 외부로부터 RS232C 경유
그리고, 주파수 설정치를 수신해, 그 데이터를 CPLD에의 설정치로 변환한 뒤, CPLD의 쉬프트
레지스터에 전송 하고 있습니다. 18비트를 전송 하면 좋겠습니다만, 프로그램을 간단하게 한다
모아 두어 3바이트의 24비트를 보내 버리고 있습니다. 그런데도 상위의 6비트는 무시되어 섬
있기 때문에 문제는 없습니다. 마지막에 set 신호를 출력하면, 주파수 설정은 완료해, 지정
한 주파수의 정현파가 출력으로서 나타납니다.

PC와의 통신에는 RS232C를 사용하고 있습니다만, 그 통신 모드의 설정은 아래와 같이가 되어
있습니다.

    통신 속도 : 9600bps
    데이터 길이  : 8비트
    패리티  : 없음
    stop bit장 : 1비트
    flow control : 없음

이 조건으로 RS232C로 PC와 접속해, PC측의 프로그램으로 주파수 설정을 실시합니다.

전원은 D/A컨버터와 유효증폭기에는 마이너스의 전원이 필요해, 출력 파형을 피크 피크
그리고 5 V로 하기 (위해)때문에,+5 V와-8 V를 사용했습니다.
마이너스측은, 10 mA정도의 그저 얼마안되는 전류로 좋습니다만,+5 V측은, CPLD에
최대 300 mA정도의 대전류가 흐르므로, 대나무눈의 용량으로 할 필요가 있습니다.
거기서+5 V측에는 1 A타입의 3 단자 레귤레이터를 사용해, 거기에 방열판을 달고 있습니다.

 


【전체 회로 구성】

상기의 블록 구성을 바탕으로 작성한 회로가 밑그림과 같은 회로입니다. CPLD에는, 게이트수의
큰 XC95108를 사용했습니다. 사실은 좀 더 큰 용량의 것을 사용하고 싶은 곳입니다만,
더 이상의 사이즈에서는 소켓등의 실장이 귀찮아서, 84 핀의 PLCC 소켓의 것과
했습니다. 전체의 핀수는 84 핀과 많습니다만, 사용하는 것은 그 중의 신호 12 핀과 전원과
그랜드 뿐이므로, 배선이나 실장은 편합니다. 배선 시에는, 남은 CPLD의 핀은 그랜드에
접속해 둡니다.

D/A컨버터의 DAC0808는 원래는 8비트의 D/A컨버터이므로, 남은 하위
2비트는 그랜드에 접속해 6비트로서 사용합니다.
PIC에는, 발광 다이오드나 스윗치가 접속되고 있습니다만, 장래용으로 이번 시작에서는 사용해
없습니다.

CPLD에는 JTAG의 핀이 있기 때문에, 그것을 연결기로서 내 둡니다. 이렇게 하면
CPLD의 내용은 언제라도 개서를 할 수 있기 때문에, 기능 변경등 자유롭게[실시할 수가 있습니다.
이 JTAG 연결기에는, 자이린크스의 기입용의 케이블을 접속합니다.

CPLD용의 클락에는, 정확히 2의 22승에 상당하는, 4. 194304 MHz의 발신기가 용이하게
입수할 수 있기 때문에, 이것이 편리하다고 생각합니다.
이 클락 출력을 PIC용의 클락에 겸용해도 상관하지 않습니다만, 이번은 10 MHz의 다른 크리스
탈 진동자를 사용하고 있습니다.

저주파 발진 유니트의 회로도 (밑그림은 확대할 수 있습니다)

  
★ 저주파 발진 유니트의 회로도와 패턴도
     (IVEX사 WinDraft와 WinBoard용의 파일로 다운로드할 수 있습니다)









【PIC의 프로그램】

상기의 DDS인 CPLD를 제어하는데, PIC16F876를 사용했습니다, PIC16F873에서도
상관하지 않습니다. 그리고, 이 제어 프로그램을 CCS사의 C컴파일러를 사용해 C언어로 작성 섬
했다. C언어를 사용한 것은, 뭐니 뭐니해도 RS232C의 제어가 매우 편하기 때문에입니다.

프로그램의 내용으로서는, 단순해, 스타트 하면(자), RS232C를 향해 start 메세지를
송신해, 그대로 수신 대기로 합니다.
그리고 데이터를 수신하면(자), 그것을 버퍼에 차례차례 격납해, return code(0 x0D)를 수신했다
들 , 수신 데이터를 처리합니다.

수신 데이터로서는, 주파수의 18비트의 데이터입니다만, 18비트를 취급하는 변수가 CCS사의
C컴파일러에는 준비되어 있지 않기 때문에, 이것을 2개로 분할해 최상정도 2비트와 하위 16비트와
에 분할해 차례로 2 종류의 데이터가 보내져 오는 것으로 결정하고 있습니다.
우선, 최상정도의 2비트를 0,1,2,3의 수치 문자로 수신합니다. 다음에 하위 16비트분이 10 진수의
수치 문자로서 보내져 오는 것으로 해, 이것을 long의 정정수로 변환해 수치로서 취급합니다.
CCS사의 컴파일러에서는, long형은 2바이트의 데이터로서 취급하기 때문에, 이것을 그대로 18비트
중의 하위 16비트의 주파수 설정용의 데이터로서 취급합니다.

(1) main 안의 데이터 처리 부분
  아래와 같이는 main 함수의 주요 부분에서, 실제로 주파수 데이터를 캐릭터 라인으로 수신해, 그것을 3바이트의
  출력 데이터로 변환하고 나서, shift register에 출력하는 부분입니다.
  캐릭터 라인 데이터의 수신에는 gets() 함수가 그대로 사용할 수 있습니다. 이 gets() 함수는 마지막을 CR
  코드(0x0D)로 판정하기 때문에, 보내는 측이 CR코드를 추가해 보낼 필요가 있습니다.
  상위 2비트분은 1 문자의 숫자로 보내져 오기 때문에, 단순하게 INT형의 정정수(1바이트)에
  변환할 뿐입니다. 하위 16비트분은 숫자의 캐릭터 라인으로 보내져 오기 때문에, 이것도 일단
  long형의 정정수(2바이트)로 변환합니다. , 그 후 이 2바이트를 상위 아르바이트와 하위 아르바이트에
  8비트 쉬프트 하는 것만으로 분해할 수 있습니다. 이것으로 3바이트의 데이터가 모인 것이 됩니다.
  이것을 shift register에의 전송 함수로 각각 출력해, 마지막에 set 신호를 출력하면,
  주파수 설정 데이터의 출력아g완료한 것이 됩니다.






(2) shift register 전송 제어 함수
  아래와 같이는, 주파수 설정용의 shift register에 1바이트를 출력하는 함수입니다.
  출력하는 1바이트의 데이터를 상위 비트로부터 차례로 봐, 0인가 1인가에 의해, 출력 포토에
  0이나 1을 출력한 뒤, 쉬프트 클락을 1회 출력합니다. 이것을 8회 반복하면 8비트의
  출력이 완료한 것이 됩니다.






(3) 프로그램 전체
  아래와 같이는 PIC측의 DDS 제어 프로그램의 C언어의 원시 파일입니다. CCS사의 C컴파일러
  그리고 컴파일 해 주세요. 텍스트 문자 편집기등으로 직접 볼 수가 있습니다.

   ★ DDS 제어 프로그램(CCS사 C컴파일러용)




【PC의 프로그램】

이 저주파 발진 유니트를 제어하는 PC측의 프로그램은 자유롭게 작성할 수 있습니다만,
이하는, 내가 Visual Basic로 작성한 프로그램예입니다.

우선 폼은 아래와 같은 실행 상태의 표시가 됩니다. 이 내용으로부터 추측할 수 있도록(듯이)
아래와 같은 주요 기능을 가지고 있습니다.

(1) 통신 조건의 설정과 접속(오픈), 분리
(2) PIC로부터 수신한 데이터의 표시(그대로 표시)
(3) 개별적으로 설정하는 주파수의 입력과 송신
(4) 범위 지정한 주파수의 사이의 설정과 스위프 출력

이 PC의 프로그램은, MSComm 컴퍼넌트를 이용해 시리얼 통신을 실현
하고 있기 때문에, Visual Basic의 Ver5 이상이 필요합니다. 이번 제작에서는, Ver6를 사용
했습니다.
아래와 같이는 이 VB Ver6로 작성한 프로젝트의 데이터 1식입니다. 다운로드해 해동해
사용해 주세요.

  ★ 주파수 발진 유니트 제어 프로그램(VB6용 project)

   







(1) 폼 로드 이벤트의 처리
  여기에서는 스위프에 사용하는 타이머를 정지시켜, MSComm 컴퍼넌트
  (을)를 사용한 통신 포토의 초기설정을 실시해 둡니다. 
  수신은 1바이트마다의 이벤트 발생으로 해, 송신은 버퍼가 하늘에서 이벤트 발생으로 합니다.







(2) 통신 개시 버튼의 제어
  통신 개시 버튼의 click 이벤트로 MSComm의 Open를 합니다 Open 할 때
  이미 Open라면 닫는다고 하는 교호 동작을 합니다. 동시에 버튼의 표시 내용
  도 연동해 변경합니다.





(3) 송신 버튼의 click 이벤트
  송신 버튼을 누르면(자) 송신 텍스트 에리어로 설정되어 있는 주파수를 출력합니다.
  그 때 설정 데이터의 범위 체크를 합니다.
  출력 데이터는 2개로 분할해 상위 2비트에 해당하는 부분과 하위 16비트의 부분에
  분할해, 각각 마지막에 return code의 추가된 캐릭터 라인으로서 보냅니다.





(4) MSComm의 OnComm 이벤트의 처리
  여러가지 조건의 이벤트 발생이 있으므로, 각각 처리를 기술합니다만,
  여기에서는 수신 처리와 통신 에러 처리만 기술해 나머지는 생략 하고 있습니다.
  수신 처리에서는, 수신한 텍스트 데이터를 그대로 수신 텍스트 박스에 표시
  하고 있을 뿐입니다.






(5) 스위프 개시 커멘드의 click 이벤트
   스위프 개시 버튼이 밀리면(자), 개시, 종료 주파수와 간격의 범위 체크를 했다
   그리고, 타이머를 스타트 시킵니다. 이후에는 타이머의 새치기 처리로 실행합니다.
   스위프 정지 버튼이 밀렸을 때에는, 단순하게 타이머를 정지시키고 있을 뿐입니다.





(6) 타이머의 이벤트
  타이머가 스타트 하면(자) 일정시간 간격으로 timer 이벤트가 발생해, 본처리가 실행되고
  . 여기에서는, 개시 주파수로부터 차례차례 지정된 주파수 간격으로 주파수를 서서히
  올리면서 주파수 데이터를 출력하고 있습니다. 출력 데이터는 역시 2개(살)로 분할해
  출력하고 있습니다.







【저주파 발진기의 외관】

이번은 아직 기판의 레벨에서의 유니트입니다만, 이것에 전원을 추가하면 훌륭한 발신기와
할 수가 있습니다.


저주파 발진 유니트의 전체 외관
CPLD에의 전원 전류가 크기 때문에
3 단자 레귤레이터에게는 방열판이 필요



PIC부와 RS232C 인터페이스부
발광 다이오드나 스윗치를 접속할 수 있는 연결기
도 준비되어 있습니다만, 이번은 미사용입니다.



아날로그부에서, D/A컨버터, 유효증폭기,
lowpass filter부입니다.
우단은 CPLD용의 4. 194304 MHz의 발진기입니다.



프린트 기판의 이면입니다. CPLD가 남은 핀은
모두 GND에 접속하기 때문에, 패턴은 간단
(이)가 됩니다.



JTAG 프로그래밍용의 케이블을 접속했다
곳입니다. 이것으로 언제라도 VHDL로 변경한 내용
에 갱신을 할 수 있습니다.

목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com