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

PWM CONTROL
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=397
Страница 1 от 1

Автор:  Гост [ Нед Фев 13, 2005 2:04 pm ]
Заглавие:  PWM CONTROL

ZDRAVEITE QKO SE USUKAH NE6TO I IDEQ SI NQMA KAK DA STANE BEZ DA PREKUSVAM POREDICATA OT IMPULSI NA IZHODA :( IDEQTA MI E SLEDNATA ISKAM DA UPRAVLQVAM 3LED KANALA NA IZHODA 4REZ PWM KOITO SA NEZAVISIMI SUS "+" I "-" DA PROMENQM SILATA NE SVETENE NA OTDELNITE KANALI A OTDELNIQ KANAL IZBIRAM 4REZ "0" NA NQKOI PIN STAVA DUMA ZA 8051

Автор:  Lupus [ Нед Фев 13, 2005 4:04 pm ]
Заглавие:  Re: PWM CONTROL

Гост написа:
ZDRAVEITE QKO SE USUKAH NE6TO I IDEQ SI NQMA KAK DA STANE ....

Добре дошъл във форума! Само че хайде да опитаме нещо:
1. Това, дето си го написал да е на кирилица и ако може не само с главни букви.
2. Да се опиташ да обясниш точно какво искаш да направиш и какво не става в няколко изречения (не само с едно).
3. Ние да се опитаме да разберем проблема ти и да отговорим.
Става ли?

Автор:  ToHu [ Нед Фев 13, 2005 4:12 pm ]
Заглавие: 

Първо не е лошо д шиещ на кирилица, или най малкото не смао с големи букви.
После, какво точно те притеснява не разбирам. Настройваш си единия таймер да ти генерира прекъсване, да речем на всяка 1 ms. като влезеш в прекъсването инкрементираш един таймер, да речем pwm_time ...ето така
if(pwm_time<98)
{
pwm_time++ ;
}
else
{
pwm_time=0 ;
out_1=1;
out_2=1;
out_3 =1;

if(pwm_time>duty_1)
{
out_1=0;
}
if(pwm_time>duty_2)
{
out_2=0;
}
if(pwm_time>duty_3)
{
out_3=0;
}

}
kato out_1=1 e komandata s koiato wdigash bit ot izhoda w 1-ca

a samata programa ti e :
while(1)
{
if(in_1)
{
if(duty_1>99)
{
duty_1=100;
}
else
{
duty_1 ++;
}
delay_ms(50);
}
f(in_2)
{
if(duty_1<1)
{
duty_1=0;
}
else
{
duty_1 --;
}
delay_ms(50);
}
.......
.......

}

така, в прекъсването какво правиш, инкрементираш един брояч, pwm_time, който го инкрементираш от 1 до 100, това ти дава стъпката на регулиране от 0-100, като в случая PWM-а е с честота 10 Hz (100 стъпки по 1 ms). После имаш 3 променливи, duty_1, duty_2, duty_3 които ти дават запълването за всеки канал. Когато pwm_time стане по голямо от съответната променлива, изхода на канала става 0. Когато брояча pwm_time стигне 100 се установява отново в 0, като при това всички изходи ставт 1.
Това ти реализира PWM .. е с малки отмествания м-у трите канала но за светодиода това едва ли има голиамо значение.

в main върртиш един цикъл, в който проверяваш има ли натиснат бутон, в случая in_1 и in_2, като първото е up второто down за канал 1. Ако откриеш натиснат бутон проверяваш променливата,ако не е с гранична стойност я инкрементираш, или декрементираш, след това чакаш 50 ms ... т.е. ако натиснесх бутона всеки 50 мс ще променят стойноста на запълване с 1.
Това е разбира се най-елементарното решение, не е много добро бих реализирал по друг начин бутоните но те са без значение, нали те интересуваше PWM-а .. а и не ми се обеснява сега другата реализация.


}

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