페이지

글목록

2016년 5월 27일 금요일

[PSOC] PSOC4 CAPSENSOR Tunning

안녕하세요,

이번에는 PSOC의 대표적인 기능인 CAPSENSOR 에 대해서 알아보겠습니다.
제가 해 본 기능으로는 CAPSENSOR 터치 스위치와 약 10센치 정도 거리의 사람을 인식할 수 있는 Proximity 기능입니다.

CAPSENSE 는 말 그대로 콘덴서의 성격을 많이 띠는 것 같습니다.
그리고 아날로그 입력의 특성을 갖고 있습니다. 아날로그 입력을 갖고 있고 작은 신호를 증폭해서 인식을 하기 때문에 
매우 민감합니다.
그래서 튜닝을 잘 해야 제대로 성능이 나오는 것 같습니다.

저는 PSOC을 쓰면서 거의 CAPSENSE 기능을 사용하지 않았는데, 외주 개발을 하다 보니 
터치 스위치 기능을 많이 요구해서 어쩔 수 없이 사용해 보게 되었습니다. 
CAPSENSE 기능은 PSOC에서 처음 사용해 보았고, PSOC5,PSOC4 에서 동작시켜 보았습니다.

CAPSENSOR 사용법은 너무 방대하고(메뉴얼 내용이 정말 많음) 다양해서 여기서 자세한 설명은 못 하겠습니다.
그래서 동작 방법과 튜닝 방법만 우선 설명 드리겠습니다.

1. CAPSENSOR 만드는 방법.
먼저 CAPSENSOR PCB 패드를 기판에 위치시켜야 하는데, 제가 해 본 바로는 동그랗고 적당히 큰(지름 5~10mm 정도) 것이 좋습니다. 간격도 가능한 서로 많이 떨어져 있는 것이 좋습니다. 
너무 작거나 서로 간격이 좁으면 인식이 잘 안되거나 옆의 키를 눌렀는데 키가 눌러진 것으로 인식될 때가 있습니다.


위 그림에서 Guard Sensor 라는 것이 있는데, 이것은 물이 묻어도 정상 동작을 하게 하기 위한 보조 기능입니다.
방수 기능이라고 설명이 되어 있는데, 표현이 좀 이상하네요. ^^

여기까지 HW 설명이였고요, 자세한 내용은 메뉴얼을 찾아 보시면 좋겠습니다. 자료가 너무나 많습니다.

SW 에서는 topDedign.cysch 탭에서 CapSense CSD 콤포넌트를 끌어다 놓습니다.


우측에 EZI2C는 나중에 CAPSENSOR 튜닝할 때에 디버거와 I2C 통신으로 연결하기 위해 필요한 콤포넌트 입니다.
위의 테스트는 프로그램은, 예제 프로젝트 중에서 가져다가 좀 수정한 것이고 소스는 정말 간단합니다.
실제로 동작하는 코드와 튜닝하는 코드가 다르므로, 
튜닝할 때는 프로젝트를 따로 1개 만들어서 CAPSENSOR의 포트만 맞게 설정하여 테스트하시기 바랍니다.

이 글을 시작은 했는데, 짧게 끝날 내용이 아니네요. ㅜㅜ

일단 튜닝 쪽만 다뤄야겠습니다.

다음은 CAPSENSE 콤포넌트의 설정입니다.
General tab 은 다음과 같습니다. default 로 표시한 부분이 CAPSENSOR 콤포넌트의 기본 세팅인데 튜닝 시 설정은 조금 다르네요.


그 다음으로 Widget tab 으로 가면, 좌측 상단의 + 버튼을 눌러서 여러 종류의 터치스위치를 추가, 제거(선택해서 Delete 키) 할 수 있습니다.

각각의 터치 스위치를 선택하면 CAPSESE 의 감도와 인식 Threshold 값 및 노이즈 처리값 등등을 바꿀 수 있습니다.
Scan resolution 을 높이면 감도가 높아져서 좀 더 정밀하게 값을 세팅할 수 있고, 보통 터치센서와 사람의 손가락 사이에 플라스틱 같은 소재로 거리를 띄워서 사용하는데, 감도를 높여야 어느정도 거리에서 손가락을 댔을 때 인식을 합니다.

다음은 Scan order tab 인데, 이부분은 자세히 조사를 못해봤습니다. 나중에 보충하겠습니다. 
현재는 전체 스캔 시간 정도만 참고하고 있습니다.

다음은 Advanced Tab 입니다. 이 부분은 HW 설계와도 좀 관련이 있습니다.
shield 센싱 핀의 유무에 따라서 shield 를 Enable/Disable 할 수도 있고,
Shield Tank Cap 의 사용 유무에 따라 Shield Tank Capacitor 를 Enable/Disable 할 수 있습니다.
Guard sensor 는 water proof(방수) 기능을 추가할 경우 HW에서 패턴으로 터치 센서를 감싸도록 설계한 후에 사용하는 기능이고,
나머지 부분은 아직 제대로 파악을 못했습니다. 나중에 자세한 내용 추가하겠습니다.

다음은, Tunning Helper Tab 입니다.
여기서 Enable tune helper 를 체크해야 튜닝 기능을 사용할 수 있습니다.
컴퓨터에서 튜닝 앱을 실행시켜서 PSOC IC 와 연동해서 동작시켜야 하는데, I2C 통신을 사용합니다.
따라서 EZI2C 콤포넌트를 추가해서 EZI2C 콤포넌트 이름을 Instance name for the SCB component 에 넣어 줘야 합니다.

이렇게 전부 설정했으면, EZI2C 콤포넌트의 설정을 또한 살펴봅시다.
configuration tab은 EZI2C 를 선택하면 되고,

EZI2C Basic TAB 에서 기억할 것은 Primary slave address(7-bit) 에 해당하는 주소하고,
Sub-address Size(bit) 는 16 bit 로 설정하는 것으로.. EZI2C 설정은 이 2가지 외에는 신경 쓰실 필요는 없습니다.

이렇게 설정을 하면 모두 끝난 것입니다.

튜닝용 소스코드는 모두 똑같습니다.
main.c 에 있는 main() 함수 내용 몇 주만 추가하면 됩니다.

int main()
{
    /* Enable global interrupts */
    CyGlobalIntEnable;
    
    /* Initialize CapSense CSD and EzI2C Start the sensor scanning loop */
    CapSense_CSD_TunerStart();
    
    while(1u)
    {
        /* Process scanning results and communicates with Tuner GUI */
        CapSense_CSD_TunerComm();
    }
}

컴파일해서 프로그램을 다운로드하고,
디버거의 I2C 신호(SCL,SDA)를 PSOC4 의 핀에 맞게 연결을 합니다.



PSOC Creator 의 TopDesign.cysch 탭에서 CAPSENSE 컴포넌트를 선택하고 마우스로 우클릭 해서 Launcher Tunner 를 실행하면 튜닝 앱이 실행됩니다.


튜닝 앱 실행.


여기서 끝이 아니죠. 설정에서 I2C 어드레스 및 관련 설정을 맞춰야 합니다.
이전에 CAPSENSE 의 EZI2C 의 주소(0x08)와 Subaddress 길이를 서로 맞춰 주고 튜닝 툴의 좌즉 상단의 Start 버튼을 눌러주면 실시간으로 값을 바꿔보면서 튜닝을 진행하실 수 있습니다.


튜닝은 많이 해보면서 적당한 값들을 찾아가면 됩니다.
나중에 튜닝했던 데이터를 본 프로그램에 적용하면 큰 문제없이 동작할 겁니다.

[소스코드 링크]

댓글 없음:

댓글 쓰기