BASIC4MCU | 질문게시판 | 아두이노 스로틀 PWM제어 질문하고싶습니다.
페이지 정보
작성자 inharang 작성일2020-09-04 16:20 조회6,160회 댓글0건본문
PWM으로 스로틀을 제어하는 프로젝트를 하는데 어려움이 있습니다.
게시판이랑 강좌들, 여러 참고 자료를 활용해도 뜻대로 잘 움직이지가 않습니다.
제가 가지고 있는 스로틀바디는 아래 처럼 이 제품이고, UNO, 모터드라이버는 L298N 제품 쓰고 있습니다.
1핀과 4핀에 모터드라이버 연결,
2핀과 3핀에 5V , GND 연결,
5번에 가변저항 1 (TPS1)
6번에 가변저항 2 (TPS2) 연결되어 있습니다.
제가 짜서 돌려본 코드는
#include
const int CLK = 9; //Set the CLK pin connection to the display
const int DIO = 8; //Set the DIO pin connection to the displaydouble pedalPosition, ETBPosition, PWMPower, checkPedal, checkETB;
int Dir1Pin_A = 2; // 모터드라이버 output 제어신호 1핀
int Dir2Pin_A = 3; // 모터드라이버 output 제어신호 2핀
int SpeedPin_A = 10; // PWM제어를 위한 핀
volatile int del = 10;int NumStep = 0;
TM1637Display display(CLK, DIO);void setup() {
Serial.begin(9600);
pinMode(Dir1Pin_A, OUTPUT); // 모터드라이버 output 제어 1번핀 출력모드 설정
pinMode(Dir2Pin_A, OUTPUT); // 모터드라이버 output 제어 2번핀 출력모드 설정
pinMode(SpeedPin_A, OUTPUT); // PWM 제어핀 출력모드 설정
display.setBrightness(0x0a);
}void loop() {
checkETB = analogRead(A0); // 아날로그값 읽기
;
checkPedal=analogRead(A1);
ETBPosition = map(checkETB, 881, 135, 0, 1023); // 가변저항 1 map함수
pedalPosition=map(checkPedal, 120, 911, 0, 1023); // 가변저항 2 map합수
/*
Serial.print("ETBPosition : ");
Serial.println(ETBPosition);
Serial.print("pedalPosition : ");
Serial.println(pedalPosition);
*/
display.showNumberDec(PWMPower); //Display the Variable value; // 7세그먼트 출력
delay(100)
if (ETBPosition>0 && pedalPosition>0 && ETBPosition<1025 && pedalPosition<1025){
if(pedalPosition>ETBPosition){ // tps 1과 tps 2값을 비교함
Serial.print("pedal="); // 시리얼모니터로 저항값 출력해보기
Serial.print(pedalPosition);
Serial.print("ETB=");
Serial.print(ETBPosition);
Serial.print("PWM+");
Serial.print(PWMPower);
Serial.println();
PWMPower=pedalPosition-ETBPosition;
if (PWMPower=pedalPosition-ETBPosition);
analogWrite(Dir1Pin_A, PWMPower); //모터가 정방향으로 회전
analogWrite(Dir2Pin_A, 0);
analogWrite(SpeedPin_A, 255);
Serial.print(" ---------throttle open -------- ");
Serial.println(ETBPosition);} else{
Serial.print("pedal="); // 시리얼모니터로 저항값 출력해보기
Serial.print(pedalPosition);
Serial.print("ETB=");
Serial.print(ETBPosition);
Serial.print("PWM+");
Serial.print(PWMPower);
Serial.println();
PWMPower=ETBPosition-pedalPosition;
if (PWMPower>120){ PWMPower=120;}
analogWrite(Dir1Pin_A, 0); //모터가 역방향으로 회전
analogWrite(Dir2Pin_A, PWMPower);
analogWrite(SpeedPin_A, 255);
Serial.print(" PWMPower>120 ");
Serial.println(ETBPosition);
}
} else{
Serial.print("pedal="); // 시리얼모니터로 저항값 출력해보기
Serial.print(pedalPosition);
Serial.print("ETB=");
Serial.print(ETBPosition);
Serial.print("NEUTRAL");
Serial.println();
analogWrite(Dir1Pin_A, 0); //모터가 정지
analogWrite(Dir2Pin_A, 0);
analogWrite(SpeedPin_A, 0);
Serial.print(" -------stop ----------- "); // 시리얼모니터로 문자 출력}
}
제가 원하는 동작은 B10K 가변저항을 돌렸을 때, 스로틀 밸브가 가변 저항을 돌린만큼 열리고 닫히는 것입니다.
근데 코드가 잘못된건지 저항을 돌리면 열렸다가 닫혔다가 계속 반복합니다....
디스플레이에 값이 출력되는것도 너무 값이 왔다갔다하고.... 도움 부탁드립니다....
다른 게시판 글들이랑
https://www.youtube.com/watch?v=O-2XKWyAgG4 이 영상의 댓글들 보고 진행했습니다...
댓글 0
조회수 6,160등록된 댓글이 없습니다.