| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Малко помощ за PWM на 18F4431 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9985 |
Страница 1 от 1 |
| Автор: | stoyanoff [ Пет Мар 23, 2012 7:25 pm ] |
| Заглавие: | Малко помощ за PWM на 18F4431 |
Може ли някой да ми каже как да задавам времена за различните канали??? Примерно ако ползвам PWM1 той има 2 канала(пин 33 и 34). Ясно е, че трябва да избера комплиментарен мод. Искам да генерирам примерно 10 импулса на пин 33(пин 34 не е активен) и след това още 10 на пин 34. Това, което намерих като команда е set_power_pwmX_duty(duty) (за CCS complier). Искам да знам как да работя с двата канала по отделно. Благодаря! |
|
| Автор: | stoyanoff [ Съб Мар 24, 2012 10:09 pm ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Намерих каквото ми трябваше. Благодаря все пак! |
|
| Автор: | gicho [ Пон Мар 26, 2012 9:18 am ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Колега, откъде докопа този 4431? Трябва ми спешно (днес, утре) нещо с 3-фазен PWM, ама в комет няма. Да не би да ти се намира една излишна бройка? |
|
| Автор: | stoyanoff [ Пон Мар 26, 2012 10:42 am ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Моите са под бройка, но кажи на комет да ти доставят. Идват за 2-3 дни. Успех! |
|
| Автор: | stoyanoff [ Вто Апр 03, 2012 10:54 am ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Колеги, тук имам малка загадка. Научих се да работя с ПВМ на този 18Ф4431, но имам проблем с периферията му. Свързал съм двуредов дисплей към порт С, а за управляващи сигнали използвам порт Е. Когато използвам друг чип примерно 4520, 4620 и т. н. дисплея работи без проблем. Когато обаче заредя същата програма на 4431, чипа блокира и дори не иска да инциализира дисплея. Някакви идеи??? |
|
| Автор: | CarBeta [ Вто Апр 03, 2012 12:18 pm ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Преди дисплея се инициализира контролера. Може да им съвпадат изводите, но имат разлика в регистрите. Не може просто да запишеш хекса на подобен контролер и да очакваш да тръгне. |
|
| Автор: | stoyanoff [ Вто Апр 03, 2012 12:25 pm ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Е сменям хедър файла! Явно понеже този има доста допълнителни функции и прави проблем. |
|
| Автор: | Gogo [ Сря Апр 04, 2012 8:13 am ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
A ADC-то конфигурирал ли си? Ако не си, PORTE ти е аналогови входове! |
|
| Автор: | stoyanoff [ Чет Апр 05, 2012 4:34 pm ] | |||||||||
| Заглавие: | Re: Малко помощ за PWM на 18F4431 | |||||||||
Gogo жив да си! Оправих периферията обаче имам питане за самия PWM. Направих си програмка, която използва прекъсване за зареждане на ШИМ.
Използвам променлива boolpwm, чрез която отчитам дали е заредена новата стойност. В самата програма изчаквам докато boolpwm стане 0: [/code]boolpwm=1; while(boolpwm==1);[/code] Лошото е, че това причинява някакви смущения в програмата и много голяма част от импулсите не се генерират. Не знам защо. Какво става??? |
||||||||||
| Автор: | Cekins [ Чет Апр 05, 2012 7:11 pm ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
PWM-а генерира прекъсване (всъщност таймера който се ползва), когато това стане спокойно можеш да запишеш следващата стойност - тя ще се зареди чак при новия цикъл - и така не би трябвало да има гличове. |
|
| Автор: | stoyanoff [ Чет Апр 05, 2012 8:31 pm ] | |||||||||
| Заглавие: | Re: Малко помощ за PWM на 18F4431 | |||||||||
Ами аз уж това правя. Основната програма намира новата стойност и чака while(boolpwm==1);. Когато се вдигне флага за прекъсване (#INT_PWMTB ), зареждам новите стойности и променям boolpwm=0. Лошото е, че изхода не е какъвто трябва да бъде. Много голяма част от импулсите не се генерират. Ето пълния код на програмата:
Не съм работил с такъв интерфейс до сага. Възможно е кардинално да бъркам нещо. |
||||||||||
| Автор: | stoyanoff [ Съб Апр 07, 2012 2:04 pm ] |
| Заглавие: | Re: Малко помощ за PWM на 18F4431 |
Сега да напиша за поколенията. Да знаят. Проблемите са няколко. Първо: Този ШИМ модул не дели входната честота на 4, както правят обикновено ПИК-четата, а я подава 1 към 1. От тук се получава първото разминаване. Второ: Периодът се задава чрез 12 битова променлива, а set_power_pwmХ_duty() използва 14 битова. Ето от тук идва разликата. Ако периода е, както в случая 3100, то за изчисляване duty cycle трябва да се ползва 4 пъти го голяма стойност - 12400. Третата ми грешка в случая е, че не изчаквам да завърши последния импулс от серията, а директно преминавам към следващата полувълна. Но това е бял кахър. Дано да съм полезен на някого! |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|