본문 바로가기
반응형

전체 글4359

[CCS] C2000의 sin 함수 C의 sin 함수는 double 변수를 사용한다. sin 함수에 float 변수를 사용하면 sin 함수 호출전 float을 long double로 변환하고 연산 후에는 long double을 float로 다시 변환한다. 변환에는 F32TOF64와 F64TOF32 명령어를 사용하고 각 명령어 실행에 1cycle을 사용한다. float 변수에는 sinf 함수를 사용해야 한다. C2000는 표준과 달리 float과 double이 32비트이고 long double이 64비트이다. 2023. 4. 10.
[CCS] fp_moode와 fp_reasonoc 설정 Code Composer Studio에서 fp_mode는 strict 또는 relaxed로 설정할 수 있다. strict는 표준에 따라 동작하는 것이고 relaxed는 정밀도는 줄지만 속도는 높아진다. relaxed로 설정하면 다음과 같은 동작을 한다. - 상수로 나누는 식은 역수로 곱한 식으로 변환 - sqrt, sin, cos, atan, atan2 함수를 inline 함수로 변환 - 하드웨어 TMU 사용 fp_reassoc는 부동소수점 연산에 결합법칙(Reassociation)을 적용 또는 미적용한다. 부동소수점 숫자는 원래 결합법칙이 적용되지 않는다. 결합법칙을 적용하면 정밀도가 조금 줄어 든다. 부동소수점은 다음과 같이 결합법칙이 성립하지 않는다. (1 + 3e100) - 3e100 ≠ 1 + .. 2023. 4. 10.
[C] sin과 sinf과 sinl의 차이 수학함수는 math.h에 정의되어 있다. sin의 정의 double sin(double arg) sinf의 정의 float sinf(float arg) sinl의 정의 long double sinf(long double arg) sinf와 sinl은 C99 버전부터 추가되었다. math.h에 정의된 수학함수는 다음과 같은 것들이 있다. exp / expf / expl log / logf/ logl pow / powf / powl sqrt / sqrtf / sqrtl sin / sinf / sinl cos / cosf / cosl tan / tanf / tanl tan / tanf / tanl asin / asinf / asinl acos / acosf / acosl atan / atanf / atnanl.. 2023. 4. 10.
Op-amp 반전 증폭기 (Reference 전압) Reference 전압이 있는 비반전 증폭 회로와 식은 다음과 같다. Differential 증폭 회로와 식은 다음과 같다. 여기서 RG=R1이고 RF=R2이다. 2023. 4. 10.
USB 멀티 허브 구매시 조심할 점 USB 멀티 허브는 USB 허브에 HDMI 또는 이더넷 포트 등이 결합되어 있는 제품이다. 처음 구매한 제품은 USB-C 포트 1개가 고장난 상태로 왔다. 윈도우에서 USB-C 인식을 못한다는 알람이 계속 떴다. 그래서, 반품하고 조금 더 비싼 대기업 제품을 구매했다. 이번에는 이더넷 포트가 고장나서 동작을 하지 않았다. 다시 중소기업 제품을 구매하였다. 3번 만에 정상 제품을 받았다. USB 멀티 허브는 한 제품에 많은 기능을 넣다보니 문제가 많고 아직 안정화되어 있지 않은 것 같다. 2023. 4. 10.
UI의 선택 요소 (구글 크롬과 MS 엣지의 UI 차이) 아래는 구글 크롬와 MS 엣지의 설정 메뉴이다. 구글 크롬은 메뉴가 몇개 되지 않는데 MS 엣지는 메뉴가 2배 정도 많다. 메뉴가 많으면 선택하는 시간이 다소 증가한다. 이러한 사소한 지연이 UI 쾌적함을 크게 감소시킨다. UI에서 사람이 어떤 것을 선택해야 할 때 선택 개수를 줄여야 편하게 사용할 수 있다. 2023. 4. 8.
[C] struct 내부에 함수 사용하기 C에서 struct 내부에 함수 포인터를 정의하여 C++의 class 멤버 함수 비슷하게 사용할 수 있다. C struct에 함수를 정의하는 방법은 다음과 같다. #include void Box_Add(int x); struct { int Value; void (*Add)(int x); } Box; int main() { Box.Add = Box_Add; Box.Value = 1; printf("Value=%d\n", Box.Value); Box.Add(5); printf("Value=%d\n", Box.Value); return 0; } void Box_Add(int x) { Box.Value += x; } 2023. 4. 7.
Synchronous 스위칭 레귤레이터 일반적으로 사용하는 Nonsynchronous 스위칭 레귤레이터는 스위칭 MOSFET 1개와 다이오드를 사용한다. 하지만, Synchronous 스위칭 레귤레이터는 다이오드 대신 2개의 MOSFET을 사용하는 방식이다. TI의 Synchronous 스위칭 레귤레이터(LMR36502)의 내부 구조는 다음과 같다. 내부에 MOSFET 2개가 있다. Nonsynchronous 스위칭 레귤레이터보다 Synchronous 스위칭 레귤레이터의 효율이 더 높다. 2023. 4. 7.
PMSM 모터 토크 계산식 표면부착형 PMSM인 SMPM의 토크는 다음 식과 같다. 매입형 PMSM인 IMPM의 토크는 다음 식과 같다. SPMSM은 q 전류에만 비례하지만 IPMSM은 q와 d 전류 모두의 영향을 받는다. 2023. 4. 7.
[C#] if 뒤에 탭을 치면 자동 완성되는 기능 해제 Visual Studio에서 기본적으로 if for 등의 명령어 뒤에서 탭을 치면 다음과 같이 자동 완성된다. 이 기능을 해제하는 방법을 찾는것이 생각보다 어렵다. 탐색기로 아래의 Snippets 폴더로 간다. C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC#\Snippets\1042\Visual C# 이 폴더에 아래와 같은 파일 있는데 이 파일들을 삭제하면 된다. 만약을 위해 압축한 후 파일을 삭제한다. 아래는 압축 후 파일 삭제한 폴더 2023. 4. 7.
[C] 범위 제한 매크로 타입 #1 #define ConstrainVal(val,min,max) ( (val > max) ? (max) : ( (val max) ? (val=max) : ( (val 2023. 4. 7.
PMSM 동기모터의 방정식 PMSM 동기모터의 회전좌표계에서의 방정식은 다음과 같다. 위 방정식에서 d 축과 q 축에는 상호간섭 성분과 역기전력 성분이 있다. 역기전력 성분은 q 축에만 있다. 전류제어기에서 위 두 성분을 Feedforward로 제어할 수 있다. 이 때 전류를 실제 측정한 값을 사용할 수도 있고 지령값을 사용할 수도 있는데 실제 측정값을 사용하면 측정 노이즈에 민감해진다. 2023. 4. 5.
[C#] serialPort 버퍼 크기 serialPort의 디폴트 읽기 버퍼 크기는 4096바이트이고 쓰기 버퍼 크기는 2048바이트이다. 속성창에서 ReadBufferSize와 WriteBufferSize 속성으로 변경하여 버퍼 크기를 변경할 수 있다. 버퍼 크기가 작으면 큰 데이터를 읽거나 쓸 때 데이터가 깨지는데 별도의 에러 메세지가 뜨지 않기 때문에 문제를 찾기 어렵다. 2023. 4. 5.
[C#] tabControl에서 Button의 PerformClick 문제 PerformClick은 Button을 누르는 메세지를 발생시킨다. 하지만, tabControl에서는 활성화된 tab의 Button만 PerformClick이 실행된다. 비활성화된 tab에 있는 Button에서는 PerformClick이 실행되지 않는다. tab을 변경할 때 PerformClick을 실행하면 정상적으로 동작하지 않는다. 2023. 4. 5.
스텝모터 구동 파워 IC (DRV8412/DRV8432) DRV8412/DRV8432는 풀브릿지 회로 2개가 내장된 IC로 스텝모터 1개 또는 DC 모터 2개를 구동할 수 있다. DRV8412는 방열패드가 IC 밑면에 있고 1개 브릿지 회로의 최대 출력전류는 3A이다. DRV8432는 방열패드가 IC 윗면에 있고 1개 브릿지 회로의 최대 출력전류는 7A이다. 브릿지 회로를 병렬로 사용한다면 DRV8412는 최대 6A이고 DRV8432는 최대 14A이다. 단락 보호, 과전류 보호, 과온 보호, 저전압 기능을 내장하고 있다. 외부 저항으로 값을 조절할 수 있는 CBC(Cycle-by-cycle) 전류 제한 기능을 내장하고 있다. 2023. 4. 4.
[CCS] 변수 메모리 부족 에러 Code Composer Studio 에러 메세지 program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment/blocking fails for section ".bss" cmd 파일을 다음과 같이 설정하면 RAM 공간은 충분한데도 위의 에러 메세지가 뜬다. RAMLS0 : origin = 0x008000, length = 0x000800 RAMLS1 : origin = 0x008800, length = 0x000800 .bss : > RAMLS0 |.. 2023. 4. 2.
스프링 공진 주파수 계산 다음 그림과 같이 물체가 스프링에 연결되어 있고 물체는 위아래로 진동한다. 후크의 법칙에 의해 스프링이 받는 힘은 다음과 같다. 물체의 운동 방정식은 다음과 같다. 위의 2차 미분 방정식의 해는 다음의 형태를 가진다. 위 식에서 공진 주파수는 다음과 같다. 공진주파수는 스프링 상수에 비례하고 질량에 반비례한다. 공진 주파수는 중력 가속도 g에 독립적이다. 2023. 4. 2.
아마추어 무선사 햄 (Ham)의 어원 아마추어 무선사를 햄 (Ham)이라고도 부른다. 19세기 기술이 부족한 유선 전신 운영자를 햄이라고 불렸고, 이후 기술이 부족한 무선사나 아마추어 무선사를 햄이라고 불렸다. 과거에는 ham이 서툰 또는 아마추어라는 뜻으로 사용됐지만, 현재에는 서툰 연기자라는 뜻의 ham actor 서툰 연기라는 ham performance 정도에만 사용된다. Ham은 보통 명사이며 HAM이 아니다. 2023. 4. 1.
[C#] 마샬링 경고 "~참조로 마샬링하는 클래스의 필드이므로 여기에 있는 멤버에 액세스​하면 런타임 예외가 발생할 수 있습니다." 위와 같은 경고가 뜨고 실행할 때 에러가 뜬다면 다음과 같이 수정한다. 수정 전 s = ((Form1)Owner).data.ToString(); 수정 후 float f = ((Form1)Owner).data; s = f.ToString(); 2023. 4. 1.
[C#] 다아알로그 창 띄우기 C#에서는 Form과 Dialog에서 동일한 Form을 사용한다. Form을 나타내는 코드는 다음과 같다. Form1 frm1 = new Form1(); frm1.Show(this); Dialog을 나타내는 코드는 다음과 같다. Form1 frm = new Form1(); frm1.ShowDialog(); Dialog에서 Ok나 Cancel 버턴 입력을 받는 방법 부모폼 Form1 frm = new Form1(); DialogResult result = frm.ShowDialog(); if(result == DialogResult.OK) { } Dialog 자식폼 Ok 버턴 처리는 다음과 같다. private void button1_Click(object sender, EventArgs e) { this.. 2023. 4. 1.
[CCS] 자동 괄호 삽입 하지 않기 CCS(Code Composer Studio)에서 자동 괄호 삽입 하지 않게하기 위해서는 다음과 같이 체크해제한다. 괄호 이외에 스트링 등의 자동 완성을 해제할 수 있다. 창 아래의 Show advanced settings를 해야 C/C++이 나타난다. 2023. 3. 28.
C2000 DSP 데이터 타입 TI의 C2000 DSP의 데이터 타입은 다음과 같다. char는 16비트로 8비트 데이터가 없다. int는 16비트이고 long이 32비트이다. printf(" %d ")의 스트링 포맷에서 int 변수는 %d %u를 사용하고 long 변수는 %ld %lu을 사용해야 한다. 2023. 3. 27.
Visual Studio Code 탭 스페이스 자동 변환 해제 Visual Studio Code는 디폴트로 탭이 스페이스로 자동 변환된다. 이것을 해제하려면 다음의 2개를 설정해야 한다. Tab Completion을 off로 하고 Detect Indentation을 체크 해제한다. 2023. 3. 26.
[CCS] 한글깨짐 해결 CCS (Code Composer Studio)에서 한글이 깨질때는 Window 메뉴에서 Preferences를 선택하고 다음과 같이 UTF-8을 선택하며 해결된다. 2023. 3. 26.
[CCS] Symbol 'IER' could not be resolved 에러 CCS (Code Composer Studio)에서 다음과 같은 Symbol '~' could not be resolved 에러는 Eclipse IDE에서 변수 등을 찾지 못할 때 발생한다. IDE에서는 찾지 못하지만 컴파일과 실행은 정상적으로 될수 있다. 컴파일은 정상적으로 된다면 IDE 문제이므로 다음과 같은 방법으로 에러 표시를 안하게 할 수 있다. 에러에서 마우스 우클릭한 후 Quick Fix를 선택한다. Quick Fix 창에서 Suppress problem "Symbol is not resolved"를 선택하고 Finish 버턴을 클릭한다. 에러가 난 문장에서 // @suppress("Symbol is not resolved") 라는 주석이 자동으로 생기면서 에러가 더 이상 표시되지 않는다. 2023. 3. 24.
[CCS] 다른 컴퓨터에서 컴파일 에러 TI의 CCS(Code Composer Studio)의 프로젝트를 다른 폴더로 복사하여 컴파일하면 컴파일이 안되는 경우가 있다. 폴더가 바뀔 때 프로젝트의 Properties에서 아래의 2개가 마음대로 바뀌는 경우가 있다. Configuation을 다시 설정하고 Linker command file은 Browse로 프로젝트의 cmd 파일로 다시 설정한다. CCS는 매우 불안정한 프로그램으로 버그가 많고 예상할 수 없는 동작을 많이 한다. 2023. 3. 24.
TMS30F28388D 메모리맵 아래 메모리맵에서 (1)~(4)로 표기된 것외는 CPU1과 CPU2가 동일한 메모리맵을 가지고 있다. (Datasheet p.246) 주요 데이터의 시작 주소는 다음과 같다. - 벡터테이블 : 0000 0D00 - RAM : 0000 8000 - FLASH : 0008 0000 - User OTP : 0007 8000 - Boot ROM : 003E 8000 위의 메모리맵에서 Boot ROM은 다음과 같다. 2023. 3. 23.
HWBIST 뜻 HWBIST는 Hardware Build-In-Selft Test Reset의 약자로 하드웨어 Build-In-Selft Test 후 되는 리셋을 뜻한다. TMS320F28388 메뉴얼에는 HWBIST에 대한 설명이 없고 28377 메뉴얼에 있다. 2023. 3. 23.
모터 상태 관측기 모터의 이산시간 상태방정식은 다음과 같다. 여기서, 상태 관측기(Luenberger observer)는 다음과 같다. 위 식을 정리하며 다음과 같다. ☞ 이산시간 상태방정식 관측기 2023. 3. 20.
Eigenvector와 Eigenvalue 정의 행렬 A가 있을 때 다음 식을 만족하는 v을 Eigenvector라고 하고 λ을 Eigenvalue라고 한다. 다음과 같은 행렬이 있다면 Eigenvector와 Eigenvalue는 다음과 같이 3개가 있다. 2023. 3. 20.
반응형