Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

5 канален PWM ?
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6673
Страница 1 от 2

Автор:  Иво [ Пон Мар 23, 2009 2:20 pm ]
Заглавие:  5 канален PWM ?

Здравейте, начинаещ съм и се опитвам да навляза в областта на PIC-овете :oops: . Ползвам CCS PicC и съм правил по-простички работи ( директно управление на светодиоди, термометри, LCD и тн. ).

Въпросът ми е как най-лесно ( и качествено :) ) мога да реализирам 5 канален PWM - трябва да управлявам 5 лампи с нажежаема жичка, като трябва да светват плавно последователно, след което да загасват пак плавно една след друга.

Благодаря предварително !

Автор:  bateAz [ Пон Мар 23, 2009 5:27 pm ]
Заглавие: 

С други контролери става доста по - лесно...
MSP430F149 има до 12 PWM изхода, MSP430F5418 - също. ( $4.15 ) Akerman

То верно Никола каза, че за мигане на лампа най-добре става ПИК, ама ти искаш:
1. хем да светкат / гаснат плавно;
2. хем да са ... 5 !!!

Ако наистина искаш да е с ПИК, само с ПИК и целия ПИК, ползвай 5 изхода и софтуерно им направи PWM като ползваш по-бързо прекъсване от таймер.

Автор:  Desert Leo [ Пон Мар 23, 2009 5:57 pm ]
Заглавие: 

PIC24FJ32GA002-I/SO, например от Комет за под 3$.
Точно 5 PWM изхода, ако трябва да са хардуерни.

Лампи могат да се мигат и с PIC и с Тексасец, че и с АРМ.

Автор:  Иво [ Пон Мар 23, 2009 6:31 pm ]
Заглавие: 

Благодаря за информацията !

Цитат:
Ако наистина искаш да е с ПИК, само с ПИК и целия ПИК, ползвай 5 изхода и софтуерно им направи PWM като ползваш по-бързо прекъсване от таймер.


А дали Ви се намира някакъв примерен код на С. За един PWM разбирам как става, но няма ли да стане малко объркано за 5 изхода ??



Поздрави,
Иво

Автор:  kasparov [ Пон Мар 23, 2009 9:17 pm ]
Заглавие:  Re: 5 канален PWM ?

Иво написа:
.. трябва да светват плавно последователно, след което да загасват пак плавно една след друга.
...


аз така както го чета, под последователно светване разбирам, че светва плавно първата лампа и след като е светнала
максимално, започва светването на втората, и т. н.
Ако е така, и един ШИМ би трябвало да е достатъчен. В противен случай, колко от шимовете си променят едновременно коеф. на запълване?

Автор:  Иво [ Пон Мар 23, 2009 9:40 pm ]
Заглавие: 

Мисля да го направя с поне 2 PWM-а... В момента ползвам 16F690 директно на демо борда на PicKit 2.

Автор:  kasparov [ Пон Мар 23, 2009 9:55 pm ]
Заглавие: 

Единият ШИМ софтуерен ли ще е?

Автор:  fan [ Пон Мар 23, 2009 9:59 pm ]
Заглавие: 

Щом прохождаш в CCS-a, влез в "извора" http://www.ccsinfo.com/forum/
Там е пълно с примерен сорс, има и търсачка. Какво повече му трябва на човек?! :)

Автор:  Иво [ Пон Мар 23, 2009 10:03 pm ]
Заглавие: 

fan написа:
Щом прохождаш в CCS-a, влез в "извора" http://www.ccsinfo.com/forum/
Там е пълно с примерен сорс, има и търсачка. Какво повече му трябва на човек?! :)



Сега ровя там :)

Иначе единият ШИМ трябва да е софтуерен, тъй като имам само 1 хардуерен на лице ;) Не знам как е по удачно - 1 софтуерен и 1 хардуерен или 2 софтуерни.

Автор:  Zeus [ Пон Мар 23, 2009 10:21 pm ]
Заглавие: 

#include <16F88.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=8000000)
#bit led1=0x06.0 //PORTB.0
#bit led2=0x06.1
#bit led3=0x06.2
#bit led4=0x06.3
#bit led5=0x06.4
#bit led6=0x06.5
#bit led7=0x06.6
#bit led8=0x06.7

int x[9];
int y;

#int_TIMER0
void clock_isr()
{
disable_interrupts(INT_TIMER0);

if(y>x[1]) led1=0;
if(y>x[2]) led2=0;
if(y>x[3]) led3=0;
if(y>x[4]) led4=0;
if(y>x[5]) led5=0;
if(y>x[6]) led6=0;
if(y>x[7]) led7=0;
if(y>x[8]) led8=0;

if(y++>200) // тук може и 254, но при мен при 200 светодиодите светеха на макс.
{
y=0;
if(x[1]>0) led1=1;
if(x[2]>0) led2=1;
if(x[3]>0) led3=1;
if(x[4]>0) led4=1;
if(x[5]>0) led5=1;
if(x[6]>0) led6=1;
if(x[7]>0) led7=1;
if(x[8]>0) led8=1;
};

set_timer0(200);
enable_interrupts(INT_TIMER0);
}

