قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 11-09-2016, 07:51 AM المشاركة 9   
sun



بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته

اخى العزيز ممكن تشرح ما هو الهدف من مشروعك بالتفصيل حتى يمكن مساعدتك , لانه يمكن هناك طرق افضل مما تتصور انت موجودة عند ذوى الخبرة , فمثلا حضرتك قلت LED ثم موتور , للتحكم للموتور لا يستخدم هذا الاسلوب الذى تستخدمه بينما نستخدم pwm .


و الله ولى التوفيق

اللهم اجعلنا مؤمنين حقا



اعلانات

db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:
قديم 11-09-2016, 09:13 AM المشاركة 10   
افتراضي


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته

اخى العزيز ممكن تشرح ما هو الهدف من مشروعك بالتفصيل حتى يمكن مساعدتك , لانه يمكن هناك طرق افضل مما تتصور انت موجودة عند ذوى الخبرة , فمثلا حضرتك قلت LED ثم موتور , للتحكم للموتور لا يستخدم هذا الاسلوب الذى تستخدمه بينما نستخدم pwm .


و الله ولى التوفيق

اللهم اجعلنا مؤمنين حقا


سلمت يداك اخ مشتاق
انا اعلم انه يمكن التحكم بموتور dc عن طريق pwm
انا اتحكم بموتور AC عن طريق تغير الهرتز فقط هذه هي الفكرة و جربتها و نجح الامر
ولكن عندما حاولت وضع متغير من اجل ان يتسارع الموتور من 0 الى 500 دورة
ظهرت هذه المشكلة
led هو فقط للتجريب
في الكود كلما ازداد التأخير كلما زادت السرعة
كود:
int i ;
void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}

void loop() {
for( i =400; i <= 3000; i+= 2){
  digitalWrite(9, HIGH);
delayMicroseconds(i);
digitalWrite(9, LOW);
delayMicroseconds(700);
Serial.println(i);
  delay(90);
}
}
وضعت الامر delay(90) من اجل ان يكون التسارع بطىء
وفقك الله اخي الكريم

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 11-09-2016, 09:34 AM المشاركة 11   
sun


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته

اخى العزيز :
1- ما هو مدى التردد الذى يمكن ان يستجيب له الموتور ؟
2- يرجى رفع البرنامج مع اضافة الدالة التى ارسلتها لك variableDelay()1
3- و ما هو الانترفيس او الدرايفر المستخدم لنستفيد من تجربتك ؟



و الله ولى التوفيق

اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا




db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:
قديم 12-09-2016, 04:42 AM المشاركة 12   
افتراضي


سلمت يداك اخ مشتاق انا قمت بعمل تجربة بسيطة و استخدمت بها درايف بسيط مع ترانزيستور IGBT


وفكرة الكود بسيطة
كود:
void loop(){
digitalWrite( IGBTPIN, 1);
delayMicroseconds(8000); //60hrz for 50 hrz 10 ms
digitalWrite( IGBTPIN, 0);
}
(مدى تردد الموتور من 10 هرتز حتى 100 هرتز (لست متأكد
ولكن لم استطيع قراءة الاشارة بسبب عدم وجود راسم اشارة
الفكرة يمكن بها اخطاء
ولكن اردت المحاولة
اي رأي مرحب به
وفقك الله اخي


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 12-09-2016, 09:25 AM المشاركة 13   
sun


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته
كل عام وانتم بخير و المسلمين جميعا

ان شاء الله هذا البرنامج يخرج تردد من 10 - 100 هرتز و كل تردد يستمر لمدة ثانية ثم ينتقل للتردد التالى .
كود:
void variableDelay(unsigned int us){
    unsigned int i;
    for( i = us; i > 0; i-- ){
        delay(1);
    }
}
int interval = 1000;
char timePeriod[9] = {50, 25, 17, 12, 10, 8, 7, 6, 5 };

void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}

void loop() {

 for(char i= 0 ; i <9; i++){
    while(millis() < interval){
          digitalWrite(9, 1);
          variableDelay(timePeriod[i]);
          digitalWrite(9, 0);
          variableDelay(timePeriod[i]);
    }
    interval += 1000;   
    Serial.println(i);
 }
}
و الله ولى التوفيق

اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا
اللهم اكتب لنا الحج و العمرة و اهلنا




db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:
قديم 13-09-2016, 01:58 AM المشاركة 14   
افتراضي


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته
كل عام وانتم بخير و المسلمين جميعا

ان شاء الله هذا البرنامج يخرج تردد من 10 - 100 هرتز و كل تردد يستمر لمدة ثانية ثم ينتقل للتردد التالى .
كود:
void variableDelay(unsigned int us){
    unsigned int i;
    for( i = us; i > 0; i-- ){
        delay(1);
    }
}
int interval = 1000;
char timePeriod[9] = {50, 25, 17, 12, 10, 8, 7, 6, 5 };

void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}

