모터 드라이버 사용해보기 (TB6600 + FL42STH33)
이번에 구매한 모터 드라이버 연결해보려고 하는데 흐음.. 안터지겠지?
일단 모터는 아래의 스펙인데.. A상 B상은 그냥 대충 잡아 찍으면되나?
BLK A+
GRN A-
RED B+
BLU B- 로 일단 간주하고 ㄱㄱ. 안되면 서로 A/B바꾸면 되겠지 머 ㅋㅋ(아니면 반대로 돌거나)

2025.11.28 - [하드웨어/모터(motor)] - 스텝 모터 2상 4상

[링크 : https://blog.naver.com/roboholic84/222406097514]
+
ENA- ENA+ 에 연결하면 소비전류가 9 V 0.018 A 인데 연결하지 않으면 9 V 0.670 A를 먹고 홀딩 토크가 발생한다.
부논리인가??? 아무튼 alarm은 왜 불이 들어오느지도 모르겠고 멘붕모드..

[링크 : https://www.youtube.com/watch?v=OUE1JajuYGw]
내가 가진 건 유니폴라인가.. 일단 결선이 좀 다른 것 같으니 고민..
그런데.. 어짜피 black - green 묶으면 똑같지 않나?

[링크 : https://m.blog.naver.com/simonsayz/120123367852]
+
웃긴게(?)
0.5A로 하면 작동하고
1.0A로 하면 못돌고 떨기만 한다 -_-??
| 전류 설정 주의 스펙표의 0.95A/phase는 센터탭을 사용하는 유니폴라(하프코일) 기준값입니다. 지금처럼 센터탭을 빼고 풀코일로 쓰는 바이폴라 방식에서는 저항이 2배가 되므로, 같은 전류를 흘리면 발열이 2배가 되어 위험합니다. 일반적인 변환 공식(÷1.4)을 적용하면: 권장 전류 ≈ 0.95A ÷ 1.4 ≈ 0.7A TB6600 DIP 스위치를 0.7A 근처로 맞추고, 너무 뜨거워지지 않는 선에서 서서히 조정해보세요. 만약 이렇게 정확히 배선했는데도 진동만 한다면, 이전 답변의 5단계처럼 A+/A-(흑/녹) 극성만 한 번 바꿔서 테스트해보시면 됩니다. |
[링크 : https://claude.ai/share/37d30687-5cae-4547-8407-a48977073755]
속도는 아직 제어 못하고 있고 방향은 되는것 같은데..
일단 ENA는 확실히 부논리인것 같고(high로 인가되면 전원이 안들어감)
나머지도 그럼 같으니까.. 펄스를 반대로 줘야하나?
SET(high) - dir / CW
스텝은 pulse/rev 값을 따르면 된다.
12Mhz 에서 딜레이 없이 하면 작동안하는걸 봐서는 최소 펄스가 있는것 같은데..
1.2us~2.5us 정도라고 한다.
[링크 : https://easyelecmodule.com/tb6600-stepper-motor-driver-tutorial/]
usec 딜레이 만들어서 하면 더 좋았을테지만
귀찮아서 -ㅁ- 일단 실험적으로 200 넣으면 못 돌고 250은 나름 빠르게 돌아서 일단 만족
신호선의 + 에 연결하고 -에는 GND 연결해줌

PB12 - EN
PB13 - DIR
PB14 - PULSE
RED A+
BLU A-
BLK B+
GRN B-
| void init_tb6600() { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); // EN HIGH HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); // DIR HIGH } int val = 0; void gpio_proc() { int uslp = 250; int cnt = 800 * 5; sprintf((char*)usb_buf, "EN:RST DIR:RST %d pulse\r\n", cnt); CDC_Transmit_FS(usb_buf, BUF_SIZE); memset(usb_buf,0,BUF_SIZE); count++; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); for(int idx = 0; idx < cnt; idx++) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET); for(volatile int usec = 0; usec < uslp ; usec++); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); } HAL_Delay(2000); sprintf((char*)usb_buf, "EN:RST DIR:SET %d pulse\r\n", cnt); CDC_Transmit_FS(usb_buf, BUF_SIZE); memset(usb_buf,0,BUF_SIZE); count++; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); // EN HIGH HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); // DIR LOW HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); for(int idx = 0; idx < cnt ; idx++) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET); for(volatile int usec = 0; usec < uslp ; usec++); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); } HAL_Delay(2000); } |