Перейти к содержанию

Автоматика для автономки.


Рекомендуемые сообщения

Опубликовано
8 часов назад, hddee сказал:

только не через программный digitalWrite

Поясни. У меня таймер3 периодически дергает прерывание, в котором и прописан этот digitalWrite  , смотри выше. Можно как то правильней? Я только в СИ+.

Вот подробнее

    cli(); // отключить глобальные прерывания
  TCCR2A = 0; // установить регистры в 0
  TCCR2B = 0; 
  OCR2A = 156;
  TCCR2B |= (1 << WGM22);
  TCCR2B |= (1 << CS20) | (1 << CS21) | (1 << CS22);
  TIMSK2 |= (1 << OCIE2A);  
  sei(); // включить глобальные прерывания

Ну и само. 

ISR(TIMER2_COMPA_vect) {
  // сам алгоритм Брезенхема
  Error_KARL -= KARL;
  if (Error_KARL < 0) {
    Error_KARL += 100;
    digitalWrite(PIN_KARL, 1);
  } else digitalWrite(PIN_KARL, 0);
     Error_TEN -= POW;
  if (Error_TEN < 0) {
    Error_TEN += 100;
    digitalWrite(PIN_TEN, 1);
  } else digitalWrite(PIN_TEN, 0);
   
}

Упс, тут на втором. Думаю не суть. Так то второй обычно занят сервой. 

Что подвернулось. 

Дорога к обеду ложка,

К ночи дорог унитаз.

  • Ответов 88
  • Создана
  • Последний ответ

Топ авторов темы

  • leon013

    27

  • hddee

    14

  • макс54

    12

  • qwest_ans

    11

Топ авторов темы

Опубликовано
11 часов назад, hddee сказал:

нельзя трансформторы и моторы накачивать полуволнами

ну если нельзя, значит не накачивайте))) я вот уж почти 10 лет накачать все не могу, раз работает автономка

 

12 часов назад, макс54 сказал:

Вот так ?

Да, у меня так работает 

Опубликовано (изменено)

Кстати вспомнилось. Когда появились тиристоры чего только на них не собирали в том числе и регуляторы скорости для асинхронников. Например втрое. 

Простейший тиристорный регулятор с фазоимпульсом на потенциометра и кондере. Только за синхронизирован не с анода а до нагрузки. То есть с сети. Крутя круток можно настроить что бы тиристор пропускал первую положительную полуволну, затем две полуволну пропускал и включал уже четвёртую отрицательную. И так далее. Получалось некое подобие синусоиды. Само собой  греющих гармоник мама не горюй, но на вентиляторе работало. 

Может в ряде  случаев и переключать Вент?  Старт-стоп же в отборе тоже переключается и терпимо.  

 

Изменено пользователем Виктрыч

Дорога к обеду ложка,

К ночи дорог унитаз.

Опубликовано (изменено)
5 часов назад, Виктрыч сказал:

Поясни

много писать.. как работает шим ? у ардуино есть счетчик, он тактируется от кварца, можно с делителем (регистры   CSn2 CSn1 CSn0) плюс есть два регистра: первый это сравнения OCR1A , число счетчика, когда ножка перекидывается (можно выключается, можно включается) и регистр верхней границы счета ICR1, когда счетчки обнуляется, он общий для двух у наны (OCR1A, OCR1B) и трех у меги (OCR1A, OCR1B, OCR1C). Всё это работает без участия программы, вот пример от искина на вопрос "как настроить таймеры счетчики ардуино на шим в 500 Гц"

 

void setup() { pinMode(9, OUTPUT); // Настраиваем пин 9 как выход

// Очищаем управляющие регистры

TCCR1A = 0;

TCCR1B = 0;

// Устанавливаем режим Fast PWM, где TOP задается регистром ICR1 (режим 14) // Включаем неинвертированный ШИМ на выводе OC1A (пин 9)

TCCR1A = _BV(COM1A1) | _BV(WGM11);

// Устанавливаем предделитель (prescaler) равный 8 и режим WGM12, WGM13

TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11);

// Вычисляем TOP для получения частоты 500 Гц:

