본문 바로가기

stm3288

STM32 + MFC ] 델타 로봇, RTOS 구조 변경 + 슬라이더 컨트롤을 통한 좌표 이동 제어 먼저 STM32 부분 구조를 좀 바꿨다. Task 는 다음의 3개로 구성된다. 1. 각 조인트에 달린 모터의 각도를 읽고 정기구학을 통해 엔드이펙터의 좌표를 UART로 송신하는 Task (수행 중엔 다른 Task 보다 Priority 가 높을 필요가 있다) 2. 엔드이펙터의 좌표를 변경하라는 command 가 들어왔을 때 역기구학을 통해 모터의 각도를 제어하는 Task 3. UART 수신으로 command 가 들어오면 처리하는 Task 이렇게 3개가 있다. Queue는 엔드이펙터 좌표값을 넣는 SetQueue와 커맨드 문자열(cahr 배열 20byte)을 담든 cmdQueue가 있다. Semaphores는 1번 Task에 보내는 신호로 ReadPosSem을 하나 놔두고 다 지웠다. UART3 인터럽트 콜.. 2022. 9. 14.
STM32 ] 델타로봇, UART로 Command Line Interface 구현 + 기판에 다시 납땜 (5) 2022.08.25 - [프로그래밍/C] - C ] 명령 프롬프트 구현 (함수포인터 사용) C ] 명령 프롬프트 구현 (함수포인터 사용) #include #include /* for strcmp() strlen*/ //#include /* for usleep() */ #include #include #define MAX_CMD_NUM 10 #define BUF_LEN 128 int cmd_continue = 0; typedef int cmd_func(int argc, char* argv[.. eteo.tistory.com 이전에 콘솔에서 구현했었던 명령 프롬프트를 가져와 STM32에서 UART로 Command Line Interface를 구현하고 간단하게 델타로봇을 제어해봤다. cli.h /* * cli.. 2022. 9. 4.
STM32 ] 델타로봇과 MFC 연동 + 컨베이어 벨트 추가 (4) 컨베이어 벨트 추가 컨베이어 벨트에 달린 모터는 델타 로봇에 쓰인 것과 동일한 모델인 AX-12A 모터이다. Daisy Chain으로 연결하고 ID를 3으로 지정하고, Baudrate를 115200으로 맞춰줬다. 처음엔 모터 혼이 저 큰 구멍에 위치하게 배치되어 있었는데 테스트 구동을 해보니 장력 부족으로 벨트가 잘 돌아가지 않는 것 같아 뒤로 당겨서 배치해주었다. #define AX_CONVEYOR_ID3 dxl_control.c void setEndless(uint8_t ID, uint8_t State) { if ( State ) { uint8_t length = 9; uint8_t packet[length]; packet[0] = AX_HEADER; packet[1] = AX_HEADER; pack.. 2022. 8. 28.
STM32 ] USB CDC (Virtual Port Com) 사용하기 Clock Configuration USB 클럭이 PLL에서 나오는 48MHz로 설정되어 있어야 한다. Activate Clock Source Ethernet Disable USB_OTG_FS 설정. Device_only 모드로 Middleware - USB_DEVICE 에서 Class For FS IP 를 CDC (Communication Device 클래스)로 설정 Generation Code를 하면 프로젝트 안에 아래와 같이 폴더가 추가된 것을 볼 수 있다. 그 중에서도 usb 송수신 관련된 함수들은 usbd_cdc_if.c 파일 안에 있다. 소스코드 /* USER CODE BEGIN 0 */ #define BUF_SIZE 30 uint8_t usb_buf[BUF_SIZE]; uint32_t cou.. 2022. 8. 26.
STM32 ] Free RTOS를 적용한 델타 로봇 프로젝트 프로젝트 인원 : 개인 사용 Tool : STM32Cube IDE 사용 언어 : C 2022.08.11 - [MCU/STM32 (ARM Cortex-M)] - STM32 ] Dynamixel AX-12A 모터 제어하기 (1) STM32 ] Dynamixel AX-12A 모터 제어하기 (1) 다음 진행할 개인 프로젝트인 델타로봇의 제어를 위해 먼저 AX-12A 모터에 대해 파봤다. 다이나믹셀은 모터, 제어기, 드라이버, 센서, 감속기 밑 네트워크 기능을 하나의 모듈로 만든 로봇 전용 액 eteo.tistory.com 2022.08.11 - [MCU/STM32 (ARM Cortex-M)] - STM32 ] Dynamixel AX-12 사용 - 델타로봇 제어하기 (2) STM32 ] Dynamixel AX-1.. 2022. 8. 22.
STM32 ] 역기구학(Inverse kinematics)을 통한 델타로봇 제어 (3) 로봇은 관절(Joint)에 붙어있는 모터로 조인트 각도를 제어하여 움직인다. 그리고 실제 그리퍼가 붙어 주어진 작업을 수행하는 말단 장치(End Effector)의 위치는 조인트 각도로부터 결정된다. 조인트 각도와 엔드 이펙터의 위치, 이 둘 사이를 변환하는 계산 과정을 기구학 이라고 한다. 이 중 정기구학(Forward Kinematics)은 일련의 조인트 각도가 주어졌을 때 엔드 이펙터의 직교좌표상 위치를 구하는 과정이고 역기구학(Inverse Kinematics)은 엔드 이펙터의 직교좌표상 위치에 대응하는 조인트 각도를 구하는 과정이다. https://www.marginallyclever.com/other/samples/fk-ik-test.html Delta Robot Forward/Inverse .. 2022. 8. 22.
STM32 ] Dynamixel AX-12 사용 - 델타로봇 제어하기 (2) 내가 프로젝트에서 사용하는 델타 로봇은 산업에서 많이쓰이는 병렬 로봇이며 3축 DOF (Degree of Freedom) 를 갖는다. 참고. 직렬로봇 : 1개의 직렬체인(다리)으로 구성되고, 모든 조인트에 구동기가 장착된다. 병렬로봇 : 엔드이펙터가 적어도 2개 이상의 다리에 의하여 지지되고, 각 다리당 1~2개의 구동기가 고정부 근처에 장착되며 나머지 조인트는 수동조인트로 구성된다. 일단 FreeRTOS를 사용했는데 현재는 하나의 Task만 쓰고 있다. Motor Init() 시점에서 속도를 미리 설정해서 지난번보다 부드럽게 움직이게끔 했고, UART Receive 인터럽트에서 세마포어 시그널을 보내서 시리얼 터미널로 PC에서 제어가 가능하게 끔 해놨다. 구현해놓은 커맨드는 우선 End Effector.. 2022. 8. 11.
STM32 ] Dynamixel AX-12A 모터 제어하기 (1) 다음 진행할 개인 프로젝트인 델타로봇의 제어를 위해 먼저 AX-12A 모터에 대해 파봤다. 다이나믹셀은 모터, 제어기, 드라이버, 센서, 감속기 밑 네트워크 기능을 하나의 모듈로 만든 로봇 전용 액추에이터로, 이전에 STM32보드로 모터를 다뤄본 적이 있지만 PWM 제어하던 그것과는 제어방식이 아주 많이 다르다. 스펙 핀맵 특이점은 여러 다이나믹셀 모터를 Daisy Chain 방식으로 연결해 하나의 버스에 패킷을 전송하면, 고유의 ID를 가지고 있는 각각의 모터들을 제어할 수 있다. 브로드캐스트 ID를 사용해 버스에 연결된 모터를 한번에 제어할 수도 있다. 그리고 위의 스펙을 보면 모터의 통신방식이 TTL레벨 Half Duplex 시리얼 통신인데 MCU의 RX, TX선과 연결하려면 아래와 같은 통신회로가.. 2022. 8. 11.
STM32 ] FreeRTOS + Semaphore ISR 사용 예제 추가설명 되지 않은 기타 설정은 이전 글과 동일하다. 2022.08.08 - [MCU/STM32 (ARM Cortex-M)] - STM32 ] FreeRTOS 사용해보기 STM32 ] FreeRTOS 사용해보기 정의 RTOS는 실시간 시스템을 위해 개발된 운영체제로, 멀티태스킹 환경에서 Task 처리시간을 일관되게 유지하기 위한 용도로 사용한다. RTOS는 시분할 시스템 하에서 우선순위 기반 스케줄링을 통 eteo.tistory.com 예제 코드 출처 : https://m.blog.naver.com/eziya76/220951244572 Mutex는 ISR(Interrupt Service Routine)에서 신호를 보내는게 불가능한데 세마포어는 ISR에서 신호를 보낼 수 있다. Task 중 세마포어를 대기.. 2022. 8. 8.
STM32 ] FreeRTOS 사용해보기 정의 RTOS는 실시간 시스템을 위해 개발된 운영체제로, 멀티태스킹 환경에서 Task 처리시간을 일관되게 유지하기 위한 용도로 사용한다. RTOS는 시분할 시스템 하에서 우선순위 기반 스케줄링을 통해 우선순위가 높은 task가 먼저 작업을 처리할 수 있게 함으로써 구현한다. 참고. 스케줄링 : 프로세스들에게 CPU 등 자원을 배정하는 것을 말함. 설정 Interface는 CMSIS_V2로 선택한다. CMSIS는 Cortex Microcontroller Software Interface Standard의 약자로 ARM Cortex 시리즈끼리의 호환성 및 이식성 증대를 위해 ARM사에서 정한 소프트웨어를 말한다. 그리고 CMSIS_RTOS 는 ARM사에서 RTOS의 API를 추상화해서 RTOS의 종류가 달라.. 2022. 8. 8.