지난 시간에 이어 계속해서 Adapter 패턴에 대해 알아보겠습니다. 지난 시간에는 Adapter가 필요한 콘크리트 코드에 대해 살펴봤고 이번 시간에는 실제적으로 콘크리트 코드가 interface 화 될 실제 driver interface를 살펴 보도록 하겠습니다. 궁극적으로 Adapter 패턴은 기존의 콘크리트 코드가 새로운 interface에 맞지 않아 중간에 Adapter를 끼워넣어 맞추는 역할을 하게 됩니다. 이번 시간에는 그중에 새로운 interface에 대해 살펴보겠습니다. typedef enum { DRIVER_ID_UART1, DRIVER_ID_UART2, DRIVER_ID_DISPLAY, DRIVER_MAX, }driver_id_t; typedef struct { driver_id_t i..
남이 작성한 코드를 내 코드에 적용해야 할 때가 아주 많습니다. 그러나 대부분 크기가 다른 볼트와 너트처럼 딱 맞아 떨어지지 않습니다. 이럴 땐 어떻게 해야 할까요? 중간에 양 쪽에 잘 맞는 나사를 하나 덧 대는 것으로 해결 할 수 있습니다. Adapter 패턴은 흔히 레거시 코드(Legacy Code)라고 불리는 예전에 작성된 코드들을 현재의 코드와 맞게 고치는 방법입니다. 다른 사람이 작성한 코드를 자신의 코드에 맞게 고쳐쓰는 방법으로도 좋습니다. 우리는 중간에 Adapter라는 Wrapper 함수를 만들어 Adapter패턴을 구현할 것입니다. 이번 예제에서는 display라는 콘크리트 코드를 driver라는 interface와 호환이 되도록 만들어 보겠습니다. 우선 display 콘크리트 코드부터 ..
예제1) http://dextto.tistory.com/140 예제2) http://kingoh.tistory.com/entry/Factory-Method-%ED%8C%A8%ED%84%B4 우선 위의 두가지 예제를 통해 Java에선 어떻게 Factory method를 구현했는지 보고 오시면 더 좋을 거 같습니다. C언어에선 class라는 개념이 없기 때문에 어떻게 보면 이전 글들에서도 알게 모르게 계속해서 Factory method를 써왔습니다. 이번엔 다시 한번 Factory method를 살펴 보도록 하겠습니다. 이번 예제는 display를 구현해 보도록 하겠습니다. MCU 기반 Firmware에선 display하기 위한 데이터는 프레임 버퍼라 불리우는 메모리에 RGB color를 쌓아 놓고 한번에 ..
Closed-loop control Load regulation 컨버터는 초기에 출력 전압을 제어하지 않는 개방 루프(Open Loop) 조건에서 테스트됩니다. 다음 단계는 출력 전압을 조절하기 위해 제어 루프를 닫는 것입니다. 폐쇄 루프(Closed Loop) 제어에서 Buck Convertor를 실행하려면 #define RUN_OPEN_LOOP 코드 행을 찾아서 // #define RUN_OPEN_LOOP로 변경하여 주석 처리합니다. 프로젝트를 다시 빌드한 다음 코드를 다운로드하고 디버그합니다. 컨버터가 실행되면 디지털 FMAC 보정기가 DAC 레지스터 값을 업데이트하여 컨버터의 부하 변화를 조절합니다. 부하 조정은 조이스틱을 사용하여 온보드 부하를 변경하고 출력 전압의 변화를 측정하여 테스트..
Source files Open-loop operation 폐쇄 루프 제어(Closed Loop)에서 Buck Convertor를 실행하기 전에 스위칭 파형과 Deadtime이 올바르게 작동하는지 확인하는 것이 좋습니다. 이 검사는 벅 컨버터의 개방 루프(Open Loop) 작동에서 수행할 수 있습니다. 이는 컨트롤러가 루프에서 벗어나고 벅 스위치가 고정된 듀티 사이클로 구동됨을 의미합니다. 예제 소프트웨어는 컴파일러 지시문이 정의될 때 FMAC 인터럽트가 활성화되지 않고 HRTIM 모듈이 고정 Duty 사이클로 설정되도록 작성되었습니다. 개방 루프(Open Loop)에서 Buck Convertor를 실행하려면 #define RUN_OPEN_LOOP 코드 줄을 찾아 주석 처리를 제거합니다. mai..
Application note 내용이 복잡하여 우선 예제 중심으로 번역해서 올리도록 하겠습니다. Digital peak current mode implementation Onboard comparator and DAC 이전에 설명한 아날로그 피크 전류 모드 구현은 피크 전류 감지 비교기(Comparator)를 사용하여 수요 피크 전류와 실제 측정된 전류의 교차를 감지합니다. 디지털 구현의 경우 이 피크 전류 감지도 스위치가 최대한 빨리 꺼지는 방식으로 구현해야 합니다. ADC를 사용하여 스위칭 간격으로 인덕터 전류를 여러 번 샘플링하고 이를 수요 기준 값과 비교하면 너무 느릴 수 있습니다. 따라서 디지털 구현은 아날로그 설계의 피크 전류 감지 비교기와 동일한 목적으로 온보드(on board) ..
B-G474E-DPOW1 Discovery kit 로 Buck convertor 를 구현한 Applicatoin note를 해석하는 시리즈를 시작해 보도록 하겠습니다. 영어원문 자료는 아래 URL을 참조하시기 바랍니다. https://www.st.com/resource/en/application_note/an5497-buck-current-mode-with-the-bg474edpow1-discovery-kit-stmicroelectronics.pdf B-G474E-DPOW1 디스커버리 키트에는 Synchronous buck converter 전력단이 포함되어 있습니다. Synchronous buck converter를 위한 전력단의 단순화된 회로도가 그림 3에 나와 있습니다. 그림3 Princip..
오늘 포스팅할 내용은 소프트웨어 Timer입니다. 소프트웨어 Timer는 MCU의 페리페럴 중 하나인 하드웨어 타이머와 다르며 오히려 PC 소프트웨어의 Timer에 가깝습니다. 구현하고자하는 소프웨어 Timer는 설정한 주기가 되면 자동으로 등록한 Callback 함수를 실행시켜 줍니다. 소프트웨어 Timer이기 때문에 Tick을 증가시켜줄 MCU의 하드웨어 Timer가 하나 필요합니다. 먼저 자주 사용하는 주기를 파악 합니다. 최소단위를 10ms으로 정하고 10ms 주기의 하드웨어 Timer를 하나 만들어 인터럽트에서 소프트웨어 Timer의 Tick을 증가시켜 줍니다. 먼저 헤더파일로 전체 윤곽을 만듭니다. Timer 핸들러의 typedef도 선언되어 있습니다. #ifndef SRC_TIMER_H_ #..