Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 2043 | 답변완료모터 관련 질문드립니다. | 김선용 | 2008-11-29 | 1,462 |
|
안녕하세요...저는 대학생으로 이번에 졸업작품을 준비하고 있습니다
아직은 잘 몰라서 기초적인 질문좀 드릴께요
다름이 아니라 저희가 식물에 물주는 것을 제어하는 관수 제어 시스템을
만들려고 합니다.
물을 펌핑해서 관수를 해야 할 것 같은데 이를 위해서 어떤 모터를 써야 하나요??
아니면 모터 말고 다른 것을 써야 할까요??
이에 대한 답변 부탁드려요...^^
감사합니다.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C를 이용하여 주셔서 감사합니다.
예전에 보니까, 금일 모터라는 곳에서 모터 펌프를 판매하고 있던데요.
http://www.kumilmotor.co.kr/
컨트롤러는 본사의 것을 쓸 수도 있을 겁니다.
참고하세요.
수고하세요.
>안녕하세요...저는 대학생으로 이번에 졸업작품을 준비하고 있습니다
>
>아직은 잘 몰라서 기초적인 질문좀 드릴께요
>
>다름이 아니라 저희가 식물에 물주는 것을 제어하는 관수 제어 시스템을
>만들려고 합니다.
>
>물을 펌핑해서 관수를 해야 할 것 같은데 이를 위해서 어떤 모터를 써야 하나요??
>
>아니면 모터 말고 다른 것을 써야 할까요??
>
>이에 대한 답변 부탁드려요...^^
>
>감사합니다.
|
||||
| 2042 | 답변완료물품을 여러개 구입하였는데요.. | 정성훈 | 2008-11-28 | 1,395 |
|
128 보드 (소형), 적외선 센서(4ch), DC 모터 2개, DC모터 구동모듈
USB-ISP 케이블
이렇게샀는데요..
일단 usb-isp 드라이버는 여기와서 받았습니다.
그런데 물품 구입시 10핀 케이블은 안주는건가요?
안준다면 어떻게 구할 수 있는지요?
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
10핀 케이블은 별매로 판매하고 있습니다.
개당 1,650원에 판매되고 있으니, 많은 이용 바랍니다.
본사에 직접 오시거나, 대리점에서도 구하실 수 있습니다.
용산 전자랜드 광장층의 SY 전자를 이용하시면 편리합니다.
감사합니다.
>128 보드 (소형), 적외선 센서(4ch), DC 모터 2개, DC모터 구동모듈
>
>USB-ISP 케이블
>
>이렇게샀는데요..
>
>일단 usb-isp 드라이버는 여기와서 받았습니다.
>
>그런데 물품 구입시 10핀 케이블은 안주는건가요?
>
>안준다면 어떻게 구할 수 있는지요?
|
||||
| 2041 | 답변완료KR-16DL 라인트레이서에서 추가 기능 질문 | 윤세영 | 2008-11-28 | 1,419 |
|
KR-16DL 라인트레이서에 초음파 센서와 Text LCD를 추가로 달려고하는데요
초음파 센서는 3-pin 짜리 NT-TS601을 사용할거구요
TextLCD는 14-pin 짜리 HY-1602H-205-R을 사용하려고 합니다.
라인트레이서의 기본적인 동작은 그대로 놔두고
초음파 센서를 이용해서 장애물이 나타난다면 회피하려고 합니다
LCD로는 상태를 표시해 주고요.
단순히 ATmega16의 pin수를 보면 가능할것 같은데
이제 막 배우는 입장이라서 실제 구현이 가능할지 잘모르겠습니다
혹시 필요한 그밖의 내용도 있다면 알려주세요 ^ ^;;
관리자 답변
안녕하세요..고객님....
저희 NTC제품을 이용해 주셔서 감사합니다.
환경은 충분히 가능합니다.
초음파 센서는 다른 용도로 사용안하는 적당한 핀 하나를 선택해 연결하시고 Vcc와 GND는 보드의 Vcc와 GND에 연결하시면 되시고 TextLcd는 PA와 PC포터를 이용하시면 됩니다.
초음파 센서를 이용해 장애물이 나타나면 회피를 해야 하는데 초음파 센서 하나로 판단 기준을 삼기는 좀 어렵지 않나 생각됩니다. 초음파 센서 두개를 사용한다면 장애물을 만났을때 두 센서의 거리를 판단기준으로 좌회전 또는 우회전 할 수 있습니다.
참고로 라인트레이서에서 ATmega16의 입출력 핀들이 대부분 연결되어 있기 때문에(스위치나 LED) PA와 PC를 사용하는데 주의를 요합니다.
어려우시면 차라리 우리회사에서 나온 AB-M128-B형으로 바꾸시는 것도 확장성을 위한 한 방법이라 생각됩니다.
고객님 처음부터 모든걸 완성할려고 하지 말고 기본라인트레이서 구동 =>> 초음파 센서만 구동 =>> TextLCD만 구동 =>> 라인트레이서와 초음파 센서 병합 =>> 완성, 이런 단계로 하신다면 좋은 결과를 얻을 수 있을겁니다.
각 단계에 대한 소스는 우리 홈페이지 자료실이나 Q&A를 이용하시면 많은 도움이 될것입니다.
하시다가 어려우신점은 언제라도 질문해 주세요.
감사합니다.
>KR-16DL 라인트레이서에 초음파 센서와 Text LCD를 추가로 달려고하는데요
>
>초음파 센서는 3-pin 짜리 NT-TS601을 사용할거구요
>TextLCD는 14-pin 짜리 HY-1602H-205-R을 사용하려고 합니다.
>
>라인트레이서의 기본적인 동작은 그대로 놔두고
>초음파 센서를 이용해서 장애물이 나타난다면 회피하려고 합니다
>LCD로는 상태를 표시해 주고요.
>
>단순히 ATmega16의 pin수를 보면 가능할것 같은데
>이제 막 배우는 입장이라서 실제 구현이 가능할지 잘모르겠습니다
>
>혹시 필요한 그밖의 내용도 있다면 알려주세요 ^ ^;;
|
||||
| 2040 | 답변완료호환문의 | 123 | 2008-11-28 | 1,442 |
|
▶ 스테핑모터 SE-SM2
모델 SE-SM2
▶ 스테핑 모터 클럭 구동모듈 (3A)
모델 AM-MS2 (3A)
2개 제품이 호환 가능한지요
관리자 답변
안녕하세요. 고객님.......
저희 NewTC를 이용해 주셔서 감사합니다.
아주 궁합이 잘맞습니다. ^_^
좋은 결과 있기를 바랍니다.
감사합니다.
>▶ 스테핑모터 SE-SM2
>모델 SE-SM2
>
>▶ 스테핑 모터 클럭 구동모듈 (3A)
>모델 AM-MS2 (3A)
>
>2개 제품이 호환 가능한지요
>
>
|
||||
| 2039 | 답변완료안녕하세요? 또 질문 올리겠습니다. | 조현욱 | 2008-11-28 | 1,340 |
|
최근 3일연속 본사에 찾아가 뵈었던-_- 사람입니다.
상당히 제가 귀찮게 해드리고 시간 많이 뺏은 것 같은데,
개의치 않으시고 친절하게 도와주셨던
사장님과 직원분들 웹상으로나마 다시한번 감사드립니다. (__)
그동안 골치를 썩였던 RFMOD가 이제는 제대로 동작하기 시작했습니다.
여기서 질문입니다.
현재 ATMega128pro 보드 두개를 쓰고 있으며,
보드 각각에 RFMOD 하나씩을 달아서 한 보드에서 데이타를 송신,
다른 보드에서 데이터를 수신 후 처리하는 작업을 진행하고 있습니다.
전송하려는 데이타는 1바이트짜리 char형 데이터이고, (글자 하나)
두 보드 다 UART1부분에 RFMOD를 연결하였습니다.
1. 송신 쪽 코드의 일부입니다.
(초기화코드)
void uart1_init(void) // RFMOD 부분 초기화
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0x08; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x18;
}
(송신 쪽 실제로 송신 동작하는 코드)
void send_to_car(char c)
{
while (((UCSR1A >> UDRE1)&0x01) == 0) ; // UDRE, data register empty
UDR1 = c;
}
2. 수신 쪽 코드입니다.
(초기화코드)
void uart1_init(void) // RFMOD 부분 초기화
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0x08; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x18;
}
(수신하는 코드)
char get_rfmod(void)
{
while ((UCSR1A & 0x80) == 0);
return UDR1;
}
(수신쪽 보드 응용프로그램의 일부)
(테스트용으로 무한정 송신측에서 받은 데이터를 uart0에 달린 LCD에 출력)
while(1)
{
order = get_rfmod();
printf("\\rGet data %c.",order);
}
이랬더니, 송신은 제대로 되는데, 정작 수신측에서 데이터를 못 받고 있는 건지,
수신측 응용프로그램의 원하는 동작(화면에 출력하는 동작)이 되질 않네요.
하이퍼터미널을 이용해서 테스트한 송수신은 제대로 나오고 있고,
LCD 자체나 LCD제어 및 초기화 코드에도 아무 이상이 없습니다.
아무리 봐도, 제대로 수신을 하지 못하고 있는 것 같은데
혹시 코드에 문제가 있는 것일까요?
송신측과 수신측의 UART1 초기화를 달리 해줘야 하는 것인지,
아니면 사용자 정의 함수를 통해 수신하는것이 아니라
인터럽트를 통해 처리해야 하는 것인지,
아니면 지금 제가 못 보고 있는 단순한 실수가 끼어버린것인지
잘 모르겠습니다.
관리자 답변
자답입니다.
초기화나 코딩에는 문제가 없었는데,
수신쪽 보드의 MCU가 문제가 생겨서
UART 수신 버퍼가 망가진 것 같습니다.
|
||||
| 2038 | 답변완료스텝 모터 구동 드라이버 발열이 엄청 납니다! | 스텝 | 2008-11-28 | 1,564 |
|
안녕하세요?
스텝 모터를 구동중인데 구동 드라이버에서 엄청난 열이 발생 합니다.
물론 열은 엄청 나지만, 모터는 잘 돌아갑니다.
열때문에 깜짝 놀라서 바로 전원 차단 해버리고 이렇게 문의하게 되었습니다.
사용한 제품은
스테핑 모터(9kg급) SE-SM9
스테핑 모터 구동모듈 AM-CS2P (3A용)
입니다.
드라이버의 저항과 드라이버 IC에서 엄청난 열이 발생합니다.
모르고 건드렸다가 손가락에 물집이 잡힐 정도로 뜨겁습니다. ㅠㅠ
물론 가변 저항 조절도 해보았습니다. 원인을 모르겠습니다.
모터 드라이버에서 열이 많이 나는건 무슨 이유인지 부탁 좀 드립니다.
원인으로 생각해 볼 문제가 무엇인지 부탁드립니다.
(컴퓨터 파워라 쇼트일 경우 전원이 자동 차단 됩니다.)
전원은 5v(25A) , 12v(13A) 인 컴퓨터 파워를 연결 했습니다.
5v는 avr보드와 스테핑 모터 구동모듈 AM-CS2P의 5v핀에 연결을 시켜 주었고,
12v는 스테핑 모터 구동모듈 AM-CS2P (3A용)의 12v 단자에 연결 했습니다.
관리자 답변
안녕하세요. 고객님...
저희 NewTC제품을 이용해 주셔서 감사합니다.
모터의 구동 방식이라든지 기타 환경에 의해서 문제가 발생할 수 있습니다.
그리고 기본적으로 약간의 열은 정상적이라 할 수 있습니다.
처음부터 가변저항을 적정토크(돌기시작하는 시점 직후)로 맞춰서 사용해 보시길 바랍니다.
높은 전류가 공급되는데 모터가 사용하는 전류가 한정되니깐 에너지 보존법칙에 의해서 잉여 전류가 열로 변환되는 것입니다.
가능하시다면 저항의 와트와 저항값을 높이시는 것도 하드웨어적인 해결 방법이라 생각됩니다.
그리고 소프트 웨어 적인 문제점도 있을 수 있습니다.
한방향으로만 돌리면 별 문제가 없겠지만 정회전에서 역회전으로 역회전에서 정회전으로 변경시 지연 시간을 주지 않았다든지 상을 만들어 줄때 정확한 상을 만들지 않았다든지 클럭이 모터가 소화할 수 있는 범위 밖이라든지 상의 변화가 너무 빠르다든지.... 많은 경우의 수가 있을 수 있습니다.
하나씩 다시 한번 점검하시고 질문있으시면 언제라도 올려주시기 바랍니다.
감사합니다.
>안녕하세요?
>
>스텝 모터를 구동중인데 구동 드라이버에서 엄청난 열이 발생 합니다.
>물론 열은 엄청 나지만, 모터는 잘 돌아갑니다.
>열때문에 깜짝 놀라서 바로 전원 차단 해버리고 이렇게 문의하게 되었습니다.
>
>사용한 제품은
> 스테핑 모터(9kg급) SE-SM9
> 스테핑 모터 구동모듈 AM-CS2P (3A용)
>입니다.
>
>드라이버의 저항과 드라이버 IC에서 엄청난 열이 발생합니다.
>모르고 건드렸다가 손가락에 물집이 잡힐 정도로 뜨겁습니다. ㅠㅠ
>
>물론 가변 저항 조절도 해보았습니다. 원인을 모르겠습니다.
>
>모터 드라이버에서 열이 많이 나는건 무슨 이유인지 부탁 좀 드립니다.
>
>원인으로 생각해 볼 문제가 무엇인지 부탁드립니다.
>(컴퓨터 파워라 쇼트일 경우 전원이 자동 차단 됩니다.)
>
>전원은 5v(25A) , 12v(13A) 인 컴퓨터 파워를 연결 했습니다.
>5v는 avr보드와 스테핑 모터 구동모듈 AM-CS2P의 5v핀에 연결을 시켜 주었고,
>12v는 스테핑 모터 구동모듈 AM-CS2P (3A용)의 12v 단자에 연결 했습니다.
>
|
||||
| 2037 | 답변완료프로그램 질문 | 허훈 | 2008-11-28 | 1,309 |
|
kr-dl16을 만들고 있습니다.
프로그램에서 보면
모터, led, adc에서 전부 다 and, or를 사용해서 값을 정의 하는데요
그냥 바로 값을 주면 안되나요
예를 들어
0x06 | (ch & 0x0f)
라고 되어 있는 것도 그냥
ch & 0x0f
이렇게 준다던가
led_on시킬 때도 portb=0x03 이라고 바로 주면 안되나요??
왜 portb= portb | 0x03 이라고 주는 건지 잘 모르겠습니다..
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
좋은 질문입니다.
그렇게 한 이유는 비트 연산을 통해서, 원하는 비트만 1로 만들고(SET, or 연산을 통해서) 원하는 비트만 0으로 만들고(CLEAR, and 연산을 통해서) 하기 위해서 입니다.
그냥 그렇게 하셔도 되겠지만, 임베디드 실습이니까,
앞으로 그렇게 원하는 비트만 연산해야 하는 일이 많을 겁니다.
수고하세요.
>kr-dl16을 만들고 있습니다.
>
>프로그램에서 보면
>
>모터, led, adc에서 전부 다 and, or를 사용해서 값을 정의 하는데요
>
>그냥 바로 값을 주면 안되나요
>
>예를 들어
>
>0x06 | (ch & 0x0f)
>
>라고 되어 있는 것도 그냥
>
>ch & 0x0f
>
>이렇게 준다던가
>
>led_on시킬 때도 portb=0x03 이라고 바로 주면 안되나요??
>
>왜 portb= portb | 0x03 이라고 주는 건지 잘 모르겠습니다..
|
||||
| 2036 | 답변완료적외선 센서 수광 발광 부 | 정상화 | 2008-11-27 | 1,422 |
|
질문이 있어서 이렇게 질문 드립니다. 왼쪽이 발광부 센서이고 오른쪽이 수광부 센서입니다. 발광부 센서 만들고 수광부 센서를 보기의 회로도 같이 구성했는데.. 발광부는 잘 구성되서 잘 돌아가는 것 같은데.. 수광부 회로 파워서플라이로 5볼트를 준다음에 가변저항을 바꿔줘도 오실로 스코프의 전압의 변화가 없습니다. 회로도가 잘못된 걸까요? 아님 제가 잘 못 만든 걸까요..? 회로도에 문제가 있으면 답변 해주시면 감사하겠습니다.
관리자 답변
안녕하세요? 고객님,
저희 NewTC를 이용해 주셔서 감사합니다.
그런데, 회로상으로 보면, OPAMP를 AMP로 쓴 게 아니라, 비교기로 쓰신 것 같네요.그래서, 전압의 변화가 거의 없지 않을까 싶습니다.
가변저항이 붙은 쪽은 0~2.5V 출력이고, 수광부가 동작하는 순간, VCC쪽과 붙으면서 전압이 - 쪽과 + 쪽이 비교되면서, 0 또는 1의 출력이 발생할 것 같네요.
우리 회사 회로도를 참고 바랍니다.
http://www.newtc.co.kr/product_AM-IRS.php
수고하세요.
>질문이 있어서 이렇게 질문 드립니다. 왼쪽이 발광부 센서이고 오른쪽이 수광부 센서입니다. 발광부 센서 만들고 수광부 센서를 보기의 회로도 같이 구성했는데.. 발광부는 잘 구성되서 잘 돌아가는 것 같은데.. 수광부 회로 파워서플라이로 5볼트를 준다음에 가변저항을 바꿔줘도 오실로 스코프의 전압의 변화가 없습니다. 회로도가 잘못된 걸까요? 아님 제가 잘 못 만든 걸까요..? 회로도에 문제가 있으면 답변 해주시면 감사하겠습니다.
|
||||
| 2035 | 답변완료bldc 속도제어소스..... | qkrrbaks | 2008-11-27 | 1,454 |
|
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/wdt.h>
#include <avr/iom16.h>
#define BYTE unsigned char
#define WORD unsigned int
#define IBYTE volatile BYTE
//GLOVAL VARIABLES DEFINITION
BYTE HALL_DATA,OLD_HALL_DATA,NEW_HALL_CNT; //HALL IC INPUT DATA
BYTE CNT,RAMP_CNT; //TEMPORARY COUNT
BYTE REF_DUTY,DUTY; //PWM DUTY VALUE
IBYTE STA_CNT,STA_FLAG,TURN;
IBYTE ERR_FLAG;
IBYTE RUN_FLAG,DIR_FLAG,OLD_DIR_FLAG,OPEN_HALL_CNT;
IBYTE TENMS,HUNMS;
BYTE KEY_BUF,BKEY_BUF,KEY_DATA,BKEY_DATA;
BYTE HALL_CNT,RUN_CNT,DIR_CNT,BRK_CNT;
BYTE CNT_READ,OLD_CNT_READ,EX_HALL_CNT;
BYTE SWITCH_DATA,RUN_DIRECTION,VR_DATA,RUN_CW;
IBYTE TEMP_FLAG;
void VAL_INIT(void);
void IO_INIT(void);
void PWM_INIT(void);
void T0_INIT(void);
void RUN_SEQ(void);
void VOLT_START(void);
void RUN_MODE(void);
void STOP_MODE(void);
void KEY_MODE(void);
void HALL_SCAN(void);
void DIRECTION(void);
//========================= GLOVAL FUNCTIONS ==========================
//-------------------- RUN_SEQ -------------------------------------
void RUN_SEQ(void)
{
if(RUN_CW==1)
{
switch(SWITCH_DATA)
{
case 1:
outp(0xDE, PORTC);
break;
case 2:
outp(0xDD, PORTC);
break;
case 3:
outp(0xF5, PORTC);
break;
case 4:
outp(0xF3, PORTC);
break;
case 5:
outp(0xEB, PORTC);
break;
case 6:
outp(0xEE, PORTC);
break;
}
}
else if(RUN_CW==2)
{ switch(SWITCH_DATA)
{
case 1:
outp(0xF3, PORTC);
break;
case 2:
outp(0xEB, PORTC);
break;
case 3:
outp(0xEE, PORTC);
break;
case 4:
outp(0xDE, PORTC);
break;
case 5:
outp(0xDD, PORTC);
break;
case 6:
outp(0xF5, PORTC);
break;
}
}
else STOP_MODE();
}
//-------------------- IO_INIT -------------------------------------
void IO_INIT(void)
{
outp(0X00, DDRA);
outp(0x00, PORTA);
outp(0x00, DDRB);
outp(0x00, PORTB);
outp(0xFF, DDRC);
outp(0x00, PORTC);
outp(0x20, DDRD);
outp(0x20, PORTD);
}
//-------------------- PWM_INIT -------------------------------------
void PWM_INIT(void)
{
outp(0xC1, TCCR1A);
outp(0x01, TCCR1B);
outp(0x00, TCNT1H);
outp(0x00, TCNT1L);
outp(0x00, OCR1AH);
outp(0x00, OCR1AL);
}
//-------------------- STOP_MODE -------------------------------------
void STOP_MODE(void)
{
cli();
OCR1A=0;
RUN_FLAG=0;
//DUTY=0X00
sei();
}
//-------------------- RUN_MODE -------------------------------------
void RUN_MODE(void)
{
cli();
sei();
}
//-------------------- T0_INIT -------------------------------------
void T0_INIT(void)
{
outp(0x02, TCCR0);
outp(-100,TCNT0);
outp(0x01, TIMSK);
}
//-------------------- VAL_INIT -------------------------------------
void VAL_INIT(void)
{
RUN_FLAG=0;
HALL_DATA=0;
SWITCH_DATA=0;
KEY_DATA=0;
}
//-------------------- KEY_MODE -------------------------------------
void KEY_MODE(void)
{
KEY_DATA=(inp(PINB)&0x03);
switch(KEY_DATA)
{
case 1:
RUN_FLAG=1;
break;
case 2:
RUN_FLAG=0;
break;
}
}
//-------------------- HALL_SCAN -------------------------------------
void HALL_SCAN(void)
{
HALL_DATA=(inp(PINA)&0xE0);
switch(HALL_DATA)
{
case 0x80:
SWITCH_DATA=1;
break;
case 0xC0:
SWITCH_DATA=2;
break;
case 0x40:
SWITCH_DATA=3;
break;
case 0x60:
SWITCH_DATA=4;
break;
case 0x20:
SWITCH_DATA=5;
break;
case 0xA0:
SWITCH_DATA=6;
break;
}
}
//-------------------- AD_INIT -------------------------------------
void AD_INIT(void)
{
outp(0x00,ADMUX);
outp(0x00,ADCSR);
}
//-------------------- VR_ADC -------------------------------------
/*
void VR_ADC(void)
{
outp(0x00,ADMUX);
outp(0xc5,ADCSR);
// CLOCK/8
}
*/
//-------------------- RUN_SEQ -------------------------------------
void DIRECTION(void)
{
if(RUN_FLAG==0)
{
RUN_DIRECTION=(inp(PINB)&0x0C);
switch(RUN_DIRECTION)
{
case 4:
RUN_CW=1; //정회전
break;
case 8:
RUN_CW=2; //역회전
break;
}
}
else
{
}
}
//======================= INTERRUPT ROUTINE PART =====================
//------------------- TIMER0 OVERFLOW INTERRUPT SUBROUTINE -------------
// TIMER FREQUENCY = 10KHz = 100uS
SIGNAL(SIG_OVERFLOW0)
{
TCNT0=(-99);
HALL_SCAN();
RUN_SEQ();
DIRECTION();
if(RUN_FLAG==1)
{
/*VR_ADC();
VR_DATA=(ADCL+ADCH*256)/4;
//VR_DATA=256-VA_CAL;
*/
if(DUTY>0xE5)
{
DUTY=0XE5;
}
else if(DUTY<0X19)
{
DUTY=0X19;
}
else OCR1A=DUTY;
}
else STOP_MODE();
}
//=======================* MAIN LOOP *==========================
int main(void)
{
outp(0X02,MCUCR);
outp(0X00,GIFR);
IO_INIT();
VAL_INIT();
PWM_INIT();
T0_INIT();
AD_INIT();
DIRECTION();
sei();
while(1)
{
KEY_MODE();
}
}
이 소스는 atmega16 을이용한 bldc모터 구동소스입니다.
이대로 모터를 돌리면 그냥 돌아가기만 할뿐 피드백은 시키지 못합니다.
만약에 부하가 가해졌을 경우 그 오차를 피드백시켜서 듀티비로 보상해줘서
원래속도로 돌아가게끔 해야되는데 어떻게 고쳐야 할지를 모르겠네요...
(홀센서를 이용해서 속도를 측정한후 그오차값만큼 보상해줘야함)
조언 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C를 이용하여 주셔서 감사합니다.
본사에서는 예전에 홀센서를 이용하여 반도체로 만든 IC가 있어서, 그 IC를 이용하여 모터의 회전 각도를 한바퀴에 1024 단계로 나누어서 알 수 있도록 만든
보드를 만든 적이 있습니다. AS5040이라는 칩이었는 데,
그런 칩을 이용하시던가, 홀센서를 이용하여, 돌아가는 펄스를 보고, 몇도 돌았는 지, 몇 바퀴를 돌았는 지, 세어 가면서 원래 위치보다 못돌아갔는 지를 알아내야 하겠구요. 그에 따라서, 적절히 프로그래밍 해야 할 겁니다.
뭐라고 답변해 드려야 할지 잘 모르겠지만, 일단, 그렇게 방향을 잡아서 하셔야 할 것 같습니다. 도움이 되기를 바랍니다. 다음에는 본명으로 질문하여 주시기 바랍니다.
감사합니다.
수고하세요.
>#include <avr/signal.h>
>#include <avr/pgmspace.h>
>#include <avr/io.h>
>#include <avr/signal.h>
>#include <avr/interrupt.h>
>#include <avr/delay.h>
>#include <avr/wdt.h>
>#include <avr/iom16.h>
>
>
>#define BYTE unsigned char
>#define WORD unsigned int
>#define IBYTE volatile BYTE
>
>//GLOVAL VARIABLES DEFINITION
>BYTE HALL_DATA,OLD_HALL_DATA,NEW_HALL_CNT; //HALL IC INPUT DATA
>BYTE CNT,RAMP_CNT; //TEMPORARY COUNT
>BYTE REF_DUTY,DUTY; //PWM DUTY VALUE
>IBYTE STA_CNT,STA_FLAG,TURN;
>IBYTE ERR_FLAG;
>IBYTE RUN_FLAG,DIR_FLAG,OLD_DIR_FLAG,OPEN_HALL_CNT;
>IBYTE TENMS,HUNMS;
>BYTE KEY_BUF,BKEY_BUF,KEY_DATA,BKEY_DATA;
>BYTE HALL_CNT,RUN_CNT,DIR_CNT,BRK_CNT;
>BYTE CNT_READ,OLD_CNT_READ,EX_HALL_CNT;
>
>BYTE SWITCH_DATA,RUN_DIRECTION,VR_DATA,RUN_CW;
>IBYTE TEMP_FLAG;
>
>
>
>void VAL_INIT(void);
>void IO_INIT(void);
>void PWM_INIT(void);
>void T0_INIT(void);
>void RUN_SEQ(void);
>void VOLT_START(void);
>void RUN_MODE(void);
>void STOP_MODE(void);
>void KEY_MODE(void);
>void HALL_SCAN(void);
>void DIRECTION(void);
>
>
>
>//========================= GLOVAL FUNCTIONS ==========================
>
>//-------------------- RUN_SEQ -------------------------------------
>void RUN_SEQ(void)
>{
> if(RUN_CW==1)
> {
> switch(SWITCH_DATA)
> {
> case 1:
> outp(0xDE, PORTC);
> break;
>
> case 2:
> outp(0xDD, PORTC);
> break;
>
> case 3:
> outp(0xF5, PORTC);
> break;
>
> case 4:
> outp(0xF3, PORTC);
> break;
>
> case 5:
> outp(0xEB, PORTC);
> break;
>
> case 6:
> outp(0xEE, PORTC);
> break;
> }
> }
> else if(RUN_CW==2)
> { switch(SWITCH_DATA)
> {
> case 1:
> outp(0xF3, PORTC);
> break;
>
> case 2:
> outp(0xEB, PORTC);
> break;
>
> case 3:
> outp(0xEE, PORTC);
> break;
>
> case 4:
> outp(0xDE, PORTC);
> break;
>
> case 5:
> outp(0xDD, PORTC);
> break;
>
> case 6:
> outp(0xF5, PORTC);
> break;
> }
> }
> else STOP_MODE();
>}
>
>
>//-------------------- IO_INIT -------------------------------------
>
>void IO_INIT(void)
>{
> outp(0X00, DDRA);
> outp(0x00, PORTA);
> outp(0x00, DDRB);
> outp(0x00, PORTB);
> outp(0xFF, DDRC);
> outp(0x00, PORTC);
> outp(0x20, DDRD);
> outp(0x20, PORTD);
>}
>
>
>//-------------------- PWM_INIT -------------------------------------
>
>void PWM_INIT(void)
>{
> outp(0xC1, TCCR1A);
> outp(0x01, TCCR1B);
> outp(0x00, TCNT1H);
> outp(0x00, TCNT1L);
> outp(0x00, OCR1AH);
> outp(0x00, OCR1AL);
>}
>
>
>//-------------------- STOP_MODE -------------------------------------
>
>void STOP_MODE(void)
>{
> cli();
> OCR1A=0;
> RUN_FLAG=0;
> //DUTY=0X00
> sei();
>}
>
>
>//-------------------- RUN_MODE -------------------------------------
>
>void RUN_MODE(void)
>{
> cli();
>
> sei();
>}
>
>
>//-------------------- T0_INIT -------------------------------------
>
>void T0_INIT(void)
>{
> outp(0x02, TCCR0);
> outp(-100,TCNT0);
> outp(0x01, TIMSK);
>}
>
>
>//-------------------- VAL_INIT -------------------------------------
>
>void VAL_INIT(void)
>{
> RUN_FLAG=0;
> HALL_DATA=0;
> SWITCH_DATA=0;
> KEY_DATA=0;
>
>}
>
>
>//-------------------- KEY_MODE -------------------------------------
>
>void KEY_MODE(void)
>{
> KEY_DATA=(inp(PINB)&0x03);
> switch(KEY_DATA)
> {
> case 1:
> RUN_FLAG=1;
> break;
>
> case 2:
> RUN_FLAG=0;
> break;
> }
>}
>
>
>//-------------------- HALL_SCAN -------------------------------------
>
>void HALL_SCAN(void)
>{
> HALL_DATA=(inp(PINA)&0xE0);
> switch(HALL_DATA)
> {
> case 0x80:
> SWITCH_DATA=1;
> break;
>
> case 0xC0:
> SWITCH_DATA=2;
> break;
>
> case 0x40:
> SWITCH_DATA=3;
> break;
>
> case 0x60:
> SWITCH_DATA=4;
> break;
>
> case 0x20:
> SWITCH_DATA=5;
> break;
>
> case 0xA0:
> SWITCH_DATA=6;
> break;
> }
>}
>
>
>//-------------------- AD_INIT -------------------------------------
>
>void AD_INIT(void)
>{
> outp(0x00,ADMUX);
> outp(0x00,ADCSR);
>}
>
>//-------------------- VR_ADC -------------------------------------
>/*
>void VR_ADC(void)
>{
> outp(0x00,ADMUX);
>
> outp(0xc5,ADCSR);
> // CLOCK/8
>}
>*/
>
>//-------------------- RUN_SEQ -------------------------------------
>
>void DIRECTION(void)
>{
> if(RUN_FLAG==0)
> {
> RUN_DIRECTION=(inp(PINB)&0x0C);
> switch(RUN_DIRECTION)
> {
> case 4:
> RUN_CW=1; //정회전
> break;
>
> case 8:
> RUN_CW=2; //역회전
> break;
> }
> }
> else
> {
> }
>}
>//======================= INTERRUPT ROUTINE PART =====================
>
>//------------------- TIMER0 OVERFLOW INTERRUPT SUBROUTINE -------------
>
>// TIMER FREQUENCY = 10KHz = 100uS
>SIGNAL(SIG_OVERFLOW0)
>{
> TCNT0=(-99);
>
> HALL_SCAN();
> RUN_SEQ();
> DIRECTION();
> if(RUN_FLAG==1)
> {
> /*VR_ADC();
> VR_DATA=(ADCL+ADCH*256)/4;
> //VR_DATA=256-VA_CAL;
> */
> if(DUTY>0xE5)
> {
> DUTY=0XE5;
> }
> else if(DUTY<0X19)
> {
> DUTY=0X19;
> }
> else OCR1A=DUTY;
>
>
> }
> else STOP_MODE();
>
>}
>
>
>//=======================* MAIN LOOP *==========================
>int main(void)
>{
> outp(0X02,MCUCR);
> outp(0X00,GIFR);
>
> IO_INIT();
> VAL_INIT();
> PWM_INIT();
> T0_INIT();
> AD_INIT();
> DIRECTION();
>
>
> sei();
>
> while(1)
> {
> KEY_MODE();
>
> }
>}
>
>
>이 소스는 atmega16 을이용한 bldc모터 구동소스입니다.
>이대로 모터를 돌리면 그냥 돌아가기만 할뿐 피드백은 시키지 못합니다.
>만약에 부하가 가해졌을 경우 그 오차를 피드백시켜서 듀티비로 보상해줘서
>원래속도로 돌아가게끔 해야되는데 어떻게 고쳐야 할지를 모르겠네요...
>(홀센서를 이용해서 속도를 측정한후 그오차값만큼 보상해줘야함)
>조언 부탁드립니다.
|
||||
| 2034 | 답변완료안녕하세요 질문사항 올립니다. | 대학생 | 2008-11-27 | 1,378 |
|
안녕하세요, ntc 관계자님.
ntc 부품을 통해 avr을 처음 접해본 대학생입니다.
다름이 아니고 제가 AB-M128-A atmega128 개발보드를 구입해서 사용하는데
이 atmega128에서 output 신호는 어느 단자로 나오나요?
포트 a,b,f가 있는데 a,b,f엔 이미 다른 센서들의 output 신호들이 연결되어
있습니다. (즉, 센서의 output을 받아서 avr 내의 코드에서 처리는 형태입니다.)
이 포트 a,b,f 로만 avr의 output signal 이 나오나요?
아니면 혹시 isp 커넥터 부분을 output으로 사용할 수 있나요?
이 avr에서 나오는 신호를 컴퓨터로 보내야하거든요;
질문을 요약해드리면,
1. 이 atmega128에서 output 신호는 어느 단자로 나오나요?
2. avr에서 나오는 output 신호를 다른 컴퓨터(데스크탑 혹은 랩탑)에서 받아서
처리하려면 어떻게 해야하나요?
3. 이 포트 a,b,f 로만 avr의 output signal 이 나오나요?
4. 포트 a,b,f 는 input, output의 역할을 모두 하는건가요?
5. 혹시 isp 커넥터 부분을 output으로 사용할 수 있나요?
이렇게 5가지가 되겠네요.
좋은 제품 편리하게 사용할 수 있어서 참 좋네요.
빠른 답변 부탁드립니다. 감사합니다. 안녕히 계세요.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
우선, ATMEGA128의 모든 포트는 입력 출력이 모두 가능합니다.
그 중에서, AB-M128-A 보드는 A, B, F 포트만 10핀 커넥터로 뽑아 둔 것입니다.
옆에 빵판을 활용하여 회로를 꾸며서, 쓰시라고 나머지 포트는 못 뽑은 것이지만, 사실 C, D, E, G 포트는 밑에 면에 보면 납땜 면에서 떔해서 사용이 가능합니다.
즉, 출력이라고 말씀하신 것 중에서, 컴퓨터와 연결하려면, 모든 포트 중에서 한 포트를 프린터 포트를 통해서, 컴퓨터에서 입력 받을 수 있을 거구요.
아니면, 시리얼 포트 출력 중 MAX232를 거친 출력인 12V RS232C 레벨의 단자를 즉, 모듈의 3핀 UART 단자 말인데요. 그 단자를 SE-3T9 케이블을 이용하여 PC 쪽의 시리얼 포트에 연결하면 PC와 시리얼 통신이 가능합니다.
ISP 단자로도 물론 데이터를 주고 받을 수 있는 게, 그 핀들이 결국 포트선들과 기능을 공유하고 있거든요. 하지만, 그렇게 안쓰셔도 다른 포트들이 사용하기 좋게 10핀으로 나와 있으니 사용하시구요. 가능하면 시리얼 통신하시는 게 가장 편리할 거라고 생각됩니다.
질문하신 내용으로 볼 때, 거의 처음 접하시는 것 같은데요.
강좌->AVR 강좌를 통해서 이쪽에 관한 지식을 습득하시면 좀 더 이해가 빠르실 것 같습니다. 급하다고 기본적인 사항을 습득하지 않으면, 오히려 이상한 곳에서 더 많은 시간을 먹게 됩니다. 약간 돌아가는 것 같더라도, 공부해 가면서 하시는 것이 더 나을 것 같습니다. 네이버 까페에도 가입하시면, 보다 편리하게 사용하실 수 있을 것 같네요. cafe.naver.com/newtc 입니다.
다음에는 꼭 본명으로 질문해 주시기 바랍니다.
수고하세요.
>안녕하세요, ntc 관계자님.
>
>ntc 부품을 통해 avr을 처음 접해본 대학생입니다.
>
>다름이 아니고 제가 AB-M128-A atmega128 개발보드를 구입해서 사용하는데
>
>이 atmega128에서 output 신호는 어느 단자로 나오나요?
>
>포트 a,b,f가 있는데 a,b,f엔 이미 다른 센서들의 output 신호들이 연결되어
>
>있습니다. (즉, 센서의 output을 받아서 avr 내의 코드에서 처리는 형태입니다.)
>
>이 포트 a,b,f 로만 avr의 output signal 이 나오나요?
>
>아니면 혹시 isp 커넥터 부분을 output으로 사용할 수 있나요?
>
>이 avr에서 나오는 신호를 컴퓨터로 보내야하거든요;
>
>질문을 요약해드리면,
>
>1. 이 atmega128에서 output 신호는 어느 단자로 나오나요?
>
>2. avr에서 나오는 output 신호를 다른 컴퓨터(데스크탑 혹은 랩탑)에서 받아서
>
>처리하려면 어떻게 해야하나요?
>
>3. 이 포트 a,b,f 로만 avr의 output signal 이 나오나요?
>
>4. 포트 a,b,f 는 input, output의 역할을 모두 하는건가요?
>
>5. 혹시 isp 커넥터 부분을 output으로 사용할 수 있나요?
>
>이렇게 5가지가 되겠네요.
>
>좋은 제품 편리하게 사용할 수 있어서 참 좋네요.
>
>빠른 답변 부탁드립니다. 감사합니다. 안녕히 계세요.
|
||||
| 2033 | 답변완료3축 가속도계의 초기값 문의 | sprix | 2008-11-27 | 1,355 |
|
안녕하세요.
귀사의 3축가속도계를 구입하여 사용하고 있는 사용자입니다.
다름이 아니고 3축 가속도계를 ATmega128에 장착해서 사용중인데요
맞게 잘 장착한 것인지 궁금해서 문의 드립니다.
3.3V 전압을 인가했구요 XYZ 각 축에서의 ADC 값을 읽어 들여 사용중입니다.
그런데 보드의 특성상 AREF를 인가하기가 쉽지가 않아서 그냥 캐패시터만
전원부에 부착했는데요. 그러니까 결국 3.3V 전원 출력단에 캐패시터를 하나
달아서 전원을 안정화 시켰다는 이야기입니다.
이렇게 해도 될지요?
마지막으로 맞게 측정되는 값이라면, 그냥 평면의 책상에 올려 놓았을때 측정되는
값이 어느정도 나와야 잘 측정되는 것이라고 할 수 있을지 궁금합니다.
답변 부탁드릴께요.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
그런데, AVR 보드는 저희 보드가 아닌가 봅니다.
저희 보드는 AREF를 기본이 5V 로 되어 있지만, 따로 3.3V를 연결하면 되도록 AREF 핀을 별도로 제공하고 있거든요. 그 핀에 3.3V를 연결하면 ADC 범위가 0~3.3V가 됩니다. 하지만, 고객님의 사정상 어쩔수 없이 그렇게 연결하셨다고 해도, 3.3V가 잘 들어가고 있을 테니까, 괜찮을 거 같습니다. 물론 고주파 노이즈 제거상 104를 달아 주셨으면 더 좋았겠지요.
책상 위에 올려 놓았을 때, 어떤 위치에 있을 지 모르지만, 각 축마다 일정한 값으로 300~550 사이의 값이 잘 나오면 정상일 것 같습니다. 본사의 소스를 참고하여 쓰시면 될것 같습니다. 아래에 윈도쪽 소스와 ATMEGA128용 소스를 모두 공개하고 있으니, 사용하시면 되겠습니다.
- 아래 -
http://www.newtc.co.kr/download/AM-3AXIS/Window_Example.zip
수고하세요.
>안녕하세요.
>
>귀사의 3축가속도계를 구입하여 사용하고 있는 사용자입니다.
>
>다름이 아니고 3축 가속도계를 ATmega128에 장착해서 사용중인데요
>
>맞게 잘 장착한 것인지 궁금해서 문의 드립니다.
>
>3.3V 전압을 인가했구요 XYZ 각 축에서의 ADC 값을 읽어 들여 사용중입니다.
>
>그런데 보드의 특성상 AREF를 인가하기가 쉽지가 않아서 그냥 캐패시터만
>
>전원부에 부착했는데요. 그러니까 결국 3.3V 전원 출력단에 캐패시터를 하나
>
>달아서 전원을 안정화 시켰다는 이야기입니다.
>
>이렇게 해도 될지요?
>
>마지막으로 맞게 측정되는 값이라면, 그냥 평면의 책상에 올려 놓았을때 측정되는
>
>값이 어느정도 나와야 잘 측정되는 것이라고 할 수 있을지 궁금합니다.
>
>답변 부탁드릴께요.
|
||||
| 2032 | 답변완료'AD-USBISP V02' 질문 있습니다 | 김종구 | 2008-11-27 | 1,279 |
|
'AD-USBISP V02'를 구매하려고 합니다.
저는 C언어를 사용하지 않고 다를 언어를 사용합니다.
그래서 컴파일해서 HEX나 BIN로 만들어 포니프로에서 다운로드했습니다.
귀사의 'AD-USBISP V02'를 지원하는 프로그램이 있는지요?(HEX나 BIN을 불러와서 AVR에 다운로드...)
관리자 답변
안녕하세요. 고객님..
저희 NTC제품을 이용해 주셔서 감사합니다.
AVRSTUDIO나 ICCAVR을 이용하시면 쉽게 HEX파일을 타겟보드에 라이트할수 있습니다. AVRSTUDIO나 ICCAVR은 저희 자료실에 가시면 다운받을 수 있습니다.
감사합니다.
>'AD-USBISP V02'를 구매하려고 합니다.
>저는 C언어를 사용하지 않고 다를 언어를 사용합니다.
>그래서 컴파일해서 HEX나 BIN로 만들어 포니프로에서 다운로드했습니다.
>
>귀사의 'AD-USBISP V02'를 지원하는 프로그램이 있는지요?(HEX나 BIN을 불러와서 AVR에 다운로드...)
|
||||
| 2031 | 답변완료모터 제어시 궁금한점이 있습니다. | 모비딕 | 2008-11-27 | 1,335 |
|
BLDC나 스테핑 모터 제어시
모터에 Clock 과 Enable중 어느 것을 먼저 주어야하나요?
먼저 주어야하는 이유도 설명해주시면 고맙겠습니다.
관리자 답변
안녕하세요...고객님.
저희 NTC제품을 이용해 주셔서 감사합니다.
어느 것을 먼저 하셔도 상관없습니다.
보드에 파워를 넣고 스위치를 온하는것과 온 되어 있는 상태에서 파워를 넣으나 마찬가지겠지요..
감사합니다.
>BLDC나 스테핑 모터 제어시
>
>모터에 Clock 과 Enable중 어느 것을 먼저 주어야하나요?
>
>먼저 주어야하는 이유도 설명해주시면 고맙겠습니다.
|
||||
| 2030 | 답변완료시리얼통신용 usb가 이상해요. | 박재형 | 2008-11-27 | 1,394 |
|
안녕하세요..
얼마전까지 잘 사용하던 시리얼통신할때 쓰는 usb가.. 이상하네요
UART 랑 컴터랑 연결해서 사용하는거요..
GND, TXd, RXd 3핀만 연결했는데 이상하게 회로에 2.5v 전압이 걸리네요
그리고 당연히 데이터 송수신도 안돼고요..
이거 usb 가 고장난건가요??
만일 고장났다면.. a/s 도 가능한가요???
관리자 답변
안녕하세요. 고객님...저희 NTC제품을 이용해 주셔서 감사합니다.
핀연결 다시 한번 확인해주시고 전원이 안들어갔는데 회로에 전원이 들어갔다니 이상하네요. 혹시 RX, TX핀이 Vcc에 연결된건 아닌가요?
저희 회사로 보내주시면 테스트해서 A/S해 드리겠습니다.
참고로, 테스트 결과 유료 A/S에 해당되면 A/S비 부담하셔야 합니다.
감사합니다.
>안녕하세요..
>
>얼마전까지 잘 사용하던 시리얼통신할때 쓰는 usb가.. 이상하네요
>
>UART 랑 컴터랑 연결해서 사용하는거요..
>
>
>GND, TXd, RXd 3핀만 연결했는데 이상하게 회로에 2.5v 전압이 걸리네요
>
>그리고 당연히 데이터 송수신도 안돼고요..
>
>이거 usb 가 고장난건가요??
>
>만일 고장났다면.. a/s 도 가능한가요???
>
>
|
||||
| 2029 | 답변완료AM-128 Pro 질문입니다. | 신준수 | 2008-11-26 | 1,402 |
|
안녕하세요.
AM-128 Pro를 구입해서 사용중인데요.
설정중에 호기심으로 퓨즈비트 설정을 바꾸었는데 그후로 아예 부팅이 안됩니다.
A/S가 가능한지 아니면 돈 주고 새로 사야하는건지 질문 드려봅니다. ㅠ_ㅠ
관리자 답변
안녕하세요. 고객님...
저희 NTC제품을 이용해 주셔서 감사합니다.
퓨즈비트의 클럭선택부분을 외부 오실레이트로 설정한것 같군요..
인공호흡을 통해 살릴수 있습니다.
가지고 찾아오시든지 아님 택배로 보내주시면 A/S해 드리겠습니다.
참고로 택배비는 본인 부담입니다.
감사합니다.
>안녕하세요.
>AM-128 Pro를 구입해서 사용중인데요.
>설정중에 호기심으로 퓨즈비트 설정을 바꾸었는데 그후로 아예 부팅이 안됩니다.
>A/S가 가능한지 아니면 돈 주고 새로 사야하는건지 질문 드려봅니다. ㅠ_ㅠ
|
||||