// 16 000 000 (частота МК) / (8 (предделитель) * 500 (Гц)) - 1 = 3999 ICR1 = 3999;

// Устанавливаем заполнение (duty cycle) 50%

// Для изменения яркости или мощности передавайте значения от 0 до 3999

OCR1A = 1999;

}

 

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

TCCR1B = Bххххх000 - тактирование отключено

TCCR1B = Bххххх001 - без предделителя, счетчик работает от кварца 20 или 16МГц

TCCR1B = Bххххх010 - делитель 8, счетчик увеличивается на каждый 8й такт кварца

TCCR1B = Bххххх011 - делитель 64

TCCR1B = Bххххх110 - делитель 256

опять вопрос искину "что делает строчка TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11)"

устанавливает в логическую единицу (1) ровно три бита: WGM13, WGM12 и CS11. Все остальные биты в регистре TCCR1B эта команда сбрасывает в ноль (0)

 

еще раз смотри структуру TCCR1B, с предыдущей страницы

 /* структура битов в регистре TCCRxB
    ICNCn ICESn --- WGMn3 WGMn2 CSn2 CSn1 CSn0 :

 

и так далее по даташиту:

     CSn2 CSn1 CSn0: предделитель частоты от процессора
      0   0   0   Нет источника для тактирования (таймер/счетчик остановлен).
      0   0   1   clkI/O/1 (прескалер отключен).
      0   1   0   clkI/O/8 (прескалер 8).
      0   1   1   clkI/O/64 (прескалер 64).
      1   0   0   clkI/O/256 (прескалер 256).
      1   0   1   clkI/O/1024 (прескалер 1024).
      1   1   0   Внешний источник тактов, подключенный к ножке Tn. Тактовый перепад от 1 к 0.
      1   1   1   Внешний источник тактов, подключенный к ножке Tn. Тактовый перепад от 0 к 1.

 

ну и режим  работы продублирую:

WGMn3 WGMn2 WGMn1 WGMn0 Режим работы                TOP     Обновл. OCRnx TOVn установится при значении
      1   0     0     0     0   Normal                      0xFFFF  Немедленно  MAX
      2   0     0     0     1   Phase Correct PWM, 8 бит    0x00FF  TOP         BOTTOM
      3   0     0     1     0   Phase Correct PWM, 9 бит    0x01FF  TOP         BOTTOM
      4   0     0     1     1   Phase Correct PWM, 10 бит   0x03FF  TOP         BOTTOM
      5   0     1     0     0   CTC                         OCRnA   Немедленно  MAX
      6   0     1     0     1   Fast PWM, 8 бит             0x00FF  BOTTOM      TOP
      7   0     1     1     0   Fast PWM, 9 бит             0x01FF  BOTTOM      TOP
      8   0     1     1     1   Fast PWM, 10 бит            0x03FF  BOTTOM      TOP
      9   1     0     0     0   Phase and Frequency Correct ICRn    BOTTOM      BOTTOM
      10  1     0     0     1   Phase and Frequency Correct OCRnA   BOTTOM      BOTTOM
      11  1     0     1     0   Phase Correct PWM           ICRn    TOP         BOTTOM
      12  1     0     1     1   Phase Correct PWM           OCRnA   TOP         BOTTOM
      13  1     1     0     0   CTC                         OCRnA   Немедленно  MAX
      14  1     1     0     1   Зарезервировано             -       -           -
      15  1     1     1     0   Fast PWM                    ICRn    BOTTOM      TOP

 

искин назвал режим работы "14" потому что 1110 это 14 в десятичной системе, в табличке он 15. Биты WGMn1 WGMn0 находятся в другом регистре (TCCR1A) опять же продублирую структуру регистра А:

  /*  структура битов в регистре TCCRxA
      COMnA1 COMnA0  COMnB1  COMnB0 COMnC1 COMnC0 WGMn1 WGMn0

что бы настройка работала нужно установить TCCR1A = Bхххххх10;   

 

т.е строчка из примера TCCR1A = _BV(COM1A1) | _BV(WGM11) устанавливает в логическую единицу два бита COM1A1 и WGM11, что равносильна прямому объявлению:

 

TCCR1A = B10000010;   

где первые два бита в отвечают за событие на ножке МК, опять же смотрим даташит

   биты COMnA1 COMnA0:
        0     0   Обычная работа порта как GPIO, функционал OCnx отключен.
        0     1   Переключение OCnx в противоположное состояние при Compare Match.
        1     0   Очистка OCnx при Compare Match (выходной сигнал сбрасывается в лог. 0).
        1     1   Установка OCnx при Compare Match (выходной сигнал переходит в лог. 1).

вторая пара бит BххNNхххх  отвечает за счетчик OCR1B, третья пара BххххNNхх за счетчик OCR1C у меги 2560, у наны его нет. Если установить "01" то получиться генератор частоты 1000Гц, ножка будет менять значение каждый раз когда счетчик совпадает с OCR1A

 

Ну а дальше дело техники, когда от 500Гц тебе надо регулировать вент с шагом 50Гц задаешь

0% - OCR1A = 0;

10% - OCR1A = 399;

20% - OCR1A = 799; 

30% - OCR1A = 1199;

....

90% - OCR1A = 3599;

100% - OCR1A = 3999;

можно через функцию case, можно математикой, при этом у наны остается свободный OCR1B, на котором можно делать ровно тоже самое, в меге еще и OCR1C

Изменено пользователем hddee
Опубликовано

Многа букв. Я хотел уточнить, чем тебе не нравится, команда digitalWrite(PIN_TEN, 0);

И наоборот, вызываемая, каждые 10 мс.? 

Дорога к обеду ложка,

К ночи дорог унитаз.

Опубликовано
4 часа назад, leon013 сказал:

Да, у меня так работает 

Проектика значит не осталось...ничего ? )

Опубликовано (изменено)
2 часа назад, Виктрыч сказал:

Многа букв

А мне набирать столько - нормально? Можно было спасибо и не читая нажать. Дигиталврайт медленно работает, занимает много процессорного времени . Настроенный таймер работает в фоне вообще без участия программы 

Изменено пользователем hddee
Опубликовано

@макс54 Дело было почти 8 лет назад, за это время я два раза менял железо и в начале лета потерял nvme на 500Гб. Что удалось найти по старым дискам, то выложил. Куски кода взяты из кусков  проекта который я даже не знаю для чего был написан. Что бы вникнуть надо убить вечер на это дело, но я не горю желанием это делать, дел и так навалом...

Опубликовано (изменено)
8 часов назад, leon013 сказал:

Да, у меня так работает 

Доброго..

вот накидал прогу ( еще пока в сыром варианте..)

Скрины напруг с протеусаы

Будет работать ? ))

20.JPG

5 минут назад, leon013 сказал:

Дело было почти 8 лет назад, за это время я два раза менял железо и в начале лета потерял nvme на 500Гб. Что удалось найти по старым дискам, то выложил.

 

Жаль...

Тоже имел неосторожность потерять очень важные фалы в свое время...

Посему теперь всегда дублирую  инфу выносных дисках

 

Изменено пользователем макс54
Опубликовано

Вообщем новости хорошие)  Получилось и все работает )

Домашний вентилятор управляется и скорость меняется..мягко и приятно)

 

Единственное что на двигуне будет небольшая вибрация (зависит от моторчика) ну и греться будет более сильнее

Например : на моторе турбины-наддув отопительного котла  (100 вт) вибрация есть...на домашнем вентиляторе  практически нет )..

Нужно учитывать подушки вибрационные__

как то так

Опубликовано

Картинки правильные. Может какие RC цепочки понадобятся на закрытие симистора. Но не обязательно. 

Упс. Опоздал. 

У меня как то синхронник не выключался. Пришлось параллельно лампу накаливания пристроить на безрыбье. Заодно и индикация за километр. 

Дорога к обеду ложка,

К ночи дорог унитаз.

Опубликовано (изменено)

@Виктрыч есть специальные симисторы для индукционной нагрузки, они закрываются получше, правильнее конденсатор бы повесить 

Изменено пользователем hddee
Опубликовано (изменено)

@hddee ты зачем усы сбрил  hd себе добавил? :)

Изменено пользователем Михаил Лемуровв

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...