Отговори на тема  [ 12 мнения ] 
Малко помощ за PWM на 18F4431 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Малко помощ за PWM на 18F4431
Може ли някой да ми каже как да задавам времена за различните канали???
Примерно ако ползвам PWM1 той има 2 канала(пин 33 и 34). Ясно е, че трябва да избера комплиментарен мод.
Искам да генерирам примерно 10 импулса на пин 33(пин 34 не е активен) и след това още 10 на пин 34.
Това, което намерих като команда е set_power_pwmX_duty(duty) (за CCS complier).
Искам да знам как да работя с двата канала по отделно.
Благодаря!

_________________
www.elkran.com


Пет Мар 23, 2012 7:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Намерих каквото ми трябваше. Благодаря все пак!

_________________
www.elkran.com


Съб Мар 24, 2012 10:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 1:59 pm
Мнения: 3867
Местоположение: Габрово
Мнение Re: Малко помощ за PWM на 18F4431
Колега, откъде докопа този 4431? Трябва ми спешно (днес, утре) нещо с 3-фазен PWM, ама в комет няма. Да не би да ти се намира една излишна бройка?


Пон Мар 26, 2012 9:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Моите са под бройка, но кажи на комет да ти доставят. Идват за 2-3 дни. Успех!

_________________
www.elkran.com


Пон Мар 26, 2012 10:42 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Колеги, тук имам малка загадка. Научих се да работя с ПВМ на този 18Ф4431, но имам проблем с периферията му. Свързал съм двуредов дисплей към порт С, а за управляващи сигнали използвам порт Е. Когато използвам друг чип примерно 4520, 4620 и т. н. дисплея работи без проблем. Когато обаче заредя същата програма на 4431, чипа блокира и дори не иска да инциализира дисплея.
Някакви идеи???

_________________
www.elkran.com


Вто Апр 03, 2012 10:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Малко помощ за PWM на 18F4431
Преди дисплея се инициализира контролера. Може да им съвпадат изводите, но имат разлика в регистрите. Не може просто да запишеш хекса на подобен контролер и да очакваш да тръгне.


Вто Апр 03, 2012 12:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Е сменям хедър файла! Явно понеже този има доста допълнителни функции и прави проблем.

_________________
www.elkran.com


Вто Апр 03, 2012 12:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение Re: Малко помощ за PWM на 18F4431
A ADC-то конфигурирал ли си? Ако не си, PORTE ти е аналогови входове! :D


Сря Апр 04, 2012 8:13 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Gogo жив да си!
Оправих периферията обаче имам питане за самия PWM. Направих си програмка, която използва прекъсване за зареждане на ШИМ.
Код:
#INT_PWMTB
void SetPvm()
{
set_power_pwm0_duty(nextpulse);
set_power_pwm2_duty(nextpulse);
boolpwm=0;
}

Използвам променлива boolpwm, чрез която отчитам дали е заредена новата стойност. В самата програма изчаквам докато boolpwm стане 0:
[/code]boolpwm=1;
while(boolpwm==1);[/code]
Лошото е, че това причинява някакви смущения в програмата и много голяма част от импулсите не се генерират. Не знам защо.
Какво става???

_________________
www.elkran.com


Чет Апр 05, 2012 4:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Малко помощ за PWM на 18F4431
PWM-а генерира прекъсване (всъщност таймера който се ползва), когато това стане спокойно можеш да запишеш следващата стойност - тя ще се зареди чак при новия цикъл - и така не би трябвало да има гличове.


Чет Апр 05, 2012 7:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Ами аз уж това правя. Основната програма намира новата стойност и чака while(boolpwm==1);. Когато се вдигне флага за прекъсване (#INT_PWMTB ), зареждам новите стойности и променям boolpwm=0.
Лошото е, че изхода не е какъвто трябва да бъде. Много голяма част от импулсите не се генерират.
Ето пълния код на програмата:

Код:
#include <18F4431.h>
#FUSES HS
#use delay(clock=25000000)


int16 arr[21]={0,480,960,1410,1820,2190,2510,2760,2940,3060,3090,3090,3060,2940,2760,2510,2190,1820,1410,960,480};

int16 nextpulse,frequency;
int1 boolpwm;

#INT_PWMTB
void SetPvm()
{
set_power_pwm0_duty(nextpulse);
set_power_pwm2_duty(nextpulse);
boolpwm=0;
}


void PowerPwmPolaritySwap(int1 swap)
{
switch(swap)
{
case 0:{
set_power_pwm_override(1,true,0);
set_power_pwm_override(0,false,1);
set_power_pwm_override(2,true,0);
set_power_pwm_override(3,false,1);

break;
}
case 1:{
set_power_pwm_override(0,true,0);
set_power_pwm_override(1,false,1);
set_power_pwm_override(3,true,0);
set_power_pwm_override(2,false,1);

break;
}
}
}


void TurningLoop()
{
int16 i;
for(i=1;i<21;i++)
{
nextpulse=arr[i];
boolpwm=1;
while(boolpwm==1);
}
}

//Full Period Wave
void FullPeriodWave()
{
PowerPwmPolaritySwap(0);
TurningLoop();
PowerPwmPolaritySwap(1);
TurningLoop();
}

void main(){
delay_ms(3000);

nextpulse=0;
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_PWMTB);
setup_power_pwm_pins(PWM_BOTH_ON,PWM_BOTH_ON,PWM_OFF,PWM_OFF);
setup_power_pwm(PWM_FREE_RUN, 1, 0, 3100, 0, 1,15);
set_power_pwm0_duty(nextpulse);
set_power_pwm2_duty(nextpulse);
while(1){
frequency=50;
FullPeriodWave();
}

}

Не съм работил с такъв интерфейс до сага. Възможно е кардинално да бъркам нещо.

_________________
www.elkran.com


Чет Апр 05, 2012 8:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Малко помощ за PWM на 18F4431
Сега да напиша за поколенията. Да знаят. Проблемите са няколко.
Първо: Този ШИМ модул не дели входната честота на 4, както правят обикновено ПИК-четата, а я подава 1 към 1. От тук се получава първото разминаване.
Второ: Периодът се задава чрез 12 битова променлива, а set_power_pwmХ_duty() използва 14 битова. Ето от тук идва разликата. Ако периода е, както в случая 3100, то за изчисляване duty cycle трябва да се ползва 4 пъти го голяма стойност - 12400.
Третата ми грешка в случая е, че не изчаквам да завърши последния импулс от серията, а директно преминавам към следващата полувълна. Но това е бял кахър.
Дано да съм полезен на някого!

_________________
www.elkran.com


Съб Апр 07, 2012 2:04 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни