뉴티씨



  • HOME
  • 고객지원
  • 질문답변

 

 
AM-MS2 및 모터 구동 문의
 글쓴이 : 관리자
작성일 : 23-08-02 16:05
조회 : 784  
   https://youtu.be/aZ2kPfAfR4Y [634]
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
 
우선, 소스상의 문제 같아 보이지는 않습니다. 다만, 전류 바이어스 문제 같습니다.
MS2모듈의 보드에 보면 파란색바탕에 노랑색 드라이버구멍 가변저항이 있을 텐데,
그것을 부하에 따라서, 적절히 돌려서 바이어스를 맞춰 주셔야 합니다.

모터와 드라이버에서는 열이 날 수 있으며, 그것은 자연스러운 증상입니다. 다만, 열이 과다하다 싶을 때에는
드라이버 모듈의 방열판에 더 큰 방열판 역할을 할 수 있는 것을 달아주시는 것이 좋겠습니다.
하지만, 열이 느껴지는 정도라면 큰 문제는 없습니다. 바로 잡았을 때 데일 정도면 문제가 좀 되므로, 방열판을 꼭 달아주셔야 하구요. 뜨끈뜨근한 정도는 아무 문제가 없습니다.

일단, 첨에 테스트하실 때에는 딜레이를 현재의 5배 정도 주고 해 보시고, 속도는 한바퀴 돌 때마다 두 배씩 증가시키는 방법으로 일정 속도까지 증가시키시면 좋지 않을까 싶습니다.

속도 제어시 오버플로우 타이머를 이용하여 프로그래밍 하는 것이 보다 정확하고 잘 동작합니다.
또한,꼭 자주하는 질문에서 MS2로 검색하여 올려둔 자료를 참조하시기 바랍니다.

감사합니다.
>
>
> 1. 모터드라이버: AM-MS2
> 2. 모터제품명: 시나노겐시 42각 스테핑 모터 STP-43D1010
>
>
> 안녕하십니까, 문의사항이 있어 연락드립니다.
> 현재 저희는 AM-MS2모터 드라이버+시나노겐시 STP-43D1010 모터 두 개를 연결하여 모터를 구동하고 싶습니다.
>
> 구매 후 뉴티씨에서 제공하는 테스트 코드와 함께 운행여부를 확인하였더니,
> 왼쪽 포트는 정상적으로 출력이 되는 것 같으나, 우측 포트가 원활히 작동되지 않았습니다.
> 힘도 더 약할 뿐더러, 반시계방향 CCW로 코딩을 하였음에도 불구하고, 커플링 장착시 모터가 그그극 걸리며,
> 손으로 잡으면 반시계방향이, 시계방향으로 (혹은 그 반대로) 극까지 바뀌는 현상이 있습니다.
>
> 모터 문제가 아니라고 확신한 점은, 비교적 정상적이었던 왼쪽 모터를 다시 오른쪽 포트에 연결하면
> 동일 증상이 나오며, 반대로 오른쪽 포트에 있던 (문제증상이 발현되었던) 모터를 다시 왼쪽 포트에 연결하면
> 정상동작하였습니다.
> 전원인가는 24V, 약 7.5A 가량 인가되어있는 상태입니다.
>
> 추가적으로 SLA7062M 칩셋이 왼쪽은 발열이 없지만, 우측은 손으로 만졌을 때 바로 느낄 정도로 발열이 존재합니다.
>
>
> 기술적으로 어떤 문제가 있는지 자문을 구하고자, 간절히 기술문의 드려봅니다.
> 사용했던 코드와 작동영상, 모터 데이터시트는 밑에 첨부하겠습니다.
> 확인해 주셔서 감사합니다.
>
>
> ==============================================================
>
> [테스트 코드]
> #include <avr/io.h>
> #include <avr/interrupt.h>
> #define MOTOR_PORT PORTE // 스테핑 모터 연결 포트
> #define MOTOR_PORT_DDR DDRE // 스테핑 모터 연결 포트의 DDR REG
> #define MOTOR_ENABLE (MOTOR_PORT = MOTOR_PORT|0x80)
> #define MOTOR_DISABLE (MOTOR_PORT = MOTOR_PORT&0x7f)
> #define MOTOR_STEP_M0 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x00) //2
> #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) //4
> #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) //8
> #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) //16
> #define MOTOR_LEFT_CLK (MOTOR_PORT = MOTOR_PORT^0x01)
> #define MOTOR_RIGHT_CLK (MOTOR_PORT = MOTOR_PORT^0x04)
> #define MOTOR_LEFT_CW (MOTOR_PORT = MOTOR_PORT&0xfd)
> #define MOTOR_LEFT_CCW (MOTOR_PORT = MOTOR_PORT|0x02)
> #define MOTOR_RIGHT_CW (MOTOR_PORT = MOTOR_PORT&0xf7)
> #define MOTOR_RIGHT_CCW (MOTOR_PORT = MOTOR_PORT|0x08)
> void port_init(void)
> {
> PORTA = 0x00;
> DDRA = 0x00;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00; //m103 output only
> DDRC = 0x00;
> PORTD = 0x00;
> DDRD = 0x00;
> PORTE = 0x00;
> DDRE = 0xff;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x00;
> }
> //call this routine to initialize all peripherals
> void init_devices(void)
> {
> //stop errant interrupts until set up
> cli(); //disable all interrupts
> XMCRA = 0x00; //external memory
> XMCRB = 0x00; //external memory
> port_init();
> MCUCR = 0x00;
> EICRA = 0x00; //extended ext ints
> EICRB = 0x00; //extended ext ints
> EIMSK = 0x00;
> TIMSK = 0x00; //timer interrupt sources
> ETIMSK = 0x00; //extended timer interrupt sources
> ​
> sei(); //re-enable interrupts
> //all peripherals are now initialized
> }
> void delay(int n)
> {
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<200;j++);
> }
> }
> int main(void)
> {
> init_devices();
> ​
> MOTOR_PORT_DDR = 0xff;
> MOTOR_ENABLE;
> MOTOR_STEP_M3;
> MOTOR_LEFT_CCW;
> MOTOR_RIGHT_CW;
> ​
> ​
> /* 딜레이로 마이크로 스텝 드라이버 구동 */
> while(1){
> MOTOR_RIGHT_CLK;
> MOTOR_LEFT_CLK;
> delay(2);
> MOTOR_RIGHT_CLK;
> MOTOR_LEFT_CLK;
> delay(2);
> }
> return 0;
> }
>
>
>
>
>
> 동작영상: https://youtu.be/aZ2kPfAfR4Y
>

 
   
 

 


1