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

astromagazin.net
* *
Ласкаво просимо, Гість. Будь ласка, увійдіть або зареєструйтеся.
19 Вересня 2024, 18:29:03

Увійти

google


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

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

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #180 : 29 Серпня 2015, 18:26:37 »
. - .

и еще одно уточнение, в объявлении переменной  int motorPeriod = 76590; есть ошибочка!
нужно обявить не как int, а как unsigned long:

unsigned long motorPeriod = 76590;
и мне кажется, что в этом случае менять значение переменной будет не нужно...

Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #181 : 29 Серпня 2015, 18:28:45 »
. - .

Ок, попробую.
Маленький вопрос, процедура main() о которой Вы пишете это void setup()? Кусок кода в  void loop() тоже не должен повлиять на таймер?
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #182 : 29 Серпня 2015, 18:30:22 »
. - .


unsigned long motorPeriod = 76590;
и мне кажется, что в этом случае менять значение переменной будет не нужно...

изменить тип переменной я понял, а умножать на 2 надо или нет?
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #183 : 29 Серпня 2015, 18:39:51 »
. - .


unsigned long motorPeriod = 76590;
и мне кажется, что в этом случае менять значение переменной будет не нужно...

изменить тип переменной я понял, а умножать на 2 надо или нет?

не.. не нужно,  оставляйте как есть.
в вашем же скетче было :
   digitalWrite(stepperPin, HIGH);
   delay(76);
   delayMicroseconds(590);
   digitalWrite(stepperPin, LOW);


значит и тут оставляем период 76590мс между сменой сигнала на stepperPin
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #184 : 29 Серпня 2015, 18:42:39 »
. - .

Ок, попробую.
Маленький вопрос, процедура main() о которой Вы пишете это void setup()? Кусок кода в  void loop() тоже не должен повлиять на таймер?
немного ашипсяmain() это я и имел ввиду loop() (основной цикл).
просто в другой среде программирования loop называется main. в общем это одно и то же

p.s. а процедура setup() - это разовая процедура, она выполняется единожды, при включении микроконтроллера (или после сигнала сброс)
« Останнє редагування: 29 Серпня 2015, 18:56:05 від alex~ »
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #185 : 29 Серпня 2015, 18:52:50 »
. - .


unsigned long motorPeriod = 76590;
и мне кажется, что в этом случае менять значение переменной будет не нужно...

изменить тип переменной я понял, а умножать на 2 надо или нет?

объявление переменной как unsigned long как раз и "поставит" скорость ведения "на место".
использованый ранее тип int был недостаточен для представления числа 76590
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #186 : 29 Серпня 2015, 19:02:21 »
. - .

alex~, понятно, залил но еще не опробовал.
сейчас возникли косметические проблемы - очень тусклый экран, это раз, постоянно мерцает, очень заметно, раздражает, это два, и при нажатии на кнопку вращать надпись "Stopped" не меняется на "+++ Running +++", это три.
По поводу тусклый экран, в строке   analogWrite(10, 5); менял второе значение с 5 на 20 - результата 0.
Вот скетч который сейчас залит, понимаю, все это не смертельно, но если есть время, гляньте пожалуйста.

#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 = 3;
int stepperPin = 2;
unsigned long motorPeriod = 76592;
int adc_key_in;
int key = -1;
int isRun = 0;

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

  Timer1.initialize(motorPeriod);
  //Timer1.attachInterrupt(EventTimer);
 
  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(10, 20);
}

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 (key >= 0)   // if keypress is detected
   {
      if (key == 1)
      {
         motorPeriod += 1;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 2)
      {
         motorPeriod -= 1;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 0)
      {
         motorPeriod += 10;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 3)
      {
         motorPeriod -= 10;
         Timer1.setPeriod(motorPeriod);
         delay(200);
      }
      if (key == 4)
      {
        isRun = 1 - isRun;
        if (isRun == 1)
       {
          Timer1.attachInterrupt(EventTimer);
           lcd.print("+++ Running +++ ");
       }
        else
        {
          Timer1.detachInterrupt();
          lcd.print("    Stopped     ");
        }
      }
      lcd.setCursor(0, 1);
      lcd.print("Speed ");
      lcd.print(motorPeriod);
      lcd.print("       ");
     
   }
}
« Останнє редагування: 29 Серпня 2015, 19:10:40 від CasterV »
Записаний


CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #187 : 29 Серпня 2015, 19:10:06 »
. - .

