아학아학 444

PSOC - 디바이스 변경

PSOC의 단점이자 장점 PLD 기반이기에 CPLD나 FPGA 제품처럼 디바이스를 변경하여 사용할 수 있는 부분입니다. 초기에 판매했던 개발보드와 나중에 판매하는 개발보드가 이름은 동일한데 칩이 변경되거나 기제품을 단종시켜버려서 넘어가야 하는 경우가 있어 난처할 때가 있습니다. 그럴때 디바이스를 아래와 같이 변경하여 사용하면 됩니다. 변경되는 화면이 일반 펌웨어 엔지니어들에게는 조금 생소합니다. Keil이나 IAR 등에서도 IC를 변경하여 설정하고 사용하는 것이 있지만 그 선택하는 부분이 알테라의 디바이스 변경과 더 비슷한 느낌입니다. 사용하시는 분들은 당연히 아시겠지만 PLD와 MCU의 조합이기 때문입니다. 요즘 나오는 징크같은 칩을 보면 PSOC과 비슷하다는(사용법이 아닌 방식이) 느낌을 느낄 수 있..

W7500P - SWD와 PA3, PA4

사용을 하다가 실수로 사용하지 않는 SWD 단자인 PA3과 PA4를 Out으로 설정하였습니다. 설정 후에는 SWD로 라이팅이 되지 않아 고생했습니다. 몇몇 제품의 경우는 리셋을 누르고 있는 상태에서 라이팅을 누르고 리셋 버튼을 풀어주면 라이팅이 되었는데 W7500P는 그 방법이 되지 않아 고생하다 ISP가 지원된다는 게 갑자기 생각 났습니다.(물론 IO는 안 뽑아놨습니다. ㅠㅠ) SWD 단자 설정을 다시하고 ISP로 라이팅한 후 다시 SWD를 사용할 수 있었습니다. 칩을 바꿔야하나 하는 갈등을 했었는데... 다행이었습니다. ARTWORK 하면서도 실수를 했는데.. ST의 LQFP 타입보다 PIN 간격이 좁았습니다...... 안보고 그냥 했다가 개망..

PADS - 레퍼런스회로의 패턴 안테나 긁어오기

아트웍을 하려다 보니 내부테스트 제품인 것도 있지만 양산을 타도 저가 타겟 제품에 칩안테나를 사서 달기엔 아깝고(전파 도달거리가 길 필요도 없고 출력도 약하고) 안테나 설계 이런거 없이 빠르게 진행하는 게 답이겠다 생각했습니다. 그래서 같은 주파수를 사용하는 업체의 레퍼런스회로에 패턴 안테나를 가져와야겠다고 생각했습니다.(2.4G 대역은 참 많네요. 일부 회사는 안테나 특성에 대한 자료도 같이 제공합니다.) 찾은 PCB 파일을 얼른 열어서 "스윽" 하고 안테나를 복사해서 라이브러리에 복사해서 붙였는데 안되는 겁니다. 오잉? 하고 속성을 보니 COPPER 바로 2D 라인으로 바꿔서 긁어온 다음 부품으로 만들어서 저장했습니다. 터미널이 3, 4에서 마지막에 1, 2가 된건 꼼수 쓰다가 나중에 발견하고 바꿨습..

PADS - 부품 간격 맞춰가면서 놓기

아트웍을 하다보면 동일 간격을 유지하고 싶을 때가 있습니다. 예를 들어 IC랑 R/L/C가 이 정도는 떨어져 있어야 수삽이 편하겠다 이런 경우처럼요. GRID를 사용하거나 속성의 위치정보를 넣어서 하는 방법도 사용하지만 2D LINE를 사용하여 일정 사이즈의 사각형을 그린다음 그 라인에 맞춰서 놓는게 빠르게 빠르게 배치할 수 있어 편합니다. 일단 휙휙 놓고나서 다시 조정을 하지만 그 휙휙 놓을 때 참 편합니다.

PADS - COPPER POUR 겹쳐서 사용하기

전체를 그라운드 Copper Pour을 사용하고 내층에 일정 부분을 다른 Net의 Copper Pour을 사용할 수 있었습니다.사용하는 방법을 몰라서 내층은 Copper을 전부 직접 깔았었는데 이런 방법이 있었네요. 1. 내부 Copper Pour의 속성창을 엽니다. 2. Flood & Hatch Options를 눌러줍니다. 3. Flood priority 순위를 0으로 둡니다.(외곽 Copper Pour보다만 높은 우선순위면 될 것 같습니다.) 4. 이제 외곽 Copper Pour의 속성창을 엽니다. 5. Flood & Hatch Options를 눌러줍니다. 6. Flood priority 순위를 1로 둡니다.(내부 Copper Pour보다만 낮은 우선순위로 바꿔주면 됩니다.)

PID 제어

\Drivers\CMSIS\DSP_Lib\Source\ControllerFunctions안에 arm_pid_init_f32.c 파일을 Merge 시키거나 arm_math 파일만을 묶어서 라이브러리로 만들어 추가해도 됩니다. 실제 사용시에는 다양한 값을 받아서 PID 제어를 하면 될 듯 싶습니다.조금 더 부드럽게 값을 만져줄 수 있어 몇개의 Factor을 받아 2중 PID 구조를 사용하였습니다. #include "arm_math.h" /* Private typedef -----------------------------------------------------------*//* Private define --------------------------------------------------------..

LSM6DSL, LIS2MDL, LPS22HB

가속, 자이로, 온도, 압감지, 마그넷 센서LSM6DSL, LIS2MDL, LPS22HB소스와 통신하는 부분을 ST에서 제공하는 프로그램에서 발췌했더니 비효율적으로 되어있습니다.데이터시트를 보고 최적화와 함께 함수들을 만들어 써야합니다. void main(void){ACCGyroAxis_TypeDef ACCAxis, GyroAxis;MagnetAxis_TypeDef MagnetAxis;float fPress, ftemperature;float fBatt;uint16_t Batt_Percent; LSM6DSL_ACCGyroInit();LIS2MDL_MagnetInit();LPS22HB_TempPreInit(); LSM6DSL_ACCGyroEnable();LIS2MDL_MagnetEnable();LPS22H..