로그인 | 회원가입 | 주문 조회
총 10,748개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
7823 답변완료SE-DM185 엔코더 내장형 모터에 대한 문의입니다. 황찬하 2012-12-12 1,361
SE-DM185 모델을 구매하여 쓰고 있습니다. 그런데 Z상이 없어서 한바퀴 회전시 몇번의 엔코더 펄스가 나오는지 정확하게 알수가 없어서 문의드립니다. 1바퀴 회전시 대략 400 펄스의 값이 나오는것 같은데 막상 400을 한바퀴로 잡고 작동시켜보면 이동거리가 오버됩니다. 프로그램이나 하드웨어 상의 문제로 엔코더 정확하게 안읽히는것인지 아니면 1바퀴가 400펄스가 아닌것인지 알수가 없어서 문의 드립니다.
관리자 답변 관리자 · 2012-12-13
안녕하세요? 고객님, 마그네틱 홀센서를 사용하고 있어서, 1회전당 A와 B상 각각에서 13번씩 즉, 합쳐서 26번 엔코더 펄스가 나옵니다. 400번이라는 수치는 아마도 뭔가 잘못하신것이 아닌가 싶습니다. 온라인 강좌->AVR 강좌쪽에서 엔코더 관련된 강좌를 읽어 보시면 도움이 될겁니다. 수고하세요. > > > SE-DM185 모델을 구매하여 쓰고 있습니다. 그런데 Z상이 없어서 > > 한바퀴 회전시 몇번의 엔코더 펄스가 나오는지 정확하게 알수가 없어서 문의드립니다. > > 1바퀴 회전시 대략 400 펄스의 값이 나오는것 같은데 막상 400을 한바퀴로 잡고 작동시켜보면 이동거리가 오버됩니다. > > 프로그램이나 하드웨어 상의 문제로 엔코더 정확하게 안읽히는것인지 아니면 1바퀴가 400펄스가 아닌것인지 알수가 없어서 문의 드립니다. >
7822 답변완료AM-CS2P+SE-SM243 모터 소음문제 정용신 2012-12-11 1,433
AVR128보드와 AM-CS2P+SE-SM243 모터를 사용하고 있는데 소음이 많이 거슬립니다. (윙소리와 드르륵 소리) 질문답변 게시판을 읽어보고 전압도 충분히 주었고 가변저항을 돌려도 줄어들긴 하지만 사라지지 않습니다. (반바퀴 정도 돌리면 최소 소음이고 그 이하는 동작하지 않음) 파워는 12V 1.2A이고 24V 2.5A로 바꿔도 마찮가지입니다. (실제 동작시 전류는 0.1A) 모터 속도는 느린 편이고(1초 1바퀴정도) 많은 토크를 요구하지는 않습니다. <질문> 1. 구동모듈이나 모터를 바꿔야 한다면 추천 바랍니다. 2. 소프트웨어를 바꿔야 한다면 조언바랍니다. 1-2상여자 방식이고 아래 소스첨부합니다. /********************************************* Chip type : ATmega128 Program type : Application Clock frequency : 16.000000 MHz Memory model : Small External SRAM size : 32K bytes Data Stack size : 1024 *********************************************/ #ifndef ENABLE_BIT_DEFINITIONS #define ENABLE_BIT_DEFINITIONS #endif #ifndef ENABLED #define ENABLED 1 #endif #ifndef DISABLED #define DISABLED 0 #endif #include <pgmspace.h> #include <inavr.h> #include <ioavr.h> #include <stdio.h> #include <math.h> #include "def.h" #include "main.h" #include "m128_init.h" #include "m128_int.h" #include "m128_timer.h" #include "m128_clib.h" #include "m128_pack_io.h" #include "m128_adc.h" /* define external function */ extern void putch(char); extern char getch(void); extern void DoPackageMachine(void); extern void UpdateMagicNumber(void); /* define function prototype */ void put2_str_with_len (unsigned char *, int); void IoPortTest(void); void DisplayTest(void); /* Global Parameters */ unsigned int fndDisplay1Data0; unsigned char fndDisplay1Data1; unsigned char fndDisplay1Data2; unsigned long fndDisplayCount; unsigned int fndDisplay2Data[4]; unsigned char fndDisplay1Buf[32],fndDisplay2Buf[32]; unsigned char inputData[2]={"0"}; unsigned char outputData[3]={"0"}; unsigned char outputStatus[3]={"0"}; unsigned char stepSeq2[4]={0x99,0x33,0x66,0xcc}; unsigned char stepSeq12[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88}; #define REV12PHASE (400) #define SEQ12PHASE 8 #define REV2PHASE (200) #define SEQ2PHASE 4 //step수만큼 회전: 1-2상일때 400이면 1회전 void Step12MotorGoUpward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq12[i%SEQ12PHASE]; DelayMS(1); } } //step수만큼 회전: 1-2상일때 400이면 1회전 void Step12MotorGoDownward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq12[(SEQ12PHASE-1)-(i%SEQ12PHASE)]; DelayMS(1); } } //step수만큼 회전: 2상일때 200이면 1회전 void Step2MotorGoUpward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq2[i%SEQ2PHASE]; DelayMS(1); } } //step수만큼 회전: 2상일때 200이면 1회전 void Step2MotorGoDownward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq2[(SEQ2PHASE-1)-(i%SEQ2PHASE)]; DelayMS(1); } }
관리자 답변 관리자 · 2012-12-12
안녕하세요? 고객님, 예전에 저도 같은 문제로 며칠 고민하면서 문제를 풀어본 기억이 있습니다. 모터가 스피커도 아닌데, 윙 하는 소리가 나는겁니다. 드르륵 소리 난다는 부분은 대부분, 바이어스르 잘못 맞춰서, 돌아야하는 타이밍에 못돌면서 밀리는 소리거나, 선 연결을 잘못해서, 잘 안돌거나 하는 등의 소리이므로, 그런 부분은 잘 조정하면 없어집니다. 하지만, 여전히 윙하는 소리는 남게 되죠. 기구적으로는 스테핑 모터에 외부에다 방음을 할 수 있도록 진동을 흡수하는 모터용 진동 Absorber를 판다고 하더군요. 모터에 부가하여 붙이는 형태라고 하는 데, 아직 써보지는 않았습니다. 당시에 돈 문제도 있고, 사러가기도 좀 구찮기도 하구 했지요. 소프트웨어적으로 해결하는 방법은, 타이머를 이용하면, 소리가 좀 달라집니다. 소리를 아예 없앨수는 없고, 잘 들리지 않는 쪽으로 밀어버리는 쪽이 좋겠습니다. 타이머 오버플로우 인터럽트를 사용해서 원하는 타이밍에 클럭이 돌도록만 만들어 주면 됩니다. 그 주파수가 제가 테스트 했을 때 12-14kHz 정도로 타이머 돌리면서 그안에서 하니까 소리가 많이 줄었습니다. 한 번 해 보세요. 당시 소스 등이 남아있지는 않아서, 여기까지 도움 드립니다. 잘 되기를 바래요. 참고로, 스테핑 모터들은 어떤 모터라도 소리는 나게 됩니다만, 그 소리를 최소화하고, 안들리는 쪽으로 밀어버리는 것으로 생각하시면 됩니다. 수고하세요. > > > AVR128보드와 AM-CS2P+SE-SM243 모터를 사용하고 있는데 소음이 많이 거슬립니다. > (윙소리와 드르륵 소리) > > 질문답변 게시판을 읽어보고 전압도 충분히 주었고 가변저항을 돌려도 줄어들긴 하지만 사라지지 않습니다. > (반바퀴 정도 돌리면 최소 소음이고 그 이하는 동작하지 않음) > > 파워는 12V 1.2A이고 24V 2.5A로 바꿔도 마찮가지입니다. (실제 동작시 전류는 0.1A) > > 모터 속도는 느린 편이고(1초 1바퀴정도) 많은 토크를 요구하지는 않습니다. > > <질문> > > 1. 구동모듈이나 모터를 바꿔야 한다면 추천 바랍니다. > > 2. 소프트웨어를 바꿔야 한다면 조언바랍니다. > > > 1-2상여자 방식이고 아래 소스첨부합니다. > > /********************************************* > Chip type : ATmega128 > Program type : Application > Clock frequency : 16.000000 MHz > Memory model : Small > External SRAM size : 32K bytes > Data Stack size : 1024 > *********************************************/ > > #ifndef ENABLE_BIT_DEFINITIONS > #define ENABLE_BIT_DEFINITIONS > #endif > > #ifndef ENABLED > #define ENABLED 1 > #endif > #ifndef DISABLED > #define DISABLED 0 > #endif > > #include <pgmspace.h> > #include <inavr.h> > #include <ioavr.h> > #include <stdio.h> > #include <math.h> > > #include "def.h" > #include "main.h" > #include "m128_init.h" > #include "m128_int.h" > #include "m128_timer.h" > #include "m128_clib.h" > #include "m128_pack_io.h" > #include "m128_adc.h" > > /* define external function */ > extern void putch(char); > extern char getch(void); > extern void DoPackageMachine(void); > extern void UpdateMagicNumber(void); > > > /* define function prototype */ > void put2_str_with_len (unsigned char *, int); > void IoPortTest(void); > void DisplayTest(void); > > /* Global Parameters */ > unsigned int fndDisplay1Data0; > unsigned char fndDisplay1Data1; > unsigned char fndDisplay1Data2; > unsigned long fndDisplayCount; > unsigned int fndDisplay2Data[4]; > > unsigned char fndDisplay1Buf[32],fndDisplay2Buf[32]; > unsigned char inputData[2]={"0"}; > unsigned char outputData[3]={"0"}; > unsigned char outputStatus[3]={"0"}; > > unsigned char stepSeq2[4]={0x99,0x33,0x66,0xcc}; > unsigned char stepSeq12[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88}; > > #define REV12PHASE (400) > #define SEQ12PHASE 8 > #define REV2PHASE (200) > #define SEQ2PHASE 4 > > //step수만큼 회전: 1-2상일때 400이면 1회전 > void Step12MotorGoUpward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq12[i%SEQ12PHASE]; > DelayMS(1); > } > } > > //step수만큼 회전: 1-2상일때 400이면 1회전 > void Step12MotorGoDownward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq12[(SEQ12PHASE-1)-(i%SEQ12PHASE)]; > DelayMS(1); > } > } > > //step수만큼 회전: 2상일때 200이면 1회전 > void Step2MotorGoUpward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq2[i%SEQ2PHASE]; > DelayMS(1); > } > } > > > //step수만큼 회전: 2상일때 200이면 1회전 > void Step2MotorGoDownward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq2[(SEQ2PHASE-1)-(i%SEQ2PHASE)]; > DelayMS(1); > } > } >
7821 답변완료textLCD에 대해.. 이영호 2012-12-11 1,471
현재 참고해서 textLCD를 다짠상태입니다. 혹시 제가 원하는건 textLCD 첫번째줄에서 글씨가 초과되면 2번째 줄로 넘어가는 걸 하려고하는데 어떻게 로직을짜야하는지 궁금합니다.. //ICC-AVR application builder : 2005-11-11 오후 12:05:38 // Target : M128 // Crystal: 16.000Mhz // RS : PORTA A0 // RW : PORTA A1 // E : PORTA A2 // Data: PORTF #include <iom128v.h> #include <macros.h> #define ON 1 #define OFF 0 #define DELAYTIME 10 #define RIGHT 1 #define LEFT 0 void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xFF; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0xFF; PORTG = 0x00; DDRG = 0xFF; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 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 dd){ int i,j; for(i=0 ; i<1000 ; i++){ for(j=0 ; j<dd ; j++){ } } } // RS : PORTA A0 void LCD_RS(int onoff){ if(onoff == ON) PORTA = PORTA | 0x01; else PORTA = PORTA & 0xFE; } // RW : PORTA A1 void LCD_RW(int onoff){ if(onoff == ON) PORTA = PORTA | 0x02; else PORTA = PORTA & 0xFD; } // E : PORTA A2 void LCD_E(int onoff){ if(onoff == ON) PORTA = PORTA | 0x04; else PORTA = PORTA & 0xFB; } void LCD_Clr(){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = 0x01; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void write_char(char s){ LCD_RS(ON); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = s; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void returnhome(){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = 0x02; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void LCDONOFF(int onoff){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(onoff == ON){ PORTF = 0x0F; }else{ PORTF = 0x08; } delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void lcd_disp(char x, char y){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(y==0){ PORTF = x+0x80; } else{ PORTF = x+0xC0; } delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void write_lcd(int x, int y, char *ch){ lcd_disp(x, y); while(*ch){ write_char(*ch++); } } void LCD_Shift(char rl){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(rl == RIGHT) PORTF = 0x1C; else PORTF = 0x18; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void func_set(int nf){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(nf == OFF) PORTF = 0x30; else PORTF = 0x3C; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void init_lcd(){ delay(DELAYTIME*15); func_set(OFF); delay(DELAYTIME*4); func_set(OFF); delay(DELAYTIME); func_set(OFF); delay(DELAYTIME); func_set(ON); delay(DELAYTIME); LCDONOFF(OFF); LCDONOFF(ON); LCD_Clr(); } void main(void){ int i,t; char str1[40] = {"TEXT_LCD"}; char str2[40] = {"TEST_MODE"}; init_devices(); init_lcd(); PORTG = 0x03; LCDONOFF(ON); returnhome(); LCD_Clr(); write_lcd(0,0,str1); write_lcd(0,1,str2); for(i=0; i<4 ; i++){ delay(DELAYTIME*100); LCD_Shift(RIGHT); } while(1){ for(i=0; i<8 ; i++){ if(t%2 == 0){ delay(DELAYTIME*100); LCD_Shift(LEFT); } else{ delay(DELAYTIME*100); LCD_Shift(RIGHT); } } t-=-1; } }
관리자 답변 관리자 · 2012-12-12
안녕하세요? 잘 했네요. 처음 짤 때 여기까지 오기 쉽지 않았을 텐데, 고생했습니다. 우선, 텍스트 LCD의 화면은 메모리 맵의 일부다 라고 생각하면 됩니다. 즉, LCD의 칸수와 줄수에 따라서, 메모리 맵이 달라지는 데, 예를 들어서, 2x16 LCD 인 경우, 0x80 번지가 첫번째 줄의 맨 왼쪽 주소구요. 0xc0 번지기 두번째 줄의 맨 왼쪽 주소입니다. 그 쪽에다가 커서를 옮기고, 글을 쓰기 시작하면 됩니다. 수고하세요. > > > 현재 참고해서 textLCD를 다짠상태입니다. > > > 혹시 제가 원하는건 textLCD > > 첫번째줄에서 글씨가 초과되면 2번째 줄로 넘어가는 걸 하려고하는데 > > > 어떻게 로직을짜야하는지 궁금합니다.. > > > > //ICC-AVR application builder : 2005-11-11 오후 12:05:38 > // Target : M128 > // Crystal: 16.000Mhz > > // RS : PORTA A0 > // RW : PORTA A1 > // E : PORTA A2 > // Data: PORTF > > #include <iom128v.h> > #include <macros.h> > > #define ON 1 > #define OFF 0 > #define DELAYTIME 10 > #define RIGHT 1 > #define LEFT 0 > > void port_init(void) > { > PORTA = 0x00; > DDRA = 0xFF; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0xFF; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0xFF; > PORTG = 0x00; > DDRG = 0xFF; > } > > //call this routine to initialize all peripherals > void init_devices(void) > { > //stop errant interrupts until set up > CLI(); //disable all interrupts > XDIV = 0x00; //xtal divider > XMCRA = 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 dd){ > int i,j; > > for(i=0 ; i<1000 ; i++){ > for(j=0 ; j<dd ; j++){ > } > } > } > > // RS : PORTA A0 > void LCD_RS(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x01; > else > PORTA = PORTA & 0xFE; > } > // RW : PORTA A1 > void LCD_RW(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x02; > else > PORTA = PORTA & 0xFD; > } > // E : PORTA A2 > void LCD_E(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x04; > else > PORTA = PORTA & 0xFB; > } > > void LCD_Clr(){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = 0x01; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void write_char(char s){ > LCD_RS(ON); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = s; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > > > void returnhome(){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = 0x02; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void LCDONOFF(int onoff){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(onoff == ON){ > PORTF = 0x0F; > }else{ > PORTF = 0x08; > } > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > > void lcd_disp(char x, char y){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(y==0){ > PORTF = x+0x80; > } > else{ > PORTF = x+0xC0; > } > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void write_lcd(int x, int y, char *ch){ > lcd_disp(x, y); > while(*ch){ > write_char(*ch++); > } > } > > void LCD_Shift(char rl){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(rl == RIGHT) > PORTF = 0x1C; > else > PORTF = 0x18; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void func_set(int nf){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(nf == OFF) > PORTF = 0x30; > else > PORTF = 0x3C; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void init_lcd(){ > delay(DELAYTIME*15); > func_set(OFF); > delay(DELAYTIME*4); > func_set(OFF); > delay(DELAYTIME); > func_set(OFF); > delay(DELAYTIME); > func_set(ON); > delay(DELAYTIME); > LCDONOFF(OFF); > LCDONOFF(ON); > LCD_Clr(); > > } > > void main(void){ > int i,t; > char str1[40] = {"TEXT_LCD"}; > char str2[40] = {"TEST_MODE"}; > > init_devices(); > init_lcd(); > PORTG = 0x03; > LCDONOFF(ON); > returnhome(); > LCD_Clr(); > write_lcd(0,0,str1); > write_lcd(0,1,str2); > > for(i=0; i<4 ; i++){ > delay(DELAYTIME*100); > LCD_Shift(RIGHT); > } > while(1){ > for(i=0; i<8 ; i++){ > if(t%2 == 0){ > delay(DELAYTIME*100); > LCD_Shift(LEFT); > } > else{ > delay(DELAYTIME*100); > LCD_Shift(RIGHT); > } > } > t-=-1; > } > } >
7820 답변완료SE-SM9K 모터 제어 다시 질문드립니다. 최우성 2012-12-08 1,514
소프트웨어 : ICCAVR 7 하드웨어 : AM-128PRO + 스테핑모터 모듈 AM-MS2 + 스테핑모터 SE-SM9K #include <iom128v.h> #include <macros.h> #include <stdio.h> #define MOTOR_PORT PORTD // 스테핑 모터 연결 포트 #define MOTOR_PORT_DDR DDRD // 스테핑 모터 연결 포트의 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) #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) #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 = 0x03; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; DDRC = 0xff; PORTD = 0x00; DDRD = 0xff; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 10KHz // actual value: 10.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xc7; //OCR1A = 0; //TCNT1L = 0xF4; //OCR1AH = 0xFF; //OCR1AL = 0xff; TCCR0 = 0x02; //start timer } #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0xc7; //reload counter value MOTOR_LEFT_CLK; MOTOR_RIGHT_CLK; /* if(MOTOR_PORT & 0x01){ MOTOR_PORT = MOTOR_PORT & 0xfe; }else{ MOTOR_PORT = MOTOR_PORT | 0x01; } */ } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); timer0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x01; //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<600;j++); } } /* main function-----------------------------------*/ void main(void) { volatile unsigned char step=0; int i=0; init_devices(); //insert your functional code here... MOTOR_PORT_DDR = 0xff; while(1){ MOTOR_ENABLE; MOTOR_STEP_M0; MOTOR_LEFT_CCW; //MOTOR_RIGHT_CW; 최대 토크를 내기위한 소스를 짜려고 하는데 어느부분을 건드려야 할지 답변주시면 감사하겠습니다
관리자 답변 관리자 · 2012-12-08
안녕하세요? 어제 올려줬던 소스와는 또 다르네요. 이건, 본사의 기본 타이머 소스와 거의 같아 보입니다. 걸리는 토크에 따라서 전압에 따라서, 바이어스 저항값 주는 것에 따라서, 다 다르기 때문에, 기본적으로 소스가 돌아가고 있다면, 위에 말한 부분들을 우선적으로 점검하고, 타이머를 부르는 주기를 변경해 보고, timer 루틴안에서, t1++; 이런식으로 하여서, if(t1 > 100) 이 때, 클럭 한번, 이런식으로 제어해 줘서, 타이밍을 이 100 값을 1000으로 바꾸거나 하면, 속도가 변경되죠. 프로그램보다도 가장 편한 것은 클럭 쪽에다가 그냥 펑션 제너레이터를 물려서, 원하는 주파수를 줘보고, 거기서 토크가 어느정도 나오는 지 확인하는 방법이 있겠습니다. 그 환경을 토크 물린 상태에서 직접 앞에 놓고, 해봐야 하는 것이라서, 뭐라 말하기 어렵습니다. 또한, 가감속 테이블을 작성해서, 속도를 서서히 올려가야 해서, 그 부분도 토크에 영향을 많이 받습니다. 보통은 첨에는 반바퀴나 한바퀴 돌면, 속도 더블 하다가,어느정도 올라가면, 1/4 정도 올리고, 이런식으로 속도 업해가면 됩니다. 수고하세요. > > > 소프트웨어 : ICCAVR 7 > 하드웨어 : AM-128PRO + 스테핑모터 모듈 AM-MS2 + 스테핑모터 SE-SM9K > > #include <iom128v.h> > #include <macros.h> > #include <stdio.h> > > #define MOTOR_PORT PORTD // 스테핑 모터 연결 포트 > #define MOTOR_PORT_DDR DDRD // 스테핑 모터 연결 포트의 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) > #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) > #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) > #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) > #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 = 0x03; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; > DDRC = 0xff; > PORTD = 0x00; > DDRD = 0xff; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x03; > } > > //TIMER0 initialize - prescale:8 > // WGM: Normal > // desired value: 10KHz > // actual value: 10.000KHz (0.0%) > void timer0_init(void) > { > TCCR0 = 0x00; //stop > > ASSR = 0x00; //set async mode > TCNT0 = 0xc7; > //OCR1A = 0; > //TCNT1L = 0xF4; > //OCR1AH = 0xFF; > //OCR1AL = 0xff; > TCCR0 = 0x02; //start timer > } > > #pragma interrupt_handler timer0_ovf_isr:17 > void timer0_ovf_isr(void) > { > TCNT0 = 0xc7; //reload counter value > MOTOR_LEFT_CLK; > MOTOR_RIGHT_CLK; > /* if(MOTOR_PORT & 0x01){ > MOTOR_PORT = MOTOR_PORT & 0xfe; > }else{ > MOTOR_PORT = MOTOR_PORT | 0x01; > } > */ > } > > > //UART0 initialize > // desired baud rate: 9600 > // actual: baud rate:9615 (0.2%) > // char size: 8 bit > // parity: Disabled > > //call this routine to initialize all peripherals > void init_devices(void) > { > //stop errant interrupts until set up > CLI(); //disable all interrupts > XDIV = 0x00; //xtal divider > XMCRA = 0x00; //external memory > port_init(); > timer0_init(); > > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints > EIMSK = 0x00; > TIMSK = 0x01; //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<600;j++); > } > } > > > /* main function-----------------------------------*/ > void main(void) > { > volatile unsigned char step=0; > int i=0; > init_devices(); > //insert your functional code here... > > MOTOR_PORT_DDR = 0xff; > while(1){ > MOTOR_ENABLE; > MOTOR_STEP_M0; > MOTOR_LEFT_CCW; > //MOTOR_RIGHT_CW; > > > 최대 토크를 내기위한 소스를 짜려고 하는데 어느부분을 건드려야 할지 답변주시면 감사하겠습니다 >
7819 답변완료SE-SM9K 모터 다시 질문드립니다 최우성 2012-12-08 1,315
올려주신 그래프를 참고하여 500Hz 약 150rpm에서 최대토크가 나온다고 생각하고 한펄스당 주기를 1/500= 2ms로 하기 위해 분주비 64를 선택하여 16MHz / 64 = 250000, 1/250000 = 4us로 클럭을 정하여 500개를 카운트하기 위해 타이머/카운트 1을 사용하였습니다. void timer1_init(void) { TCCR1A = 0x00; //stop TCCR1B = 0x00; TCNT1 = 65000; //oxffff의 경우 65535이므로 500을 뺀 65035에서 카운트를 시작하였습니다. TCCR1B = 0x03; //start timer clk/64 그런데 모터의 속도와 토크가 그래프 대로 나오지 않고 굉장이 느린상태입니다.. 잘못한 부분이 있으면 설명해주시면 감사하겠습니다. }
관리자 답변 관리자 · 2012-12-08
이 부분만 봐서 알수가 없습니다. 전체 소스와 사용하고 있는 하드웨어/소프트웨어 환경도 함께 적어주기 바랍니다. 수고하세요. > > > 올려주신 그래프를 참고하여 500Hz 약 150rpm에서 최대토크가 나온다고 생각하고 > 한펄스당 주기를 1/500= 2ms로 하기 위해 분주비 64를 선택하여 > 16MHz / 64 = 250000, 1/250000 = 4us로 클럭을 정하여 500개를 카운트하기 위해 타이머/카운트 1을 사용하였습니다. > void timer1_init(void) > { > TCCR1A = 0x00; //stop > TCCR1B = 0x00; > > TCNT1 = 65000; //oxffff의 경우 65535이므로 500을 뺀 65035에서 카운트를 시작하였습니다. > > > TCCR1B = 0x03; //start timer clk/64 > > 그런데 모터의 속도와 토크가 그래프 대로 나오지 않고 굉장이 느린상태입니다.. > > 잘못한 부분이 있으면 설명해주시면 감사하겠습니다. > } >
7818 답변완료AD-USBSERIAL 질문드립니다. 김승래 2012-12-07 1,319
안녕하세요 초보라 모르는게 많네요 현재 ab-atmega128pro-a 와 AD-USBSERIAL 을통해 pc와 시리얼통신을 하려고하는데요 문제가 생겨서 질문드립니다.. atmega와 AD-USBSERIAL의 4pin uart포트끼리의 연결을통해서 pc와 통신(송수신)하는것에는 성공했습니다. 터미널은 윈도우용 코드비전의 터미널을 사용하였습니다. 그런데검색해보니 atmega의 3핀 uart 포트를 이용해 (ex:ATMEGA====SE-3T9====AD-USBSERIAL====PC) 이런식으로 구성해도 통신이 된다고 해서 시도해봤는데 PC에서 atmega 방향의 통신은 되는데 atmega에 pc쪽으로 데이터가 안나가더군요 정확하게 말하면 터미널에 아무것도 안뜹니다. 4핀으로 했을경우는 문제없었는데 말이죠 무슨 문제가 있을까요? 그럼 수고하시고요 추운날씨에 감기조심하세요 ^^
관리자 답변 관리자 · 2012-12-08
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 안되는 이유가 케이블 문제 외에는 예상되는 것이 별로 없습니다. 혹시 잘 모르시겠으면, 본사로 제품을 보내거나 방문하셔서 점검 받아 보시기 바랍니다. 수고하세요. > > > 안녕하세요 초보라 모르는게 많네요 > 현재 ab-atmega128pro-a 와 AD-USBSERIAL 을통해 pc와 시리얼통신을 하려고하는데요 > 문제가 생겨서 질문드립니다.. > > atmega와 AD-USBSERIAL의 4pin uart포트끼리의 연결을통해서 pc와 통신(송수신)하는것에는 > 성공했습니다. 터미널은 윈도우용 코드비전의 터미널을 사용하였습니다. 그런데검색해보니 atmega의 > 3핀 uart 포트를 이용해 (ex:ATMEGA====SE-3T9====AD-USBSERIAL====PC) 이런식으로 > 구성해도 통신이 된다고 해서 시도해봤는데 PC에서 atmega 방향의 통신은 되는데 atmega에 > pc쪽으로 데이터가 안나가더군요 정확하게 말하면 터미널에 아무것도 안뜹니다. > 4핀으로 했을경우는 문제없었는데 말이죠 무슨 문제가 있을까요? > > > 그럼 수고하시고요 추운날씨에 감기조심하세요 ^^ >
7817 답변완료예제 소스코드좀 구할 수 있을까요? 박준영 2012-12-07 1,381
AM-SLCD216 을 샀는데요 8535에서 구현시키려고 합니다. 자료실에 예제코드가 없고 8535는 잘 쓰지않아서 소스코드를 구하기 힘드네요 8535로 LCD를 작동시키는 소스 코드 좀 얻을 수 있을까요?
관리자 답변 관리자 · 2012-12-08
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 8535는 본사에 제품이 없는 관계로 예제가 기존에 없었습니다. 특별히 고객님을 위하여 예제를 생성하였습니다. 자료실에서 8535로 검색하여 참고하시기 바랍니다. ICCAVR V7으로 제작되었으니, 타 컴파일러 사용시에는 참고하셔서 제작하시기 바랍니다. 수고하세요. > > > AM-SLCD216 을 샀는데요 > 8535에서 구현시키려고 합니다. > > 자료실에 예제코드가 없고 8535는 잘 쓰지않아서 소스코드를 구하기 힘드네요 > 8535로 LCD를 작동시키는 소스 코드 좀 얻을 수 있을까요? >
7816 답변완료ATMEGA128 트레이닝 개발 보드를 사고싶습니다. 지윤수 2012-12-07 1,401
목포대학교 학생입니다. ATMEGA128 트레이닝 풀 키트 를 사고싶은데 키트를 사면 학교에서 기자재로 들어가서 살수가 없다고 합니다. 그래서 각각 모듈별로 따로따로 구매하고 하려는데 제품중에 트레이닝 개발보드는 따로 팔지 않고 있습니다. 트레이닝 개발 보드를 사고싶은데 어떻게 해야 할지 알려주세요. 그리고 저희가 지금 사려고 하는 목록 첨부 하는데 거기서 더 필요 한게 있으면 알려주세요. 연락처 010-9434-5018
관리자 답변 관리자 · 2012-12-08
안녕하세요? 고객님, 보드만 330,000원에 구매 가능하도록 도와드리겠습니다. 구매 관련해서 본사로 연락 주시거나 [email protected]로 이메일 주시면 됩니다. 수고하세요. > > > 목포대학교 학생입니다. > > ATMEGA128 > 트레이닝 풀 키트 를 사고싶은데 키트를 사면 학교에서 기자재로 들어가서 살수가 없다고 합니다. > > 그래서 각각 모듈별로 따로따로 구매하고 하려는데 제품중에 트레이닝 개발보드는 따로 팔지 않고 있습니다. > > 트레이닝 개발 보드를 사고싶은데 어떻게 해야 할지 알려주세요. > > 그리고 저희가 지금 사려고 하는 목록 첨부 하는데 거기서 더 필요 한게 있으면 알려주세요. > > 연락처 010-9434-5018 >
7815 답변완료ab-s52k 보드에서 메모리백업 방법이 있는지요? 손혁준 2012-12-07 1,395
FND를 이용하여 숫자표시기를 제작중 입니다. 기본적인 코딩은 마무리 하였는데, 프로그램 실행중 발생한 데이터를 전원이 꺼지거나, 리셋이 되어도 데이터를 보존할 방법이 있는지요? S/W적인 방법이나, H/W적 방법 알려주시면 감사 하겠습니다.
관리자 답변 관리자 · 2012-12-07
안녕하세요 고객님 외부에 EEPROM을 장착하면 되겠습니다 AVR같으면 EEPROM이 내장인데 8051에는 그게 없어서요 외부에 추가로 달아서 쓰세요 본사에 8051보드와 사이즈가 같은 B타입 빵판 보드가 있으니 참고 바래요 수고하세요 > > > FND를 이용하여 숫자표시기를 제작중 입니다. > > 기본적인 코딩은 마무리 하였는데, 프로그램 실행중 발생한 > > 데이터를 전원이 꺼지거나, 리셋이 되어도 데이터를 보존할 방법이 있는지요? > > S/W적인 방법이나, H/W적 방법 알려주시면 감사 하겠습니다. >
7814 답변완료KR-DL128 V01 소스 최연호 2012-12-06 1,227
KR-DL128 V01 매뉴얼은 있는데 기본소스가 없어서 혹시 주실수 있으신가요? 아니면 제가 못찾는건지..궁긍합니다.
관리자 답변 관리자 · 2012-12-07
안녕하세요 고객님 해당소스는 해당키트를 구매하신 분들만 제공하고 있습니다 CD 안에 있으니 참고 바랍니다 수고하세요 > > > KR-DL128 V01 매뉴얼은 있는데 > 기본소스가 없어서 혹시 주실수 있으신가요? > 아니면 제가 못찾는건지..궁긍합니다. >
7813 답변완료AM-SLCD420B을 구매하였습니다. 천재 2012-12-06 1,310
아까 전화 드렸었는데.... 지금 다시 하니까...잘됩니다. 죄송합니다. 조금 자리 맞추기가..어렵군요.. 커서가 넘어가버려서.. 그래도 동작하니..정말다행입니다.
관리자 답변 관리자 · 2012-12-07
안녕하세요 고객님 20칸이니 그것만 유의하시면됩니다 수고하세요 > > > 아까 전화 드렸었는데.... 지금 다시 하니까...잘됩니다. > 죄송합니다. > > 조금 자리 맞추기가..어렵군요.. 커서가 넘어가버려서.. > 그래도 동작하니..정말다행입니다. >
7812 답변완료SE-SM9K 모터 질문드립니다 최우성 2012-12-05 1,287
올려주신 SE-SM9K 그래프 감사합니다 한가지 더 여쭤볼게 있는데 X축이 FREQUENCY와 SPEED가 있는데 어떤 기준으로 해야 최대 토크가 나오는지 알고 싶습니다. 또한 듀티비에 따라 속도나 토크가 달라지나요? 답변해주시면 감사하겠습니다
관리자 답변 관리자 · 2012-12-06
안녕하세요 대략 400Hz 부근이 가장큰 토크가 나오는것으로 보입니다 Hz와 RPM은 서로 비례 관계이고 어느한쪽을 알면 값을 계산해낼수 있습니다 또한 스테핑모터는 pwm제어를 잘안합니다 하지말 굳이 한다면 am-ms2 마이크로스텝스테핑 드라이퍼는 가능합니다 펄스로 제어하는 것이라 그 펄스의 듀티 조절하몃 되겠습니다 당연히 그 경우 토크도 영향 받겠죠 제공해드린 그래프는 최대토크일때놓고 하는겁니다 전원과 그 선을 을 뭘 쓰는지가 매우중요하니 참고바래요 수고하세요 > > > 올려주신 SE-SM9K 그래프 감사합니다 > 한가지 더 여쭤볼게 있는데 X축이 FREQUENCY와 SPEED가 있는데 어떤 기준으로 해야 최대 토크가 나오는지 알고 싶습니다. 또한 듀티비에 따라 속도나 토크가 달라지나요? 답변해주시면 감사하겠습니다 >
7811 답변완료AM-CS2P 의 10핀 커넥터의 9번과 10번 에 전원을 주는것 관련 질문입니다. 김신영 2012-12-05 1,436
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=124936 ↑위의 질문을 올렸던 글쓴이 입니다. 현재 상황은, AM-CS2P의 12V 2핀 커넥터 전원에는 12V3A 아답터를 산 뒤 전선을 따서 전기를 공급하고 있습니다. 그런데 위의 질문글에서 12V 모터용 전원과는 별도로 5V 논리용 전원을 넣어줘야 한다는 것을 알게됬고 10핀 박스 커넥터의 9번핀과 10번핀에 논리용 5V 전원을 넣으려 합니다. 그런데 NEWTC에서 발매한 KD-128PRO 같은것을 쓰고 있었다면 박스커넥터 연결케이블로 AVR의 10핀 포트와 모터드라이버의 10핀 커넥터를 연결하는 것만으로 자동으로 전원이 들어올텐데 제가 쓰는 것은 학교에서 실습용으로 마련한 HBE-MCU-Allinone 키트라서 따로 5V를 넣어주는 핀이 없습니다. 그래서 5V 전원을 어떻게 넣어줘야 할지가 고민입니다. 질문1: 5V 변환 아답터를 산뒤 선을 따서 9번핀과 10번핀에 각각 +와 -를 연결해 줘도 되나요?(보드 밑에 납땜하려고 합니다) 질문2: 만약 그렇게 할경우 5V 몇 암페어 변환기를 사야하나요? 데이터 시트에는 9번 핀과 10번 핀이 5V라고만 나와있고 몇 암페어인지는 나와있지를 않아서요.
관리자 답변 관리자 · 2012-12-05
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 정확히 이해하고 계시네요. 저희 키트를 쓸 경우, 전원이나 케이블연결 등에서도 매우 편리하게 사용이 가능합니다. 하지만, 그렇지 않은 경우라도 쉽게 쓰실 수 있는 방법이 있습니다. 본사에 보면 AM-MP533 이라는 확장모듈이 있습니다. 이 모듈은 둥근 커넥터인 아답타의 12V 전원을 받아서, 2핀 커넥터로 12V를 Direct로 출력해 주고, 또한, 5V, 3.3V를 각각 레귤레이터로 생성하여 2핀 커넥터들로 5V 및 3.3V 를 만들어 주고, 5V, 3.3V, GND가 달려 있는 3핀 커넥터도 있습니다. 이 모듈을 쓰면, 편리하게 문제가 해결될 것 같습니다. 또한, 본사에 1핀 및 2핀, 3핀 등을 커넥터간에 쉽게 연결할 수 있도록 만든 케이블도 있습니다. SE-MIN1 이라는 미니 케이블과 SE-MIN2, SE-MIN3 케이블이 그것입니다. 제품 소개에서 기구부 쪽에 가면 구매 가능합니다. 또한, 5V 논리 전원은 150mA 이내면 되기 때문에, 그 이상되는 것만 사시면 됩니다. 하지만, 사지 말고, 가지고 있는 12V 전원을 바로 MP533으로 넣고, 다시 2핀 케이블로 가지고 계신 메인보드에 12V 공급하고, 5V 출력을 MIN2로 CS2P와 연결하면 되겠습니다. 수고하세요. 수고하세요. > > > http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=124936 > ↑위의 질문을 올렸던 글쓴이 입니다. > > 현재 상황은, AM-CS2P의 12V 2핀 커넥터 전원에는 12V3A 아답터를 산 뒤 전선을 따서 전기를 공급하고 있습니다. > 그런데 위의 질문글에서 12V 모터용 전원과는 별도로 5V 논리용 전원을 넣어줘야 한다는 것을 알게됬고 10핀 박스 커넥터의 9번핀과 10번핀에 논리용 5V 전원을 넣으려 합니다. 그런데 NEWTC에서 발매한 KD-128PRO 같은것을 쓰고 있었다면 박스커넥터 연결케이블로 AVR의 10핀 포트와 모터드라이버의 10핀 커넥터를 연결하는 것만으로 자동으로 전원이 들어올텐데 제가 쓰는 것은 학교에서 실습용으로 마련한 HBE-MCU-Allinone 키트라서 따로 5V를 넣어주는 핀이 없습니다. > > 그래서 5V 전원을 어떻게 넣어줘야 할지가 고민입니다. > > 질문1: 5V 변환 아답터를 산뒤 선을 따서 9번핀과 10번핀에 각각 +와 -를 연결해 줘도 되나요?(보드 밑에 납땜하려고 합니다) > > 질문2: 만약 그렇게 할경우 5V 몇 암페어 변환기를 사야하나요? 데이터 시트에는 9번 핀과 10번 핀이 5V라고만 나와있고 몇 암페어인지는 나와있지를 않아서요. >
7810 답변완료kd-128pro 타이머/카운터 기능 포트질문입니다. 김기성 2012-12-05 1,411
avr을 공부하기 시작한 학생입니다. 제가 한진데이터에서 만든 유량센서를 사용하려고 합니다(http://devicemart.co.kr/goods/view.php?seq=32786) 제가 궁금한것은 센서의 출력값을 타이머/카운터 기능을 가지는 포트에 연결할 때 포트 커넥터 핀번호 1번에만 연결해도 센서 값을 atmega가 읽어들일수 있나요? DDRx나 PINx, PORTx는 8비트 포트의 경우 포트커넥터 핀번호 1번에 해당하는 비트만 입력으로 설정하면 되는건가요?
관리자 답변 관리자 · 2012-12-05
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 해당 센서를 보니, GND, VCC를 가해주면 신호 출력이 펄스로 나오는 겁니다. 당연히 센서의 GND는 키트의 GND끼리 연결해야 하고, 신호 출력은 1번핀에 연결하여 입력으로 받거나, 외부 인터럽트 등으로 받으면 되겠습니다. 수고하세요. > > > avr을 공부하기 시작한 학생입니다. > 제가 한진데이터에서 만든 유량센서를 사용하려고 합니다(http://devicemart.co.kr/goods/view.php?seq=32786) > > 제가 궁금한것은 센서의 출력값을 타이머/카운터 기능을 가지는 포트에 연결할 때 포트 커넥터 핀번호 1번에만 연결해도 센서 값을 atmega가 읽어들일수 있나요? > > DDRx나 PINx, PORTx는 8비트 포트의 경우 포트커넥터 핀번호 1번에 해당하는 비트만 입력으로 설정하면 되는건가요? >
7809 답변완료SE-SM9K 모터와 FND관련 질문입니다. 최우성 2012-12-05 1,368
제목의 스테핑 모터를 사용할 때 최대 토크를 내려고 하는데 관련 그래프를 올려주시면 감사하겠습니다 또 FND가 atmega 128 pro 개발 키트에 붙여져있는데 더 큰 7segment를 사용하려면 어떻게 해야하나요? 답변해주시면 감사하겠습니다
관리자 답변 관리자 · 2012-12-05
안녕하세요? 고객님, SE-SM9K 그래프를 보내드립니다. 큰거 붙이셔도 문제없이 잘 동작합니다. 회로도 보고, 해당하는 기능핀끼리 잘 이으면 됩니다. 수고하세요. > > > 제목의 스테핑 모터를 사용할 때 최대 토크를 내려고 하는데 관련 그래프를 올려주시면 감사하겠습니다 > > 또 FND가 atmega 128 pro 개발 키트에 붙여져있는데 더 큰 7segment를 사용하려면 어떻게 해야하나요? > > 답변해주시면 감사하겠습니다 >