Page 1 of 1

Плавный пуск на ATtiny13

Posted: 08 May 2011 14:08
by Ivan_Nikolaevich
Уж извините за мою настойчивость, но вот что нарыл... За основу взята и схема и прошивка из какого то учебника по Мк. К сожалению потерял ссылку на сайт. Но думаю что авторсих прав не нарушаем... :-) Исходник схемы не привожу. там его даже нет, только симулятор для Протеуса. Реализовано плавное увеличенние мощости в нагрузке при подаче питания, либо при замыкании кнопки на 2-ой ноге МК. В схеме я её заменил на выключатель с фиксацией. получилась вот эдакая принципиальная схема.
Image

Как бы хотелось, что бы работал сей девайс
1. При нажатии кноки, и фиксации её плано нарастает мощость в нагрузке до максимума.
2. По достижении максимума в нагрузке на выходе 6 Мк появлется "1" ( +5 В), срабатывает рееле, коротит транзистор. И так всё остаётся до момента размыкания Копки.
3. При размыкании кнопки, сначала с вывода 6 МК пропадает "1", затем плавно уменьшается мощность нагрузки до нуля. - всё.
В исходнике программы ШИМ уже прописан, и управление кнопкой прописано.
Если честно, не смог я доделать до того, что хочу... :wall: :wall: :wall:
Какое то гадство! Если можете, помогите!!!
Исходник программы.

Code: Select all

This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator


Project : 
Version : 
Date    : 15.09.2009
Author  : XXXXX
Company : Home
Comments: 


Chip type               : ATtiny13
AVR Core Clock frequency: 9,600000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*****************************************************/

#include <tiny13.h>
#include <delay.h>

int cnt=0;
char Step=0xFF;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFE;
// Place your code here
 cnt++;
 //Каждый 20-й заход в прерывание
 if (cnt==19){
  cnt=0; 
  //254 шага увеличения ширины импульса
  if (Step !=0xFE ) {
   Step++;
   OCR0A=Step;    
  }
 }
}

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here
  
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
char st; //Состояние кнопки
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=Out Func4=Out Func3=In Func2=Out Func1=Out Func0=Out 
// State5=0 State4=0 State3=P State2=0 State1=0 State0=0 
PORTB=0x08;
DDRB=0x37;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected

TCCR0A=0x83;      //83=non-inverted, C3=inverted
/* TCCR0A
  (10)=Clear OC0A on Compare Match, set OC0A at TOP
  |
 --    --(11)=Fast PWM + WGM02 in TCCR0B=0 
 10000011
*/ 

TCCR0B=0x01;
/* TCCR0B
     -(0)=WGM02
 00000001
*/
TCNT0=0x10;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x06;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")

while (1)
      {    
      #asm("wdr"); //Сброс сторожевого таймера
      // Посмотрим состояние кнопки
      st=PINB & 0b001000;
      delay_us(50);     
      if (!st) {
       //Замкнута
       Step=0xFF;
       OCR0A=0xFF;
       cnt=0;
      }
      };
}

:-) :-) :-)

Добавлено спустя 21 час 29 минут:
:wall: :wall: :wall: Приношу свои извинения, в принципиальной схеме конечно ошибка, исправлю... Контакты реле коротят истоу- сток транзистора, а не нагрузку конечно... Для того, что б и надёжность была повыше, да и при приличных нагрузках транзистор и вовсе не грелся..... :-)

Re: Плавный пуск на ATtiny13

Posted: 18 Jul 2014 10:22
by steslia
Может кто захочет повторить то, что на схеме.
Обратите внимание на включение реле. Там ошибка, коротится не транзистор, а нагрузка.

З.Ы. просто попал сюда в поисках схемы плавного пуска для двигателя детского мотоцикла.

Re: Плавный пуск на ATtiny13

Posted: 18 Jul 2014 11:38
by Alex_S
Глупый вопрос - а зачем там вообще реле? Ведь транзистор и сам должен шикарно справиться с задачей. Единственное, поставить транзистор с бОльшим током и меньшим напряжением. Например, IRFZ44n. У него сопротивление открытого перехода 17мОм. Значит, при 10А будет падать аж 170мВ, что соизмеримо с контактами реле.

Re: Плавный пуск на ATtiny13

Posted: 18 Jul 2014 17:41
by ma35tr0
Очень простой алгоритм. Погуглите - очень многов уроков вплоть до комментов каждой строки кода.
А для чего, если не секрет?
Что будете ШИМить и замыкать/размыкать?

Re: Плавный пуск на ATtiny13

Posted: 23 Jul 2014 00:52
by Sony
Alex_S wrote:Глупый вопрос - а зачем там вообще реле? Ведь транзистор и сам должен шикарно справиться с задачей. Единственное, поставить транзистор с бОльшим током и меньшим напряжением. Например, IRFZ44n. У него сопротивление открытого перехода 17мОм. Значит, при 10А будет падать аж 170мВ, что соизмеримо с контактами реле.
Дело в том, что ток 10А там не максимальный. Вернее он даже меньше в несколько раз, когда ребенок едет по прямой, а вот когда он вопрется скажем в стенку- то тогда пока сработает термопредохранитель на 20А, то ток может раза в 2 сжечь любой полевик...

Добавлено спустя 5 минут 42 секунды:
ma35tr0 wrote:Очень простой алгоритм. Погуглите - очень многов уроков вплоть до комментов каждой строки кода.
А для чего, если не секрет?
Что будете ШИМить и замыкать/размыкать?
Если не трудно - укажите ссылку. Шимить надо электродвигатель постоянного тока, а после выхода на 100% - шунтировать релюшкой.
Сам нашел на просторах инета похожую схему, а прошивки к ней нету...

Re: Плавный пуск на ATtiny13

Posted: 23 Jul 2014 22:44
by ma35tr0
Sony wrote:Если не трудно - укажите ссылку. Шимить надо электродвигатель постоянного тока, а после выхода на 100% - шунтировать релюшкой.
Сам нашел на просторах инета похожую схему, а прошивки к ней нету...
Лучше использовать Н-канальный полевик:
  • при равных рабочих токах и RDSon он стоит дешевле, чем П-канальный;
  • Н-канальный полевик не надо раскачивать.
Вот, держите прошивку.
SoftStartPWM.zip
плавный запуск
(650 Bytes) Downloaded 738 times
В отличии от схемы, кнопку запуска цепляете на прерывание INT0, т.е. 6ая ножка, а выход на реле - 3я ножка.
Конденсатор, что стоит у кнопок не нужен. Подтяните только 6-ую ножку к +5В через резистор 5,6-10К.

Прошивку писал на скорую руку, но алгоритм вроде соответствует вашей просьбе - пока нажата кнопка, ШИМ плавно нарастает и после достижения 100% включается шунт.реле.
Если отпустить кнопку при ШИМ = 100% - отключается реле, затем ШИМ плавно уменьшается.
Частота ШИМ 147 Гц.
Фьюзы:
Low: 0x79
High: 0xFF

Re: Плавный пуск на ATtiny13

Posted: 27 Jul 2014 23:35
by Sony
ma35tr0 wrote:
Вот, держите прошивку.
Спасибо. Пока я на отдыхе, приеду в середине недели - проверю корректность. Если будут вопросы - сообщу