void main()
{
setup_oscillator( OSC_8MHZ );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);

set_tris_b(0x00);
y=0;

// слагаш твоята програма
}

Това е една моя стара програма с 8 софтуерни ШИМ-а, вързани на PORTB.
с x[1] - x[8] регулираш запълването на ШИМ-овете, респективно силата на светене. При 0 са изгаснали, при 255 светят максимално. Слагаш МОСФЕТ-и за лампите и си готов.
Дано ти свърши работа като начало.

Автор:  Иво [ Пон Мар 23, 2009 11:03 pm ]
Заглавие: 

ZEUS, благодаря много !!! Кодът е много полезен. Аз също поразтърсих тук-там и намерих следното ( тук съм го модифицирал за мойте нужди де.. ):

Код:
#include <16F690.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, NOBROWNOUT
#use delay(clock=8000000)
#use standard_io(c)
#define preload 65458
#define lamp1 pin_c0
#define lamp2 pin_c1
#define lamp3 pin_c2

//**************************************************************************************************
//Global variables
//**************************************************************************************************

int lamp1_duty;
int lamp2_duty;
int lamp3_duty;
int16 Intcount;

//**************************************************************************************************
//100Hz pwm (interrupt at 25.8kHz
//**************************************************************************************************

#INT_TIMER1
void timer_irq()
{
    set_timer1(preload);
   
   if (Intcount < 255)
    {
      if (Intcount == lamp1_duty)
       {
         output_low(lamp1);
       }   
      if (Intcount == lamp2_duty)
       {
         output_low(lamp2);
       }   
      if (Intcount == lamp3_duty)
       {
         output_low(lamp3);
       }   
    }
   
   else if(Intcount == 255)
    {
      Intcount = 0;
      output_high(lamp1);
      output_high(lamp2);
      output_high(lamp3);   
    }   
    Intcount++;
}


//**************************************************************************************************
// Main Program
//**************************************************************************************************

void main()
{
int i;


    setup_oscillator(OSC_8MHZ);
    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
   
   Intcount = 0;
   
lamp1_duty = 1; 
lamp2_duty = 1;
lamp3_duty = 1;
   
for(i=0; (i<200) ;i++)
    { lamp1_duty = i;
      if ( lamp1_duty>50 )
      lamp2_duty = (lamp1_duty - 49);
       else lamp2_duty=1;
      if ( lamp2_duty>50 )
      lamp3_duty = (lamp2_duty - 49);
      else lamp3_duty=1;
     
      delay_ms(2);
     
};
   
   

   for (;;)
   {

     
   }
}



Сега е за 3 лампи, но ще го довърша :) Сега го пробвам със светодиоди и преходите стават малко рязки ( т.е. между 0 и 15 изведнъж светва ярко, и в останалото време се дозасилва леко, но мисля, че с лампата с нажежаема жичка ще стане доста по-плавно ( все пак има голяма инертност)...


Благодаря на всички за помоща !

Автор:  Иво [ Пет Мар 27, 2009 11:54 am ]
Заглавие: 

Здравейте отново!

Програмите работят перфектно ( благодарности на ZEUS ), обаче го тествах със светодиоди. Сега като му включа триак и лампа и се получава някакво мигане на лампрата с честота около 15 Hz ( на око ). Реших, че се получава, защото нямам синхронизация с мрежовата честота, но пробвах същата схема и с постоянен ток - лампата пак мига:

Изображение

Забравил съм да сложа и 100 омов резистор на схемата между контролера и триака ( на платката го има ) ;)

Имате ли идея от какво е ?

Автор:  MIPS [ Пет Мар 27, 2009 12:10 pm ]
Заглавие: 

Ами аз мисля ,че е от триака , но това е мое мнение :)

Автор:  Иво [ Пет Мар 27, 2009 12:14 pm ]
Заглавие: 

MIPS написа:
Ами аз мисля ,че е от триака , но това е мое мнение :)


И аз така мисля.. ама как да го избегна се чудя...

Автор:  plameniv [ Пет Мар 27, 2009 12:14 pm ]
Заглавие:  Мига естествено :)

Иво написа:
Здравейте отново!

Програмите работят перфектно ( благодарности на ZEUS ), обаче го тествах със светодиоди. Сега като му включа триак и лампа и се получава някакво мигане на лампрата с честота около 15 Hz ( на око ). Реших, че се получава, защото нямам синхронизация с мрежовата честота, но пробвах същата схема и с постоянен ток - лампата пак мига:
...................

Забравил съм да сложа и 100 омов резистор на схемата между контролера и триака ( на платката го има ) ;)

Имате ли идея от какво е ?

Ми замисли се защо мига!
1. Този модел симистори имат нужда от включване с импулс и в 2-те лоувълни, най добре е да ползваш подходящ оптрон, за целта потърси из нета да речем MOC3022, хубаво е да си синхронизираш контролера по фаза за да се получи нещо като фазово управление.
Едно е да си правиш PWM с диоди друго с крушки на 220 :!: :)

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/