|
글쓴이 :
관리자
작성일 : 20-11-07 15:02
조회 : 2,872
|
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
여기서 가장 큰 문제는 모터가 삑삑 거리는 것이네요.^^
가지고 계시는 스테핑모터는 기본적으로 무부하로 동작시켜도 400mA 정도 사용합니다.
따라서, 500mA 어뎁터로는 전류가 부족할 수 있습니다. 보통, 자신이 쓰는 전류의 2배 정도는 되는 것으로 사용하는 것이 좋습니다.
사용하시는 모터를 돌리시려면, 24V 3A정도 즉, 75Watt 정도의 SMPS를 사용하시는 것이 BEST입니다.
모터 하나 당 저의 추천은 24V 100W입니다.
하지만, 부하가 적거나 하는 경우는 일반 아답타만으로도 가능합니다. 무부하시, 학생으로서 돌리는 정도라면, 돌리기만 하면 되는 거라면 12V 1A 정도도 무난하게 잘 돌아갑니다.
모터가 돌려고해도 전류가 부족하면 돌지 않습니다. 돌지는 않는데, 전기적으로는 돌리기 때문에, 모터에서 삐 하는 소리가 나게 됩니다. 밥을 먹지 않으면 배고 고프고, 배가 고프면 일을시켜도 잘 하기 싫어지는 것과 비슷합니다. 모터도 사용할 전류와 전압을 적절히 공급해주지 않으면, 제대로 된 일을 하지 못하게 됩니다.
아래 링크도 읽어보세요. 참조가 될겁니다.
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m53&wr_id=24
다만, 저희가 코드를 짜드리거나, 고객님의 코드를 분석해서 알려드리는 것은 범위를 벗어난 일이라, 죄송하지만, 직접 하셔야 합니다.
감사합니다.
>
>
> 안녕하세요. 스테핑 모터를 구동하는데에 문제점이 많아서 염치없이 질문 드립니다.
>
> avr mega 128 개발보드(AB-M128Pro-A), 스테핑 모터 클럭 구동모듈(AM-MS2(3A용)), 스테핑 모터(1.7kg,SE-SM243)을 이용합니다.
> 랩뷰로 타이밍에 맞춰서 360도의 이동각, 스텝각, 속도 등을 설정해 누적해가면서 일정 횟수 구동하고 싶습니다.
>
>
> 질문1) 스테핑 모터 단일로 구동 시, [SE-SM243(4.1V 1.95A)과 SE-SM9K(2.3V,0.75A) 두 개의 모터]와 [12V 0.5A, 12V 3A 의 어댑터 두 개]를 가지고 조합해보았는데 유일하게 SE-SM243과 12V 0.5A어댑터의 경우에만 모터에서 진동과 함께 삐-삐-삐-하며 일정한 주기로 LED가 깜빡입니다. (나머지 조합에서는 LED는 켜져있고 모터에서 삐- 소리만 납니다. 토크 조정 시에도 약간의 소리만 바뀔뿐 진동조차 생기지 않습니다.)
> 12V 1A 또는 24V 1A이상의 어댑터를 구입해서 실험해본다면 결과가 달라질 수 있을지 궁금합니다.
>
>
> 질문2) 어떤 문제 때문에 삐- 소리만 나는 경우와 주기적인 진동과 함께 LED가 깜빡이는 차이점이 생기는지 궁금합니다.
>
>
> 질문 3) 코딩은 문외한이라 이전에 선배가 구현했던걸 그대로 쓰려고 하는데, 랩뷰를 통해 구동이 되지 않고, 보드의 전원을 켜기만 하면 자동으로 모터가 삑삑 소리를 내며 진동만 울립니다.(나머지 조합에서는 모터에서 삐- 소리만 납니다.) 왜 바로 모터가 동작하는 것인지 궁금합니다.
>
> 아래 코드에서 두 가지의 Warning이 발생하는데, count_buff가 위에서 선언됐지만 사용안됐고 tx_char도 마찬가지입니다. 제가 어떤 코드를 추가해 랩뷰를 통해 스테핑모터를 구동할 수 있을까요.
> -------------------------------------------------------
>
> #include <mega128.h>
> #include <stdio.h>
> #include <delay.h>
>
>
> unsigned int count = 0;
> unsigned int count_buff = 0;
> unsigned long int rotate = 0;
> unsigned char m_state;
>
> union data {
> unsigned char r_data_char[2];
> unsigned int r_data_int;
> };
>
> union data32 {
> unsigned char r_data_char[4];
> unsigned long int r_data_int;
> };
>
> union data32 a;
> union data b;
>
> //--------------------------------------------------------------------------------------------------------------------------
> unsigned char Rx_data(void)
> {
> while(!(UCSR0A & 0x80));
> return UDR0;
> }
>
> void tx_char(unsigned char write_char_temp)
> {
> while(!(UCSR0A & 0x20));
> UDR0 = write_char_temp;
> }
>
> //--------------------------------------------------------------------------------------------------------------------------
>
> void main(void)
> {
> unsigned char d_t;
> DDRD = 0xff;
> DDRB = 0x07;
>
> TCNT0 = 0x00;
> TCCR0 = 0x01;
> TIMSK = 0x01;
>
> ASSR = 00;
>
> UCSR0A=0x00;
> UCSR0B=0x18;
> UCSR0C=0x06;
> UBRR0H=0x00;
> UBRR0L = 25; // 16MHz ,baud 9600 : 103, baud 38400 : 25, baud 76800 : 12, baud 250000 : 3
>
> SREG = 0x80;
>
> PORTD.0 = 0b1;
> PORTD.1 = 0b0;
> PORTD.2 = 0b1;
> PORTD.3 = 0b0;
> PORTD.4 = 0b0;
> PORTD.5 = 0b0;
> PORTD.7 = 0b1;
>
> b.r_data_int = 0;
> rotate = 1;
> printf("\r\n Hello!");
>
> while(1)
> {
> UDR0 = 0; //버퍼 비우기
>
> //모터 멈춤 결정
> m_state = Rx_data();
>
> if(m_state == 0) //모터 멈춤 버튼이 눌리면
> {
> rotate = 0; //회전수를 없엔다.
> }
> else if(m_state ==1) // 2번모드이면 이동한만큼 돌아간다.
> {
> PORTD.1 = PORTD.1 ^ 1; //회전 방향 변경
> rotate = a.r_data_int - rotate; //총 회전양에서 현재 회전양을 뺀다.
> b.r_data_int = 10; //회전속도는 임의로 조정(되도록 빠르게)
> }
> else //모터 멈춤이 아니라면
> {
> //회전양 받기 32비트짜리
> a.r_data_char[3] = Rx_data();
> a.r_data_char[2] = Rx_data();
> a.r_data_char[1] = Rx_data();
> a.r_data_char[0] = Rx_data();
>
> //회전 속도 받기 16비트짜리
> b.r_data_char[1] = Rx_data();
> b.r_data_char[0] = Rx_d ata();
>
> //회전 방향 받기
> d_t = Rx_data();
>
> if(rotate == 0) //회전양만큼 다 이동했을때만 실행
> {
> rotate = a.r_data_int; //회전양 대입
>
> if(m_state == 3)
> {
> if(d_t == 1){PORTD.1 = 1;}
> else{PORTD.1 = 0;}
> }
> else if(m_state == 4)//방향대입?
> {
> if(d_t == 1){PORTD.3 = 1;}
> else{PORTD.3 = 0;}
> }
> }
>
> }
> }
> }
>
>
> interrupt [TIM0_OVF] void timer0(void)
> {
> if(count >= b.r_data_int) //회전속도를 결정
> {
> if(rotate != 0) //이동해야할 거리가 0이 아니면
> {
> if(m_state == 3)
> {PORTD.0 = PORTD.0 ^ 1; } // 펄스 생성
> else if(m_state == 4)
> {PORTD.2 = PORTD.2 ^ 1; } // 펄스 생성
> rotate--; // 이동거리 줄이기 삭감
> }
> count = 0; //카운터 초기화
> }
> else
> { count++; }
>
> TCNT0 = 220;
> }
>
|
|