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

setup_ccp1 (CCP_PWM) Въпрос!
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4442
Страница 1 от 1

Автор:  million [ Съб Юни 30, 2007 1:33 pm ]
Заглавие:  setup_ccp1 (CCP_PWM) Въпрос!

Здравейте! Опитвам се да увелича резолюцията PWM модула или казано по точно, да я накарам да работи в по тесен диапазон от 100% запълване. 10бита са 1024 стъпки за 100% не са достатъчни, но 1024стъпки в 25% е екстра. Пробвам следното, но не става:
Честотата трябва да е 250 Хзц.
Пускам 4 пъти по висока честота(1000Хзц) и използвам само 1 пулс от общо четирите, но или аз бъркам нещо, или хардуера не позволяава. Някакви идеи :?
Код:
int count;
int16 temp

#INT_RTCC
void clock_isr(){

count=count+1;
if (count==4){
set_pwm1_duty (temp);
count=0;
set_pwm1_duty(0);

}

}

Автор:  zaphod [ Съб Юни 30, 2007 2:47 pm ]
Заглавие:  Re: setup_ccp1 (CCP_PWM) Въпрос!

million написа:
set_pwm1_duty (temp);
count=0;
set_pwm1_duty(0);

и как точно това нещо ще ти ползва "само един от четирите" импулса? мисля че set_pwm1_duty(0); трябва да бъде сложено в else участъка на ифа, а не в този

Автор:  million [ Съб Юни 30, 2007 4:18 pm ]
Заглавие: 

Код:
#INT_RTCC
void clock_isr()
{
count=count+1;
   if (count==4)
   {
   set_pwm1_duty (temp);
   count=0;
   }
   else (set_pwm1_duty(0));

}


Да си призная, слагах го къде ли не. Все се получава едно мигане на осцилоскопа с основната честота. Пробвах да пускам и спирам целия ССР модул, но там е още по зле резултата. Засега все още симулирам с ПРОТЕУС с 16Ф877, мисля че за толкова просто нещо може да му се вярва.

Автор:  Predator_MF [ Съб Юни 30, 2007 5:40 pm ]
Заглавие: 

Каква ти е идеята с тоя брояч с Timer 0 ? Мигане има щото на всеки 4 прекъсвания на Timer0 пишеш 0 в PWM и съответно увеличаваш докрай/намаляш докрай PWM (зависи как си вързал изхода). Не мога да схана идеята ти :?

Автор:  million [ Съб Юни 30, 2007 6:09 pm ]
Заглавие: 

Таймер0 го използвам за две неща за момента:
1. увеличава с +1 през зададения му период променливата "TEMP", което ми е широчината на ШИМа
2. да килва 4 цикъла на PWM за да получа 1024 стъпки на по малка част от цялата широчина, но да си останат 250 херца. Тъй като там ми е необходима. Сигурно има и друг начин, но с моите знания..... надали ще се получи нещо. Затова моля за помощ.

ПС. добавих и кода за повече яснота :)

Прикачени файлове:
05_CCP.c [910 Байта]
237 пъти
pic.jpg
pic.jpg [ 65.17 KiB | Прегледано 2201 пъти ]

Автор:  zaphod [ Съб Юни 30, 2007 7:48 pm ]
Заглавие: 

е, не моа ти помогна. а напрежение ли искаш да направиш от това? щото малко ми е мъгла крайната цел...

Автор:  Ки4о [ Съб Юни 30, 2007 10:20 pm ]
Заглавие: 

Ако ще го ползваш за управление на двигател си направи софуеерен ШИМ,макар че многото щракания на ШИМ-а не се харесват на двигателя.От страна хардуеерен модул в ПИК-а си леко ограничен.

Автор:  ji4ka [ Нед Юли 01, 2007 12:22 am ]
Заглавие: 

Идеята ти е правилна, но за Ц-то не мо'а ти помогна. Трябва да ползваш прекъсването на ПВМ-а (таймер2) за брояча за да има пълен синхрон. Може да се доразвие да управляваш целия обхват, не само 25% - тогава "празните" периоди трябва да са както 0В така и 5В,по алгоритъм. Ще получиш ПВМ с разредност 12бит. Разбира се всичко е за сметка на честотата.

Автор:  zaphod [ Нед Юли 01, 2007 8:22 am ]
Заглавие: 

ji4ka написа:
Трябва да ползваш прекъсването на ПВМ-а (таймер2) за брояча за да има пълен синхрон. Може да се доразвие да управляваш целия обхват, не само 25% - тогава "празните" периоди трябва да са както 0В така и 5В,по алгоритъм. Ще получиш ПВМ с разредност 12бит. Разбира се всичко е за сметка на честотата.

че той не ползва ли прекъсването бе? според мене го ползва, иначе кога ше се вика тая функция дето я е писал. очевидно брои импулсите и всеки четвърти го пуска, останалите ги нулира. обаче, все още не мога да си представя смисленна употреба на това нещо. едно е сигурно - вероятно му трябват самите импулси като време, а не усредненото напрежение. ако му трябва усредненото напрежение все пак, това е голяма глупост което прави....

Автор:  Predator_MF [ Нед Юли 01, 2007 12:05 pm ]
Заглавие: 

Явно искаш да регулираш изхода 0-25% с 10 бита разряд...само че що ползваш #INT_RTCC - това не е ли Timer0 ? Трябва ти Timer2 в тоя PIC и ще стане:

Код:
#INT_TIMER2
void pwm_isr()
{
if (++count<4)
{
  set_pwm_duty(0);
}
else
{
  set_pwm_duty(current_pwm_level);
  count=0;
}

Автор:  million [ Пон Юли 02, 2007 12:14 pm ]
Заглавие: 

Ейййй, вярно че ползвам грешния таймер. Сега работи! Благодаря на всички за отзивчивоста и само да вметна, че благодарение на вас, не се отказах от микроконтролерите още в началото. Много ми е интересно да се занимавам, а когато съм в задънена улица и някои от пишещите тук ми помогне, както в случая си е направо повод за радост :drinkers: :partyman: :partyman: :supz: :partyman:

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