Київський клуб аматорів астрономії "Астрополіс"

astromagazin.net
* *
Ласкаво просимо, Гість. Будь ласка, увійдіть або зареєструйтеся.
25 Листопада 2024, 22:53:36

Увійти

google


Автор Тема: Помогите с моторизацией EQ2  (Прочитано 8116 раз)

0 Користувачів і 1 Гість дивляться цю тему.

M_M

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 5068
  • Подяк: 1094
Re: Помогите с моторизацией EQ2
« Відповідь #220 : 10 Лютого 2016, 21:37:16 »
. - .

Мне и до 300 раскрутить не удавалось, где-то до 350. Но у меня без переделки, штатный контроллер.
Думаю, что 1:136 уж слишком. 1:10 было бы достаточно.
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #221 : 10 Лютого 2016, 22:43:06 »
. - .

Редуктор взял с другого мотора, готовый, потому такая редукция, попробую выкинуть одну шестерню и уменьшить до 1:54, меньше не получится. Ещё раз спасибо!
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #222 : 13 Лютого 2016, 22:26:06 »
. - .

Где нужно прописать  digitalWrite(enable_1, LOW);  что бы обесточить обмотки когда двигатель остановлен и простаивает?
Единственный вариант при котором удалось отключить обмотки (движок не разогревается):
...

if (key >= 0)   // if keypress is detected
   {
         
     if (isRun == 1)
      {
         digitalWrite(enable_1, HIGH);
      }
      else
      {
         digitalWrite(enable_1, LOW);
      }
    ...
но при этом перестаёт работать кусок кода который мне подсказал М_М в сообщении 218  :( , при нажатии и удержании на кнопку 3 движок должен крутиться с задержкой 300, а он вообще перестает крутиться.

#include <TimerOne.h>
#include <LiquidCrystal.h>

int NUM_KEYS = 5;
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
int adc_key_val[5] = {50, 200, 400, 600, 800};
int dirPin = 15;
int stepperPin = 16;
int enable_1 = 2;
unsigned long motorPeriod = 595;
int adc_key_in;
int key = -1;
int isRun = 0;
//int off = 0;

void setup() {
  pinMode(dirPin, OUTPUT);
  pinMode(stepperPin, OUTPUT);
  pinMode(enable_1, OUTPUT);
  digitalWrite(dirPin, LOW);
  digitalWrite(enable_1, HIGH);

  Timer1.initialize(motorPeriod);
   
  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Stopped     ");
  lcd.setCursor(0,1);
  lcd.print("Speed   ");
  lcd.print(motorPeriod);
  lcd.print("   ");
  analogWrite(11, 9);
}

void EventTimer()
{
  digitalWrite(stepperPin, !digitalRead(stepperPin));
}

int get_key(unsigned int input)
{
    int k;
    for (k = 0; k < NUM_KEYS; k++)
    {
      if (input < adc_key_val[k])
            return k;
    }
       if (k >= NUM_KEYS)
      k = -1;  // No valid key pressed
    return k;
}

void loop() {
  adc_key_in = analogRead(0);   // read the value from the sensor
  key = get_key(adc_key_in);   // convert into key press
 
   if (motorPeriod == 300 && key<0)
 {
         motorPeriod = 595;
         Timer1.setPeriod(motorPeriod);
         lcd.setCursor(0,1);
         lcd.print("Speed   ");
         lcd.print(motorPeriod);
         lcd.print("   ");
         delay(200);
  }
     
   if (key >= 0)   // if keypress is detected
   {
         
     //if (isRun == 1)
      //{
         //digitalWrite(enable_1, HIGH);
      //}
      //else
      //{
         //digitalWrite(enable_1, LOW);
      //}
      if (key == 3)
      {
         motorPeriod = 300;
         Timer1.setPeriod(motorPeriod);
         lcd.setCursor(0,1);
         lcd.print("Speed   ");
         lcd.print(motorPeriod);
         lcd.print("   ");
         delay(200);
      }
     
      if (key == 1)
      {
         motorPeriod += 10;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 2)
      {
         motorPeriod -= 10;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 0)
      {
         motorPeriod += 100;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
     
      if (key == 4)
      {
        isRun = 1 - isRun;
        lcd.setCursor(0,0);
        if (isRun == 1)
       {
          lcd.print("Running         ");
          Timer1.attachInterrupt(EventTimer);
       }
        else
        {
          lcd.print("Stopped        ");
          Timer1.detachInterrupt(); 
         }
       delay(250);
      }
      lcd.setCursor(0, 1);
      lcd.print("Speed   ");
      lcd.print(motorPeriod);
      lcd.print("   ");
      delay(50);
   }
}
« Останнє редагування: 13 Лютого 2016, 22:31:58 від CasterV »
Записаний