Re: Регулятор оборотов двигателя постоянного тока.
Posted: 03 Aug 2011 16:36
проще
Добро пожаловать!
https://hardlock.org.ua/
ничего - просто питайте мотор не от 12-ти, а от 6-ти вольт, но тогда надо отдельно организовать питание тиньки, т.к. 7805 не сможет работать при входном напряжении 6 вольт.valmaks wrote:Что изменить,добавить,что-бы регулировка была до 6v.
Я еще в етом совсем ничего не понимаю. Очень, Очень прошу, постарайтесь найти исходник!hardlock wrote:yura-gn,
стартовать с минимального значения и через промежутки времени добавлять значение ШИМа. Постараюсь найти исходник.
hardlock, как там дела с поиском исходника, нашли?hardlock wrote:yura-gn,
стартовать с минимального значения и через промежутки времени добавлять значение ШИМа. Постараюсь найти исходник.
ещё не добрался до того компьютера.yura-gn wrote: нашли?
Code: Select all
вместо
pwm = 110 + read_adc(2) / 7;
эти строчки
pwm = read_adc(2);
pwm = pwm >> 2 ;
Code: Select all
pwm = 0 + read_adc(2) / 6;
надо не тыкать, а разбираться. АЦП 10-ти битный (1023 максимум), ШИМ - 8-ми битный (255 максимум).yura-gn wrote:Я методом тыка зделал вот так:
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 ;
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;
соответствует работе таймера на частоте самого камня, т.е. 9,6Мгц. Зачем такая частота? - это раз. МК может не успевать всё обработать, да и не успевает, т.к. каждый такт возникает новое прерывание - это два.yura-gn wrote:TCCR0A=0x83;
TCCR0B=0x01;
hardlock, скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?hardlock wrote:Блин, а мне надо машину отремонтировать!fantom wrote:Блин мне надо чтобы маторчик крутился на малых оборотах без писка как это сделать.
Разберитесь немного в коде - там ничего нет сложного... Подсказка - копать в эту сторону:Сделать так:Code: Select all
TCCR0A=0x83; TCCR0B=0x02;
Только это уже не подсказка, а решение... Будет вместо 18,75 кГц - 37,5кГцCode: Select all
TCCR0A=0x83; TCCR0B=0x01;
надо поднимать частоту генератора, не меняя настроек (что невозможно), или опускать, меняя (TCCR0B), что тоже невозможно, т.к. ноги для кварца заняты.yura-gn wrote:скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?
Понятно. Ну а что там с поиском исходника плавного пуска, еще не искали?hardlock wrote:надо поднимать частоту генератора, не меняя настроек (что невозможно), или опускать, меняя (TCCR0B), что тоже невозможно, т.к. ноги для кварца заняты.yura-gn wrote:скажите пожалуйста, можно выбрать что-нибудь среднее между 18,75 кГц и 37,5кГц, так как 18,75 кГц мало, а 37,5кГц много?
может быть завтра на работе посмотрю.yura-gn wrote:а что там с поиском исходника плавного пуска, еще не искали?
Исхоник не нашёл. Поэтому попробуем так. Заменить процедуру таймера: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;
Code: Select all
Working = 0;