뉴티씨



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

 

 
AM-MS2 및 모터 구동 문의
 글쓴이 : 김하늘
작성일 : 23-07-31 18:44
조회 : 762  
   2. 테스트코드.txt (2.2K) [0] DATE : 2023-07-31 18:44:55
   https://youtu.be/aZ2kPfAfR4Y [641]

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