Если строку analogWrite(10, 20); закомментировать, экран яркий и не мерцает, но сильно слепит, надо немного притушить.
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #188 : 29 Серпня 2015, 19:17:42 »
. - .

Кнопка старт/стоп как-то непредсказуемо работает, то запускается от короткого нажатия, то от долгого, та же история с остановкой двигателя этой же кнопкой.

После смены типа переменной, двигатель уже не крутится в два раза быстрее, крутится как и было в тестовом скетче.
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #189 : 29 Серпня 2015, 19:28:55 »
. - .

С кнопкой старт/стоп её работой и индикацией Run/stop разобрался, надо было добавить задержки как в скетче для амбарки.
Остался вопрос с яркостью дисплея.
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #190 : 29 Серпня 2015, 19:29:31 »
. - .

Кнопка старт/стоп как-то непредсказуемо работает, то запускается от короткого нажатия, то от долгого, та же история с остановкой двигателя этой же кнопкой.
Более всего, что это проявление эффекта дребезга контактов. Тут нужно как-то немного усложнить функцию получения кода нажатой кнопки...
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #191 : 29 Серпня 2015, 19:32:09 »
. - .

Остался вопрос с яркостью дисплея.
Вроде как возле дисплея есть подстроечный резистор: он же наверняка для управления яркостью предназначен (или контрастностью)...  :hz:
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #192 : 29 Серпня 2015, 19:36:20 »
. - .

Остался вопрос с яркостью дисплея.
Вроде как возле дисплея есть подстроечный резистор: он же наверняка для управления яркостью предназначен (или контрастностью)...  :hz:

Эта фигня для контрастности. Поднял значение  analogWrite(10, 100); до 100, яркость увеличилась (на этом значении я бы и остановился) но мерцает как стробоскоп, без этой строки все нормально, мерцания нет но больно ярко.
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #193 : 29 Серпня 2015, 19:39:32 »
. - .

можжно еще поменять напряжение, которое подается на подсветку.
это два крайних контакта в линейке (кажется).
на них наверное сейчас идет +5в.
а можно подать +3,3в. у ардуины есть выход с +3.3в...
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #194 : 29 Серпня 2015, 19:45:25 »
. - .

Дисплей я подключил как было раньше, за исключением питания, раньше 5В на него шло от DC-DC сейчас 5В с пина ардуино, но мне кажется проблема не в этом, ведь без строки analogWrite(10, 100); все нормально работает. Может я этот 10-й пин подключил не правильно или строка analogWrite(10, 100); не в том месте написана? Щас перепроверю подключение.
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #195 : 29 Серпня 2015, 19:53:29 »
. - .

Подключение проверил, кажется все верно.
А не может быть проблема в том, что здесь не перечислен 10й пин LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7); а указан 13й, который физически вообще ни к чему не подключен?
Записаний

alex~

  • Offline Offline
  • Повідомлень: 6026
  • Подяк: 295
Re: Помогите с моторизацией EQ2
« Відповідь #196 : 29 Серпня 2015, 20:07:33 »
. - .

тут я пас...  8)
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #197 : 29 Серпня 2015, 20:14:56 »
. - .

Значит подожду советов других гуру, Вам ещё раз спасибо за помощь!

Знатоки, есть идеи по поводу мерцания дисплея и 10-го с 13-м пинов?
Записаний

M_M

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 5068
  • Подяк: 1094
Re: Помогите с моторизацией EQ2
« Відповідь #198 : 29 Серпня 2015, 21:07:45 »
. - .

У Вас, судя по всему, задействован 10-йпин. Оператор
analogWrite(10, 20);
фактически генерирует ШИМ на 10-й ноге. С мерцанием (приблизительно 490 Гц) придется смириться, это штатный режим ШИМ. Глазом такое мерцание почти не заметно (я не вижу). Но возможно также что по 5 вольт недостаточная фильтрация, тогда глаз может увидеть биения яркости.

Второе число может меняться от 0 (подсветка выключена) до 255 (макс яркость).
Записаний

CasterV

  • Offline Offline
  • Повідомлень: 223
  • Подяк: 8
Re: Помогите с моторизацией EQ2
« Відповідь #199 : 30 Серпня 2015, 00:45:50 »
. - .

М_М, я не знаю как на счет фильтрации 5 вольт, но то, что при старой схеме подключения и использовании analogWrite(10, 20); я не видел никакого мерцания могу Вас заверить. Сейчас же мерцание происходит примерно с частотой 60 герц и я его отчетливо вижу, могу снять видео и Вы его тоже без проблем сможете увидеть, ну никак там не 490Гц.
Записаний