April 26, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

BLDC모터드라이버 NVIS BLSM030R 사용기

 

안녕하세요 오늘 소개해드릴 제품은 이번에 새로 출시된 BLCD모터 드라이버인 NVIS-BLSM030R입니다 .

17

 

 

바로 요녀석 인데요 출력전류 최대 30A에 400W급 BLDC모터를 돌릴수 있다고 메뉴얼에 나와있네요.

 

직접 확인을 해보기 위하여 400W급 모터를 준비하였습니다

 

 

14

 

바로 이모터인데요 품명은 TM90-D0431 DC24V  / 400W /  3000rpm 을 자랑하는 90각대형 BLDC모터입니다.
자세한 스펙은 모터명을 클릭하시면 볼 수 있습니다.
모터에 여러선이 달려있는데요 데이터시트를 참고하여 각 선의 역할을 잘 숙지해 놓도록 합니다.

이제 이 모터구동을위한 작업에 착수하겠습니다.

먼저 보이는 사진은 NVIS  BLSM030R을 구입하시게 되면 따라오는 부속품들입니다.

5

 

2종류의 클림프와 3종류의 커넥터가 부속품에 포함되어있는데요 맨왼쪽에 보이는 가장 큰 커넥터는 모터에 연결시키는 커넥터로 모터의 A,B,C상과 맞춰주시면 되고, 가운데 가장 작은커넥터는 모터의 HALL SENSOR에 연결을 마지막 맨오른쪽 커넥터는 전원연결을 위한 커넥터입니다. 메뉴얼을 참고하며 커넥터 조립을 해 보도록 하겠습니다.

아래사이트로 접속하면 관련자료 다운받기로 데이터시트를 얻을수 있습니다.

 

먼저 클림프를 손으로 잡고 살살살 흔들어주면 똑! 하고 떨어지게됩니다.

6

 

 

이제 이 클림프를 전선과 연결을 시켜줍니다.
먼저 전원접속용으로 만들어 보겠습니다.

7

 

그림과 같이 클림프 위에 선을 얹어놓고 압착기를 사용하여 눌러주면

8

 

이렇게 조립이 됩니다.
그리고 커넥터에 방향에 맞게 넣어주면

9
완료입니다. 마찬가지로 한개를 더 만들어서 다른한 쪽도 연결해주시면됩니다.

또한 모터에연결되있는 A,B,C상 선과 홀센서선 역시 같은방법으로 메뉴얼에 나와있는 신호에 맞추어 연결해주시면 됩니다.

10

 

그럼 접속커넥터 연결을 위한 준비가 다 되었으니 BLSM030R과 연결을 해주도록 합니다.

12

 

이게 연결을 완료한 모습입니다.

오른쪽 RS232통신 케이블은 컨트롤보드와 연결하기위해 사용하였습니다. 컴퓨터로 제어를 원하신다면 RS232선과 컴퓨터를 연결해 주시면 됩니다.

만약 RS232통신을 사용하신다면 하이퍼터미널보다 FACTOCOM terminal 이라는 프로그램을  추천합니다 .
혹은 더 간단하고 편하게 BLSM030R을 구동하고 싶으시다면,
저희 제품인 터미널명령입력기 NT-PortChecker(자세한 내용 및 사용법은 클릭) 를 이용하시면 가장 쉽게 구동하실수 있습니다.
(이유는 BLSM030R의경우 반복명령이 필요한데 이 반복명령을 손쉽게 입력할 수 있는 프로그램이기 때문입니다.)

자, 다시 넘어가면 모터드라이버의 접속단자부분 맨왼쪽을 보시면 스위치와 LED가 있습니다 .

18

LED는 전원이 인가되면 사진처럼 노란색 불빛이 들어오며,  컨트롤보드와 통신을 할때는 노란색불이 깜박이게 됩니다.
LED가 정상적으로 깜박인다면 통신이 잘 되고있다는 뜻입니다.
또한 위에 보이는 스위치는 모터를선택하고 통신속도를 설정하는 부분인데 저는 스위치1,2를 모두 OFF시키므로 57600Bps의 통신속도를 설정하였으며, TM90-D0431[400W]모터를 사용하였으므로  3번스위치를 ON 시켜주었습니다.

 

또한 모터구동을 위한 컨트롤보드는 저만의 만능기판인 NT-A64-BOARD를 사용하였습니다

555

초록색 스위치는 모터의 정/역회전을 컨트롤하기위해 연결하였으며 빨간색 스위치는 모터의 Enable/Disable명령을 위해 연결하였습니다.
가변저항은 ADC변환을통해 모터의 속도를 조절하기 위해 연결하였습니다.
MCU는 ATMEGA16을 이용하였고 자세한 동작방법은 아래 예제소스를 참고하시기 바랍니다.

 

NT-BLSM030R 예제소스

