Arduino Uno ile Dc Motor Hız Kontrolü Yardım!!!!

Başlatan seref_92, 08 Mayıs 2015, 00:06:47

fatih6761

TIP31, BD139 vs. olabilir. Resim biraz karanlık olduğundan şemayı tam olarak hayal edemedim ama 5V beslemeyi harici yoldan vermeniz en doğrusu.
Şemayı çizip yüklerseniz sürüş yönteminde mi yoksa yazılımda mı sorun olduğunu anlarız.

seref_92



devreye ek olarak motor milinin ucuna aynı cins bir motor daha bağladım.Yani generator olarak kullandım.Generatorun çıkışlarından birini toprağa ,diğer ucunu arduinonun A2 portuna bağladım .

fatih6761

MotorOutput dediğimiz transistörün Base'ine giden kablo pot 0 değerde iken kaç volt gösteriyor? Hem transistöre bağlı iken, hem de ayrı iken ölçebilir misiniz?

seref_92

Base e bağlı iken 3.30 V ve transistöre bağlı değil  iken 3.40V ölçtük.Yalnız bu değerleri;Kp=75,Ki=1,Kd=1 iken ölçtük.Bu değerleri ne girmemiz gerekiyor? 5V luk dc motorun transfer fonksiyonunu bulamadık....

Cemre.

Yanlış görmüyorsam kodunuzda yalnızca bir kez ADC okuması yapıyorsunuz, potDegeri için. Ancak generatorDegeri için okuma yapmamışsınız? Sanıyorum burada bir hata var. Bence kodunuzu anlayarak baştan bir yazın, belki size yarım saat kaybettirecek ancak ne yazdığınızdan haberdar olmanızı sağlayacaktır diye düşünüyorum.

İyi akşamlar.

seref_92

#include <LiquidCrystal.h>
#include<PID_v1.h>

LiquidCrystal lcd(12,11,5,4,3,2);
int potpin=A0;
int generatorpin=A1;
int motorpin=9;
int generator=0;
int pot=0;
int generatordegeri=0;
int motordegeri=0;
float Kp=0.05;
float Kd=0;
float Ki=0.01;
double Setpoint,Input,Output,MotorOutput;
PID myPID(&Input,&Output,&Setpoint,Kp,Kd,Ki,DIRECT);

void setup() {
 
 pinMode(motorpin,OUTPUT);
 pinMode(potpin,INPUT);
 pinMode(generatorpin,INPUT);
 Serial.begin(9600);
 myPID.SetMode(AUTOMATIC);
 

}

void loop() {
  lcd.begin(16,2);
 lcd.clear();
 lcd.print(generatordegeri);
 lcd.setCursor(0,1);
 lcd.print(Setpoint);
pot=analogRead(potpin);
motordegeri=map(pot,0,1023,20,255);
generator=analogRead(generatorpin);
generatordegeri=map(generator,0,1023,0,255);
Setpoint=motordegeri;
Input=generatordegeri;
MotorOutput=Output+motordegeri;
myPID.Compute();
analogWrite(motorpin,MotorOutput);
Serial.print("pot degeri: ");
Serial.print(motordegeri);
Serial.print("   generator: ");
Serial.print(Input);
Serial.print("   output: ");
Serial.println(Output);
delay(250);

}



Evet öncelikle herkese yardımları için teşekkür ediyorum.Problemin çözümünü buldum.Kodlarını paylaşıyorum umarım yardımcı olur benzer proje yapacak arkadaşa.Kodlarda lcd ekranda pot değeri ve generator değerinin karşılaştırılması yapılmıştır.Kd yi 0 verdim ,hız kontrolü yaptığım için.kp ve ki değerlerini değiştirerek daha sağlıklı bir kontrolör elde edebilirsiniz.Herkese iyi forumlar