BASIC4MCU | 질문게시판 | 답변 : 라즈베리파이 DC모터 제어 관련해서 질문드립니다.
페이지 정보
작성자 master 작성일2018-09-12 08:55 조회9,315회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=3044
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-09-12 오전 8:54:58// by Ok-Hyun Park//#include <stdio.h>#include <wiringPi.h>#include <softPwm.h>//#define MOTOR_IN_1 21#define MOTOR_IN_2 22#define MOTOR_IN_3 23#define MOTOR_IN_4 24#define MOTOR_EN_A 25#define MOTOR_EN_B 26#define SERVO 8//int main(void){if(wiringPiSetup()==-1)return 1;softPwmCreate(SERVO,0,200);pinMode(MOTOR_IN_1,OUTPUT); digitalWrite(MOTOR_IN_1,1);pinMode(MOTOR_IN_2,OUTPUT); digitalWrite(MOTOR_IN_2,0);pinMode(MOTOR_IN_3,OUTPUT); digitalWrite(MOTOR_IN_3,1);pinMode(MOTOR_IN_4,OUTPUT); digitalWrite(MOTOR_IN_4,0);softPwmCreate(MOTOR_EN_A,0,4096); softPwmWrite(MOTOR_EN_A,800);softPwmCreate(MOTOR_EN_B,0,4096); softPwmWrite(MOTOR_EN_B,800);while(1){//delay(500);}}속도를 느리게 하는 명령은 안보입니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-09-12 오전 8:57:18// by Ok-Hyun Park//#include <stdio.h>#include <wiringPi.h>#include <softPwm.h>//#define MOTOR_IN_1 21#define MOTOR_IN_2 22#define MOTOR_IN_3 23#define MOTOR_IN_4 24#define MOTOR_EN_A 25#define MOTOR_EN_B 26#define SERVO 8//int main(void){int i;if(wiringPiSetup()==-1)return 1;softPwmCreate(SERVO,0,200);pinMode(MOTOR_IN_1,OUTPUT); digitalWrite(MOTOR_IN_1,1);pinMode(MOTOR_IN_2,OUTPUT); digitalWrite(MOTOR_IN_2,0);pinMode(MOTOR_IN_3,OUTPUT); digitalWrite(MOTOR_IN_3,1);pinMode(MOTOR_IN_4,OUTPUT); digitalWrite(MOTOR_IN_4,0);softPwmCreate(MOTOR_EN_A,0,4096);softPwmCreate(MOTOR_EN_B,0,4096);while(1){for(i=0;i<4096;i++){ softPwmWrite(MOTOR_EN_A,i); softPwmWrite(MOTOR_EN_B,i); delay(10); }delay(1000);for(i=4095;i>0;i--){ softPwmWrite(MOTOR_EN_A,i); softPwmWrite(MOTOR_EN_B,i); delay(10); }delay(1000);}}
작은 듀티에서는 모터가 구동하지 않는 구간이 있습니다.
예를들어서 500 이하에서는 모터가 움직이지 않는다면
while(1){for(i=500;i<4096;i++){ softPwmWrite(MOTOR_EN_A,i); softPwmWrite(MOTOR_EN_B,i); delay(10); }delay(1000);for(i=4095;i>500;i--){ softPwmWrite(MOTOR_EN_A,i); softPwmWrite(MOTOR_EN_B,i); delay(10); }delay(1000);}}최소값을 500을 줘도 되겠죠
또, 정지에 해당하는 PWM 값을 주더라도 관성에 의해서 바로 서지않고
일정거리 굴러가다가 멈춥니다.
댓글 2
조회수 9,31527315co님의 댓글
27315co 작성일감사합니다. 그런데 제가 말씀을 애매하게 잘못드린것같습니다. 속도를 느리게한다는것이 속도를 차츰 줄인다는 말이아니고 PWM 듀티비를 낮추었을때 모터가 스무스하게 돌아가지 않는부분에대해서 질문을 드린것이였는데 PWM 을 낮추었을때 모터가 저렇게 끊기면서 돌아가는 현상은 왜그런것인지 여쭤봅니다...
master님의 댓글
master
저속으로 돌다 말다를 반복한다는 것이죠?
힘이 없어서 그런 증상이 나타나는 것이고
토크부족은 두가지 원인이 있을 수 있습니다.
전원장치 전류 부족 (이 증상은 고속에서도 힘이 없습니다.)
애매한 듀티비 ( 듀티비를 좀 더 올리면 괜찮아집니다.)