void loop() {

 for(char i= 0 ; i <9; i++){
    while(millis() < interval){
          digitalWrite(9, 1);
          variableDelay(timePeriod[i]);
          digitalWrite(9, 0);
          variableDelay(timePeriod[i]);
    }
    interval += 1000;   
    Serial.println(i);
 }
}
و الله ولى التوفيق

اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا
اللهم اكتب لنا الحج و العمرة و اهلنا


سلمت يداك اخ مشتاق وكل عام وانت بالف خير
هل يمكن التواصل معك لدي استفسار


التعديل الأخير تم بواسطة : db2006 بتاريخ 13-09-2016 الساعة 02:14 AM

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 13-09-2016, 07:37 AM المشاركة 15   
sun


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته
كل عام وانتم بخير و المسلمين جميعا


[
QUOTE=db2006;1059022]سلمت يداك اخ مشتاق وكل عام وانت بالف خير
هل يمكن التواصل معك لدي استفسار[/QUOTE]

ممكن تعرض اى استفسار هنا لتعم الفائدة او ترسله فى رسالة خاصة ان اردت .

و الله ولى التوفيق


اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا
اللهم اكتب لنا الحج و العمرة و اهلنا




db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:
قديم 13-09-2016, 08:18 AM المشاركة 16   
افتراضي


بسم الله الرحمن الرحيم

السلام عليم و رحمة الله و بركاته
كل عام وانتم بخير و المسلمين جميعا


[
QUOTE=db2006;1059022]سلمت يداك اخ مشتاق وكل عام وانت بالف خير
هل يمكن التواصل معك لدي استفسار
ممكن تعرض اى استفسار هنا لتعم الفائدة او ترسله فى رسالة خاصة ان اردت .

و الله ولى التوفيق


اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا
اللهم اكتب لنا الحج و العمرة و اهلنا


[/QUOTE]

وفقك الله اخ مشتاق هذا كرم لا حدود له
كود:
#define triac_control 9
#define sensorPin A1
#define zero_detect 2
volatile byte zero_bit = LOW;
#include <PID_v1.h>
double Setpoint, Input, Output;
double consKp=0.25, consKi=1, consKd=0.5;
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
          float analogValue = 0;
          int analogValue0 = 0;
          int analogmin = 4; 
          int analogmax = 1000;
          float kDev = 32.5;
void setup()  {
 pinMode(triac_control, OUTPUT);  
  pinMode(zero_detect, INPUT);
  attachInterrupt(0, zero_fun, RISING);
  Serial.begin(9600);
}


void loop() 
{
  myPID.SetSampleTime(10);
  myPID.SetMode(AUTOMATIC);
  myPID.SetOutputLimits(100, 5000);
  Input = analogRead(sensorPin); 
  analogValue = Output/kDev;
  analogValue0 = analogmax-analogValue+analogmin;
if (analogValue > analogmax) 
    {
      analogValue = analogmax;
    }
    Setpoint = 10;
    myPID.Compute();
    Serial.println(analogValue0);
     if (zero_bit == 1){
          delayMicroseconds(analogValue0); 
          digitalWrite(triac_control, 1);
          delayMicroseconds(100); 
          digitalWrite(triac_control, 0);
           zero_bit = 0;
           
           }
          
     }
    
    
          
    
    }
void zero_fun() // set bit
  {
        zero_bit = 1;  
  }
تعبت وانا احاول ان اوصل لنتيجة لكن دون جدوى ما هي الاخطاء المحتملة (المنطقية) في الكود


التعديل الأخير تم بواسطة : db2006 بتاريخ 13-09-2016 الساعة 09:10 AM


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 12:59 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)