/********************************************************************************
Title : BLSM030R 모터드라이버 TEST Code
MCU : Atmega16
외부 xtal : 16MHz
File Name : bldc.c

Data : 2013/03/12

Notice : 아래 코드는 BLSM030R 모터드라이버 TEST 프로그램이며
이 프로그램을 이용하여 발생하는 모든 문제에 대해서는
(주)엔티렉스에서는 어떠한 법적 책임도 지지 않습니다.

참고
1. 정/역회전 스위치 = PORTB.2연결
2. 모터 Enable/Disable 스위치 = PORTD.3연결
3. 모터속도제어용 가변저항 = PORTA.0연결
*******************************************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

volatile unsigned char motor_dir = 0, motor_ena = 0;

void putchar(char i)
{
while((UCSRA & 0×20)==0×00); // UDR이 비었으면 송신 가능
UDR=i;
}
//////////////////모터 제어용 함수 ///////////////////////
void motor_enable(void) // Motor Enable 함수.
{
putchar(0×02); // ASCII(STX)-START
putchar(‘C’); // Command
putchar(‘M’); // Motor
putchar(‘E’); // Enable
putchar(0×03); // ASCII(ETX)-END
}

void motor_disable(void) // Motor Disable 함수
{
putchar(0×02);
putchar(‘C’);
putchar(‘M’); // Motor
putchar(‘D’); // Disable
putchar(0×03);
}
void brake_enable(void) // Brake enable 함수
{
putchar(0×02);
putchar(‘C’);
putchar(‘B’); // Brake
putchar(‘E’); // Enable
putchar(0×03);
}
void brake_disable(void) // Brake Disable 함수
{
putchar(0×02);
putchar(‘C’);
putchar(‘B’); // Brake
putchar(‘D’); // Disable
putchar(0×03);
}

void motor_rpm_dir(unsigned int rpm, unsigned char dir) // 모터 방향 및 속도(r/min)명령 함수
{

unsigned int rpm_temp;

rpm_temp = rpm;

putchar(0×02);
putchar(‘C’);
putchar(‘R’);
if(dir)
putchar(‘+’); // 정방향
else
putchar(‘-’); // 역방향
putchar(rpm_temp/1000 +’0′); // 모터속도명령(입력 범위 0~3000(r/min))
rpm_temp%=1000;
putchar(rpm_temp/100 +’0′);
rpm_temp%=100;
putchar(rpm_temp/10 +’0′);
putchar(rpm_temp%10 +’0′);
putchar(0X03);
}

void motor_acc_set(unsigned char level) // 모터 가속시간 명령함수.
{
putchar(0×02);
putchar(‘C’);
putchar(‘A’); // Acceleration
putchar(level/10+’0′); // 입력범위 1~20
putchar(level%10+’0′);
putchar(0×03);
}

void motor_dec_set(unsigned char level) // 모터 감속시간 명령함수.
{
putchar(0×02);
putchar(‘C’);
putchar(‘D’); // Deceleration
putchar(level/10+’0′); // 입력범위 1~20
putchar(level%10+’0′);
putchar(0×03);
}

///////////////// Main /////////////////////

int main(void)
{
int ad_val;
DDRD=0xf6; // PORTD 0,3 입력으로 사용. PORTD.0(RXD)
PORTD = 0×08;
DDRA=0xF0; // PORTA.0 입력으로 사용
DDRB=0×00; // PORTB.2 입력으로 사용
PORTB=0×04;
ADMUX=0×00; // ADC0 단극성 입력 선택
ADCSRA=0xC7; // A/D변환 허용, 분주비 128,
_delay_ms(5);

 

UCSRB = (1<<RXEN)|(1<<TXEN); // 수신 송신 enable.
UCSRC = (1<<UCSZ1)|(1<<UCSZ0); // 전송데이터 비트수 =8비트.
UBRRH =0;
UBRRL = 16; // 전송속도 : 16Mhz에서 BAUD= 57600bps,비동기 일반모드.
motor_enable(); //모터 Enable
_delay_ms(10);
brake_disable(); //브레이크 Disable
_delay_ms(10);
motor_acc_set(2); //모터가속시간(2 -> 0.5sec)
_delay_ms(10);
motor_dec_set(2); //모터감속시간(2 -> 0.5sec)
_delay_ms(10);
while(1)
{

ADCSRA = 0xC7; // ADEN=1, ADSC =1 변환시작
while((ADCSRA & 0×10) == 0); // ADIF =1이 될때까지
ad_val = (int)ADCL + ((int)ADCH<<8);

if((PIND & 0×08) == 0) // 모터 Enable/Disable스위치 (PORTD.3)
{

_delay_ms(300);
if(motor_ena)
{
motor_ena = 0;
motor_disable();
_delay_ms(10);
}
else
{
motor_ena = 1;
motor_enable();
_delay_ms(10);
}
}

if((PINB & 0×04) == 0) // 정/역 스위치(PORTB.2)
{

_delay_ms(300);

if(motor_dir)motor_dir = 0;
else motor_dir = 1;
}
motor_rpm_dir(ad_val*3,motor_dir); // 역방향 (ADC값*3)rpm으로 회전.
_delay_ms(10);
}

}

 

 

 

NT-BLSM030R과 NT-A64-BOARD를 연결한 모습입니다

15

그리고 아래사진은 마지막으로 전원(27V)을 인가해주고 모터와의 연결까지 완료된 상태입니다.

 

11

 

모든준비가 완료되었으니 이제 프로그램을 writing하여 동작을 시켜보겠습니다.

 

보시는바와 같이 정상적으로 동작이 잘됩니다.

어렵고 복잡하지 않고 오직 간단한 연결작업과 프로그래밍을 통해 누구나 손쉽게 모터를 제어할 수 있는거 같습니다.

초보자들도 누구나 쉽게 사용할 수 있는 NT-BLSM030R 을 한번 이용해보시기를 적극 추천합니다.

 

 

Leave A Comment

*