| Микроконтролери и електроника 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 |
|
| Автор: | Lupus [ Нед Фев 13, 2005 4:04 pm ] | |||||||||
| Заглавие: | Re: PWM CONTROL | |||||||||
Добре дошъл във форума! Само че хайде да опитаме нещо: 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/ |
|