Page 8 of 16

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 03 Aug 2011 16:36
by kredovit
проще :-)

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 03 Aug 2011 17:45
by Casper_pro
Вот если так все выражения сокращать то в микрик мона и по 2 функции запихивать))))

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 18 Aug 2011 17:13
by tiptop_a
Здравствуйте,
тема заинтересовала так, что захотелось самому попробовать .
Я начинающий, поэтому, всё что смог это промоделировать схему в протэусе :oops:
Заметил, одну особенность, когда кнопка "старт" не замкнута, проц всё равно посылает короткие импульсы большой скважности на транзистор.
Подозреваю, что исправить это не сложно, где-то прописать sleep? но сам пока разобраться :dontknow: я не могу...
спасиб

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 18 Aug 2011 17:14
by hardlock
tiptop_a, в реале этого нету.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 19 Aug 2011 22:58
by tiptop_a
Может, это потому, что выход нагружаю на светодиод, а в реале ёмкость полевика...
Не подскажешь алгоритм, как организовать плавный старт? :sorry:

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 19 Aug 2011 23:00
by hardlock
tiptop_a, включаем на минимум, а потом по таймеру добавляем до установленного значения.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 03 Dec 2011 21:35
by valmaks
Всем привет.Собрал я этот регулятор,работает нормально. hardlock болшое спасибо.
Такой вопрос.Максимальное напряжение на моем моторчике 6v.
Что изменить,добавить,что-бы регулировка была до 6v.
Спасибо.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 03 Dec 2011 21:44
by hardlock
valmaks wrote:Что изменить,добавить,что-бы регулировка была до 6v.
ничего - просто питайте мотор не от 12-ти, а от 6-ти вольт, но тогда надо отдельно организовать питание тиньки, т.к. 7805 не сможет работать при входном напряжении 6 вольт.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 08 Feb 2012 16:55
by yura-gn
hardlock, очень нужна твоя помощь, что нужно дописать в прошивке чтобы был плавный пуск? Помоги, очень надо!

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 08 Feb 2012 16:57
by hardlock
yura-gn,
стартовать с минимального значения и через промежутки времени добавлять значение ШИМа. Постараюсь найти исходник.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 08 Feb 2012 17:01
by yura-gn
hardlock wrote:yura-gn,
стартовать с минимального значения и через промежутки времени добавлять значение ШИМа. Постараюсь найти исходник.
Я еще в етом совсем ничего не понимаю. Очень, Очень прошу, постарайтесь найти исходник!

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 10 Feb 2012 19:56
by yura-gn
hardlock wrote:yura-gn,
стартовать с минимального значения и через промежутки времени добавлять значение ШИМа. Постараюсь найти исходник.
hardlock, как там дела с поиском исходника, нашли?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 10 Feb 2012 20:03
by hardlock
yura-gn wrote: нашли?
ещё не добрался до того компьютера.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 10:12
by yura-gn
hardlock, подскажи что делать, когда я меняю код:

Code: Select all

вместо 
pwm = 110 + read_adc(2) / 7;

эти строчки
pwm = read_adc(2);
 pwm = pwm >> 2 ;
регулировка получается от 0, но регулируется только до половины положения потенциометра, а дальше скорость не меняется.
Как это исправить?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 13:45
by hardlock
yura-gn, так у вас получается если АДЦ больше "00111111" (63), то уже ничего не поменяется, т.к. "pwm = pwm >> 2" убивает два старших разряда.

ЗЫ: Не, не правильно... Что-то с утра голова не варит... но думаю проблема где-то тут. И зачем от нуля? Всё равно двигатель от нуля работать не будет.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 14:19
by yura-gn
hardlock, я методом тыка зделал вот так:

Code: Select all

 pwm = 0 + read_adc(2) / 6;
стало работать нормально, но не знаю почему двигатель работает только процентов на 95.
Можете обьяснить как спецыалист что я этими изминениями сделал, и можно сделать чтоб работало на 100%?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 19:45
by hardlock
yura-gn wrote:Я методом тыка зделал вот так:
надо не тыкать, а разбираться. АЦП 10-ти битный (1023 максимум), ШИМ - 8-ми битный (255 максимум).

