페이지

글목록

2017년 3월 21일 화요일

플렉시블 LED 전광판 소개, Cubemx v4.16 & v4.19 download

ST의 CUBEMX 최근 버전이 동작이 잘 안되서, 구버전을 받을 때까지 잠깐 쉬는 중입니다. ^^
기다리는 동안 회사 제품을 소개해 봅니다. 

지금까지 거의 3년간 만들어온 제품 동영상입니다.

현재는 좀 더 업그레이드된 제품을 개발 중입니다.
ESP8266을 추가해서 Wifi 기능을 넣어, 스마트폰이나 PC에서 동영상 데이터를 Upload 하도록 할 계획입니다.
그리고, 베젤이 없는 플렉서블 LED 전광판을 만들고 있습니다.

관심있으신 분은 smart@smartlogic.co.kr 로 연락하시기 바랍니다.



CubeMX 다운로드 받았습니다. 다음 링크 입니다. 휴~~ 다행
[ CUBEMX downlod ]
1. cubemx v4.16 : Link
2. cubemx v4.19 : Link


[플렉시블 LED 전광판 동영상 #1] 



[플렉시블 LED 전광판 동영상 #2] 



[플렉시블 LED 전광판 동영상 #3] 



[플렉시블 LED 전광판 동영상 #4] 

Flexible Led Sign-3 (FISI, CES 2017)

Flexible Led Sign-2 (FISI, CES 2017)

Flexible Led Sign-1 (FISI, CES 2017)

2017년 2월 27일 월요일

[IC 소개] 앞으로 사용할 MCU 키트 소개.

오늘도 사장님께서, 선물로 여러가지 장나감들을 사 주셨다. ^^.

1. XMOS MCU 개발 키트.(8-CORE,2000 MIPS)

2. STM32F769 개발 키트(CORTEX-M7)


3. STM32F030 개발 키트 (CORTEX-M0)



선물인가? 짐인가? (똥인가? 된장인가?)

[nordic BLE] J-Link f/w 복구 방법

간만에, nordic nRF51-DK (PCA10028) 을 사용하게 됐는데,
KEIL 에서 어찌어찌 하다보니 JLINK 가 업데이트 되고나서 LD5(LED)가 빨리 깜박이면서,
동작이 안됐습니다.

예전에도 한 번 같은 일을 겪었었는데, 기억이 하나도 안나서 구글에서 검색해서 겨우 알았습니다.
(더우기, 제 USB-HUB 는 가끔 USB 장치를 인식하지 못하는 경우가 많아서, 
컴퓨터의 일반 USB 포트에 연결해야 정상 동작을 하는 놈이여서 엄청 고생을 했네요)

J-LINK 복구 방법은 간단합니다.

1. NORDIC 홈페이지에서 nRF5x-OB-JLINK-IF 를 눌러서 J-LINK Firmware 를 다운 받습니다.



2. PCA10028 보드의 리셋 버튼을 누르고 USB 전원을 연결(POWER ON RESET)하면, 
   LD5(LED)가 약간 늦은 주기로 플래슁한다.

3. 이와 동시에 USB Drive 가 1개 생성되면, 1번과정에서 받아둔 J-LINK Firmware 를 copy-to-paste 한다.
4. 복구 끝.

2017년 2월 24일 금요일

[ALLEGRO] 각종 Part FootPrint 를 무료로 주는 사이트

알레그로로 Footprint 를 만들려고 하는데 너무 귀찮아서,
유튜브를 찾아보다 발견했습니다. 아마도 가장 귀찮은 것이 풋프린트 새로 만드는 것일겁니다.

다음 사이트로 가셔서 풋프린트 다운 받으시면 됩니다.


Importing 하는 방법은 다음의 유튜브 영상을 참조 하시기 바랍니다.



2017년 2월 18일 토요일

[IC 소개] TR 작은 사이즈 NPN/PNP

요새 기술이 대단하네요. TR 크기가 1x1 mm 밖에 안되네요. 헐~~. 그것도 듀얼(2-ch).

[NPN-2-Channel]


[PNP-2-Channel]

[PSOC5] LED Driver 콤퍼넌트 테스트 (새로 추가된 녀석 ^^)

이번에는 꽤 유용한 콤포넌트가 PSOC5에 추가되었다.
DMA 를 사용해서 CPU에 부담이 없이, LED 메트릭스를 Dynamic Scan 방식으로 제어가능하다.
또한 PWM으로 LED 밝기 조절 기능까지 들어있고, 7-SEGMENT 와 심지어 14,16 SEGMENT 도 콘트롤할 수 있다.

저는 7-SEGMENT 와 LED 비트제어 만, 제공되는 여러 함수를 이용해서 사용해 봤는데,
14,16-SEGMENT 는 써 본적이 없네요.

아뭏든 LED를 더 많이 제어하려면, MCU 중에서 다리가 많고 싼놈으로 고르시기 바랍니다.
이 콤포넌트는 seg out 이 24개까지, com out이 8개까지 가능해서,
동시에 출력 가능한 최대 LED 갯수는 24 x 8 = 192개이다.

예전에 LED 드라이브 IC 를 4천원에 SPI/I2C 방식으로 MCU에 붙여서 사용했었는데,
포트가 좀 필요하지만 LED 드라이브 IC를 안 써도 된다. 
대신 TR을 포트 갯수 만큼 달아 줘야 하지만 가격 대 성능비는 괜찮은 것 아닌가? (IC 크기가 문제없는 곳이라면)

프로그램에서는, 제공되는 함수로 디스플레이를 바꾸고 싶을 때 한번만 레지스터를 써 주면 끝이다.
계속 타이밍에 맞춰서 출력해 줘야하는 수고스러움 없이, 관심 끄고 다른 프로그램 코딩하면 되겠다.

다음은 PSOC5 에 연결할 COMMON-Cathode 타입의 7-SEGMENT 회로도 중, 
전류를 증폭하기 위해서 사용한 TR 회로 입니다.
PNP TR 출력에 연결된 저항을 바꿔서 최대 밝기를 조절해 줄 수 있다. 
다이나믹 스캔 방식이라 저항을 너무 크게 달지 않는 것이 좋다. (크면 어둡다)
대략 51 옴 정도 달면 적당할 듯 하다. (전류가 너무 많이 흐르게 했을까요? 다시한번 확인을 해 봐야겠네요.)
오렌지 색 1608 LED가 전압강하 2.2V 이네요.
따라서 전원을 3.3V 사용시 LED를 통해 흐르는 전류를 20mA로 만들려면,
1.1V(3.3V-2.2) / 0.02 = 55 옴 으로, 전력은 55*0.02*0.02(R x I x I) = 0.022W 입니다.
즉 1/45 W 네요. ^^.

51옴 정도 달면 되겠습니다.





다음은 TR 에 연결되는 FND 와 LED 회로 입니다.


위와같이 회로는 준비 됐고, PSOC5 의 새로 생긴 콤포넌트인 LED Segment and Matrix Driver [v1.10] 을 살펴보자.
TopDesign.cysch 에, 일단 제가 다 만들어 놓은 콤포넌트를 보겠습니다.
세그먼트 출력 8개, 코먼 출력 8 개로 7-SEGMENT 7개와 8개의 LED를 제어하도록 구성했습니다.



다음은 다리가 많은 모델로 고른 PSOC5 IC 입니다. 다리는 많은데 가격은 좀 비싼 놈입니다. 제가 열전대 값을 읽으려고 20-비트 ADC가 있는 놈으로 고르다 보니 가격이 비싸져버렸네요.
저와 같은 용도가 아니면 다리가 좀 많고 가격이 싼 PSOC5를 고르는 게 좋습니다.



다음은 콤포넌트 설정입니다. 여러가지를 설정할 수 있는데, 최대 출력 개수는 segment 24, common 8개 이고,
스캔 주기도 조정할 수 있습니다. 적당히 테스트하면서 조정하면 됩니다. 
나머지 설정들은 보면 아시겠죠? (common Cathode/Anode 에 따라 드라이브 타입을 조정해 주시면 되고, 내부 클럭으로 돌릴지 외부 클럭으로 돌릴지, 밝기 조절을 할지 말지.. 등이 있습니다)



이렇게 설정을 마치고 나면 자동으로 LED 드라이브 파일이 생성되고, 우와 함수 참 다양하죠?
테스트용으로는 몇 개 안쓸 것입니다. ^^



다음은 제가 만든 코드 예제 입니다.
7개의 7-SEGMENT 에 1,2,3,4,5,6,7 이 켜지고 , LED 8개가 다음과 같이 켜질 것입니다.
실제 7-SEGMENT 와 LED가 켜진 사진을 못 올리는 것이, 맡겨 놓은 회사에서 회로를 잘못 바꿔서 최종으로 
Common-Anode 타입으로 만들어 와서 지금 설명하는 내용과 좀 다릅니다. 이해 바랍니다.


다음은 main.c 파일에 있는, 테스트용으로 제가 만든 예제 소스코드입니다. (아주 간단하게~~^^)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* ========================================
 *
 * Copyright YOUR COMPANY, THE YEAR
 * All Rights Reserved
 * UNPUBLISHED, LICENSED SOFTWARE.
 *
 * CONFIDENTIAL AND PROPRIETARY INFORMATION
 * WHICH IS THE PROPERTY OF your company.
 *
 * ========================================
*/
#include "project.h"
int main(void)
{
    LED_Driver_1_Start();
    
    CyGlobalIntEnable; /* Enable global interrupts. */
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    LED_Driver_1_PutChar7Seg('1',0);
    LED_Driver_1_PutChar7Seg('2',1);
    LED_Driver_1_PutChar7Seg('3',2);
    LED_Driver_1_PutChar7Seg('4',3);
    LED_Driver_1_PutChar7Seg('5',4);
    LED_Driver_1_PutChar7Seg('6',5);
    LED_Driver_1_PutChar7Seg('7',6);
    LED_Driver_1_SetDisplayRAM(0x55,7);
    
    for(;;)
    {
        /* Place your application code here. */
    }
}
/* [] END OF FILE */
cs



마지막으로 위의 내용에서 설명드린 것과 그대로 동작하는 프로젝트 파일을 첨부합니다. [Link File]

[PSOC5] TR(MMBT3904),열전대 온도측정(프로그램 첨부)

이전 글에 TR(MMBT3904)의 내부 다이오드를 이용해서 오도 측정하는 방법 중, 
H/W 상의 설명은 충분하다고 생각이 됩니다.
(사실 저도 정확하게 잘 모릅니다. 그냥 실제로 써 먹을 수만 있으면 된다고 생각하고 있습니다. ^^)

다이오드 온도 센싱을 위해 수학함수 쓰다가 컴파일러 오류 나서 고치고,
온도 값을 받아서 UART 에 floating point 로 출력하다가 컴파일러 오류나서 고치다 보니 한동안 멍~하네요.

이제 겨우 본론으로, 간단하게(저도 잘 모르는 관계로) 다이오드 온도측정과 열전대 온도측정에 관해서 말씀 드리겠습니다.
일단 동작은 모두 잘 됩니다.

다이오드(TR 내부의 다이오드) 온도센싱의 회로도와 열전대 회로도를 다시 한번 올려 보겠습니다.

[#1 다이오드 온도측정 회로도]




[#2 열전대 온도측정 회로도]



추가로 이번에 안 사실인데, 열전대를 거꾸로 달면 온도가 올라갈수록 전압이 낮아져서 온도가 떨어지는 것처럼 동작하더군요.
주의 : 열전대는 방향이 있습니다. 


다음은 PSOC5 의 콤포넌트를 배치하는 Topdesign.cysch 입니다.


다른 MCU와 좀 색다른 프로그램 환경이지만, 
1. Differential 20-Bit ADC 5ch 사용하고, 
2. current mode DAC 1개 , 
3. 칩내부 온도 센싱 (프로그램에서는 사용 안했음),
4. 열전대 온도 테이블 계산 콤포넌트,
5. UART 1개
를 사용했습니다.

[첨부한 예제 프로그램 설명]
Diode 로 측정된 온도를 프로그램에서는 Cold Junction Temperature 라고 부르고,
열전대로 측정한 온도를 Hot Junction Temperature 라고 부르더군요.
2개의 온도를 측정해서(물론 여러가지 처리를 합니다. sw 노이즈 필터, 열전대 테이블 보상 등등),
서로 더해주면 최종 열전대로 측정된 온도가 나옵니다.
이것을 UART로 출력 합니다.

이정도면 됐을까요? 이해 안되시면 댓글에 질문하시고, 저도 잘 모르지만 한번 해 본 것밖에 차이는 없습니다. ^^

예제 파일 첨부합니다. [link file]

[PSOC5] printf/sprintf 함수에서 floating point 값 표시 (컴파일러 버그)

아~ 놔.. 열통 터지네. 이번에는 sprintf 함수에 아무리 float 값을 써도 이상하게 나와서 찾아보니,
이것도 컴파일러 문제일 듯 하네요. 또 라이브러리쪽에 뭘 써 넣어야 하는군요.

다음과 같이 수정하면 printf/sprintf 함수에서 floating point 값을 표시할 수 있습니다.

1. 프로젝트를 클릭하고, 다시 마우스 우클릭한 다음 Build Setting 을 클릭.






2. Linker 의 Use newlib-nano Float Format 을 True 로 고치고, 
command line 의 Custom Flags 에 -u _printf_float 라고 써 넣음.


[PSOC5] 수학 함수(log 함수) 사용 방법(컴파일러 버그)

열전대의 온도를 측정하기 위해, 다이오드로 열전대의 콘넥션 부분의 온도를 측정해야 한다.

열전대는 두 선의 상대적인 온도차를 측정하는 것이기 때문에 현재 온도값이 필요하므로,
현재 TR(MMBT3904) 안에 있는 다이오드로 온도를 측정하도록 회로를 구성하고 프로그램을 만들었다.

그런데, 다이오드 온도측정에 필요한 함수 중에 log() 라는 수학함수가 있다.
이 함수를 쓰려면 #include <math.h> 만 추가해 주면 에러가 났다.

이유야 어떻든 불편하긴 한데, 컴파일러의 문제로 생각된다.
사용자의 기술적인 문제는 아니므로, 원인을 알 필요는 없다.

이 문제를 해결하려면, 다음과 같이 하면 된다.

1. 프로젝트를 클릭하고, 다시 마우스 우클릭한 다음 Build Setting 을 클릭.


2. 아래 그림처럼 Linker 를 클릭하고 Additional Libraries 에 m 이라고 써준다.

2017년 2월 17일 금요일

[IC 소개] 다이오드로 온도 측정하는 방법

제품에 온도 센서로, 일반적으로 흔히 사용하는 TR(MMBT3904)를 적용해 봤습니다.
20bit - ADC 를 사용해서 CPU 가격이 올라가서 부담되시면 12비트 ADC 회로도 Cypress에서 제공하고 있습니다.

저는 열전대를 사용해야 하므로 좀 더 정밀한 ADC가 필요해서 20비트 ADC를 사용하다 보니,
TR쪽도 남은 ADC 채널에 연결했습니다. 열전대는 각 단자의 온도차만 센싱을 할 수 있어서, 기준 온도가 필요합니다.
그래서 열전대가 위치한 가장 가까운 곳에 이 TR 온도센서를 연결하게 되었습니다.
이 TR 센서는 다른 온도센서보다 정말 저렴합니다. 10원정도 밖에 안하거든요. ^^

범용 트랜지스터를 선택하는 이유는 덜 엄격한 정확도 요구 사항과 함께 매우 낮은 트랜지스터 비용입니다.

[왜 TR의 다이오드를 사용하는가?]
일반 다이오드 제조사와 종류가 어마어마 하게 많고 특성도 각각 많이 달라서, 그나마 Transistor에 들어있는

다이오드가 훨씬 더 규격적이고 제조사마다 차이가 적어서 그렇다고 합니다.

[실제 회로기판에 장착된 사진]


참고자로로서 Cypress 의 AN60590 문서가 있고, 샘플 프로그램도 함께 제공되어 있어서 사용했습니다.
문서를 좀 더 자세히 읽어 봐야 하는데, 읽어 봐도 너무 어려운 수학,물리 계산식들이 나와서 정확히 적용은 못하고 있습니다.
하지만 온도에 따라서 값이 오르고 내리는 것은 확실헀습니다.

테스트를 해 보니, TR을 딥타입 --> SMD 타입으로 바꿔서 사용해서 그런지 온도 값이 너무 높게 나오더라고요. ^^
아마도 딥타입(TO-92)과 SMD 타입(SOT-23)의 특성이 좀 다른 것 같습니다.
TR 자료를 좀 더 찾아보니 다음과 같은 내용이 있네요. TR이 패키지마다 온도 특성이 다르네요.

이 내용으로 적당한 계산값을 찾아 봐야 할 것 같은데, 해 보고 자료 업데이트 하겠습니다.


[업데이트]
좀 더 구글링을 해서 자료를 찾아봤습니다. 그 결과, 온도의 차이는 Package의 차이때문에 생기는 문제는 아닌 것 같습니다.온도의 차이는 IDEALITY FATOR 에 따라 발생하는데,  제조 회사마다 IDEALITY FATOR가 조금씩 다르다고 합니다.다음은 MICROCHIPS 사에서 제공하는 TR 특성 조사 문서입니다.
http://ww1.microchip.com/downloads/en/AppNotes/00001838A.pdf

여기서 테스트에 사용한 TR에도 MMBT3904가 있었습니다. 제가 사용한 TR의 제조사를 몰라서 팩터값을 잘 모르겠네요.만약 TR로 온도를 측정하려고 한다면 제조사와 파트넘버를 잘 보고 사야겠습니다.
아니면 IDEALITY FATOR를 측정하는 방법을 알아야 하고, 측정 장비도 있어야 겠고 고생할 시간도 있어야 겠죠.


다음은 위의 링크에서 추출한 제조사 별 TR 특성표입니다.



다음은 제가 PSOC5에서 적용한 TopDesign.cysch 회로입니다.


참고로 한 AN60590 문서의 ref 회로는 다음과 같고요.


이 예제 프로그램에서 TR의 특성에 따른 상수(Ideality Fator)가 있는데, 
이 값을 일단은 대 충 바꿔서 현재 온도와 비슷하게 맞췄습니다.
아직까지 실제 온도와는 좀 다른 것 같은데, 이 값을 고치는 것은 맞는 것 같습니다.
다음은 이 상수가 위치해 있는 singleDiode.h 파일의 내용입니다.
(위의 Microchips 사의 TR 특성표 참조)

예제의 값은 다음과 같고, 
1
2
3
4
/* For the 2N3904 transistor that comes with the CY8CKIT-025 kit,
*  the ideality factor of 1.004 is used.
**********************************************************************************/
#define IDEALITY_FACTOR ((float)1.004)
cs

제가 수정한 값은 다음과 같습니다.
1
2
3
4
5
/* For the 2N3904 transistor that comes with the CY8CKIT-025 kit,
*  the ideality factor of 1.004 is used.
**********************************************************************************/
//#define IDEALITY_FACTOR ((float)1.004)
#define IDEALITY_FACTOR ((float)1.15)
cs