본문 바로가기

개발자/라즈베리파이4

라즈베리파이4 DC 모터 실습 코드

반응형

 

 

DC 모터란, 고정자로 영구자석을 사용하고, 회전자(전기자)로 코일을 사용하여 구성한 것으로, 전기자에 흐르는 전류의 방향을 전환함으로써 자력의 반발, 흡인력으로 회전력을 생성시키는 모터이다. 모형 자동차, 무선조정용 장난감 등을 비롯하여 여러 방면에서 가장 널리 사용되고 있는 모터이다.

 

일반적으로 DC 모터는 회전 제어가 쉽고, 제어용 모터로서 아주 우수한 특성을 가지고 있다. DC 모터는 다음과 같은 특징이 있다.

 

(1) 기동 토크가 크다

(2) 인가전압에 대하여 회전특성이 직선적으로 비례한다

(3) 입력전류에 대하여 출력 토크가 직선적으로 비례하며, 또한 출력 효율이 양호하다

(4) 가격이 저렴하다

 

센서 파트 넘버: 

 

DC 모터 테스트는 모터 ON, OFF 테스트 코드와 PWM 제어 코드를 살펴본다. 아래에 DC 모터 제어를 ON, OFF 로 하는 코드와 PWM 방식으로 하는 코드를 추가한다. GPIO 제어 핀 넘버만 맞으면 동작하는 데 문제가 없다. 12V 전원은 릴레이를 통해 제어한다고 생각하면 된다.

 

- 파일 이름: 

- 소스코드: 할당된 gpio 번호는 예고없이 변경할 수 있습니다.

 

* 주의 사항 

 

DC 모터 테스트 코드

 

#include <signal.h> //Signal 사용 헤더파일
#include <unistd.h>
#include <stdio.h> 
#include <string.h> 
#include <errno.h>
#include <stdlib.h> //exit() 사용 헤더파일

#include <wiringPi.h>

#define DCMOTOR	23 // BCM_GPIO 13

void sig_handler(int signo); // SIGINT 사용 마지막 종료 함수

int main (void)
{
	signal(SIGINT, (void *)sig_handler);	//시그널 핸들러 함수
	
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		return 1 ;
	}

	pinMode (DCMOTOR, OUTPUT) ;

	for (;;)
	{
		//printf("here - DCMOTOR on\n");
		digitalWrite (DCMOTOR, 1) ; // On		
	}
	return 0 ;
}

void sig_handler(int signo)
{
    printf("process stop\n");
	digitalWrite (DCMOTOR, 0) ; // Off
	
	exit(0);
}

 

DC Motor PWM 으로 제어하는 코드인데 중간에 softPwmCreate(MOTORCONTROL, 0, 100); 코드에서 100을 10까지 변환하여 컴파일 후 실행하면 DC 모터 속도가 줄어드는 것을 볼 수 있다. 고생하셨습니다. ^^

 

#include <signal.h> //Signal 사용 헤더파일
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h> //exit() 사용 헤더파일

#include <wiringPi.h>
#include <softPwm.h>

#define MOTORCONTROL  23	//GPIO 13 - Motor

void sig_handler(int signo); // SIGINT 핸들러 함수

int main (void)
{
	if(wiringPicheck()) printf("Fail\n");
		
	signal(SIGINT, (void *)sig_handler);	
	
	pinMode (MOTORCONTROL, OUTPUT);
	
	softPwmCreate(MOTORCONTROL, 0, 100);
	
	int i;
	int delaytime = 100;
	while(1)
	{	
		printf("here \n");	
		
		softPwmWrite(MOTORCONTROL, 5);
		delay(delaytime);	
		
	}	
  
  return 0 ;
}

int wiringPicheck(void)
{
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		exit(1) ;
	}
}

void Bpluspinmodeset(void)
{
	pinMode (MOTORCONTROL, OUTPUT);
	
}

void sig_handler(int signo) // ctrl-c 로 종료시 실행되는 함수
{
    printf("process stop\n"); 	
	digitalWrite(MOTORCONTROL, 0);
	exit(0);
}

 

 

 

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^