Отсюда получаем:

Code: Select all

pwm = read_adc(2) / 4;
Хотя эта конструкция тоже должна была работать:

Code: Select all

pwm = read_adc(2);
pwm = pwm >> 2 ;
может опробовать прямо так:

Code: Select all

pwm = read_adc(2) >> 2 ;
Что-то я сам запутался.
Для проверки, что двигатель работает на 100% поставьте pwm = 255 и прошейте МК. Двигатель должен работать в полную мощь. Лучше всего проверить осциллографом, что творится на выходе МК.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 20:15
by yura-gn
hardlock, только что побробовал и выяснилось следующие:
что так

Code: Select all

pwm = read_adc(2);
pwm = pwm >> 2 ;
что так

Code: Select all

pwm = read_adc(2) >> 2 ;
работает отлично, но когда повышаю частоту

Code: Select all

TCCR0A=0x83;
TCCR0B=0x01;
плавная регулировка исчезает.
Что теперь посоветуете?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 11 Feb 2012 20:47
by hardlock
yura-gn wrote:TCCR0A=0x83;
TCCR0B=0x01;
соответствует работе таймера на частоте самого камня, т.е. 9,6Мгц. Зачем такая частота? - это раз. МК может не успевать всё обработать, да и не успевает, т.к. каждый такт возникает новое прерывание - это два.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 12 Feb 2012 16:26
by yura-gn
hardlock wrote:
fantom wrote:Блин мне надо чтобы маторчик крутился на малых оборотах без писка как это сделать.
Блин, а мне надо машину отремонтировать!
Разберитесь немного в коде - там ничего нет сложного... Подсказка - копать в эту сторону:

Code: Select all

TCCR0A=0x83;
TCCR0B=0x02;
Сделать так:

Code: Select all

TCCR0A=0x83;
TCCR0B=0x01;
Только это уже не подсказка, а решение... Будет вместо 18,75 кГц - 37,5кГц
hardlock, скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 12 Feb 2012 20:29
by hardlock
yura-gn wrote:скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?
надо поднимать частоту генератора, не меняя настроек (что невозможно), или опускать, меняя (TCCR0B), что тоже невозможно, т.к. ноги для кварца заняты.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 12 Feb 2012 20:52
by yura-gn
hardlock wrote:
yura-gn wrote:скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?
надо поднимать частоту генератора, не меняя настроек (что невозможно), или опускать, меняя (TCCR0B), что тоже невозможно, т.к. ноги для кварца заняты.
Понятно. Ну а что там с поиском исходника плавного пуска, еще не искали?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 12 Feb 2012 20:53
by hardlock
yura-gn wrote:а что там с поиском исходника плавного пуска, еще не искали?
может быть завтра на работе посмотрю.

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 15 Feb 2012 08:28
by yura-gn
hardlock, ну как там дела с поиском?

Re: Регулятор оборотов двигателя постоянного тока.

Posted: 15 Feb 2012 09:20
by hardlock
yura-gn wrote:hardlock, ну как там дела с поиском?
Исхоник не нашёл. Поэтому попробуем так. Заменить процедуру таймера:

Code: Select all

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  // Place your code here
  if (++c > 500)
  {
    c = 0;
    pwm = 110 + read_adc(2) / 7; 
    if (pwm > 255) pwm = 255;
  
    if (!PINB.3)
    {
      switch (Working) 
      {
        case 0:  //старт на минимальных оборотах
          OCR0A = 110;
          Working = 1;
        break;    
        case 1: //плавно наращиваем до установленного значения
          if (OCR0A < (pwm - 20))
          {
            OCR0A += 20;
          }
          else
          {
            OCR0A = pwm;
            Working = 2;        
          }
        break;
        case 2:  //работаем на установленном значении
          OCR0A = pwm;
        break;
      };
    }
    else
    {
      OCR0A = 0;      
      Working = 0;
    } 
  }  
}
В самом верху описываем переменную:

Code: Select all

unsigned char Working;
и перед #asm("sei") вставляем:

Code: Select all

Working = 0;