Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 12.06.2012, 16:45  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Заданный ШИМ в PIC

Добрый день, пишу программу шим модуляции для PIC16F877. Собственно столкнулся со следующей проблемой. Не понимаю как изменять скважность. Пробовал делать цикл, с выдержкой времени. Скважность изменяется скачкообразно.
Цитата:
for (int i=1;i‹=4;++i)
{ set_pwm1_duty(sin[i]);
delay_ms(2);
}
М.б есть какой-нибудь флаг, который определят, что цикл закончился и можно менять скважность.
Цитата:
if(flag) then
{
i:=i++;
if i›4 then
i:=0;
}
switch (i)
{
case 0:set_pwm1_duty(sin[0])
break;
case1:set_pwm1_duty(sin[1])
break;
case 2:set_pwm1_duty(sin[2])
break;
case 3:set_pwm1_duty(sin[3])
break;
}
Реклама:
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (29.06.2019)
Непрочитано 12.06.2012, 18:37  
Bumbarra
Вид на жительство
 
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Есть же аппаратный 10-разрядный ШИМ - модуль CCP.
Bumbarra вне форума  
Сказали "Спасибо" Bumbarra
warel (29.06.2019)
Непрочитано 12.06.2012, 21:18  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Если мне не изменяет склероз, обработка прерывания по Таймеру2 даст возможность изменять период ШИМ каждый цикл.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
VitaminPSG (14.06.2012), warel (29.06.2019)
Непрочитано 12.06.2012, 21:52  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Очередная тема-"русская рулетка"...
Догадайтесь, типа, сами... "Вынос мозга гарантирован!"...
st__1 вне форума  
Сказали "Спасибо" st__1
warel (29.06.2019)
Непрочитано 13.06.2012, 14:56  
iso9001
Прописка
 
Регистрация: 04.01.2012
Сообщений: 110
Сказал спасибо: 37
Сказали Спасибо 53 раз(а) в 34 сообщении(ях)
iso9001 на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Если делаешь программно, то скважность определяется количеством счётчика паузы и импульсов (2 переменные). При этом сумма значений этих счётчиков должна быть постоянная и равна максимальному количеству их в периоде. Для аппаратного шима есть даташит, даже на русском на этот МК. Там период шим задаётся в регистре PR2, а длительность единичного уровня в CCPR1H:CCPR1L. Опорный таймер TMR2. Стр. 61-62 даташита.
Вложения:
Тип файла: pdf pic16f87x_cr.pdf (3.75 Мб, 178 просмотров)
iso9001 вне форума  
Эти 2 пользователя(ей) сказали Спасибо iso9001 за это сообщение:
VitaminPSG (14.06.2012), warel (29.06.2019)
Непрочитано 13.06.2012, 17:43  
retro55
Временная регистрация
 
Регистрация: 15.12.2006
Сообщений: 74
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 3 сообщении(ях)
retro55 на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Сообщение от iso9001 Посмотреть сообщение
Там период шим задаётся в регистре PR2, а длительность единичного уровня в CCPR1H:CCPR1L. Опорный таймер TMR2. Стр. 61-62 даташита.
Не совсем так, скважность задается только CCPR1L и двумя битами CCP1CON ‹5,4›, а CCPR1H используется только как буфер для промежуточного хранения, период PR2 должен быть больше CCPR1L и CCP1CON ‹5,4›
retro55 вне форума  
Эти 2 пользователя(ей) сказали Спасибо retro55 за это сообщение:
VitaminPSG (14.06.2012), warel (29.06.2019)
Непрочитано 14.06.2012, 09:41  
iso9001
Прописка
 
Регистрация: 04.01.2012
Сообщений: 110
Сказал спасибо: 37
Сказали Спасибо 53 раз(а) в 34 сообщении(ях)
iso9001 на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Сообщение от retro55 Посмотреть сообщение
Не совсем так, скважность задается только CCPR1L и двумя битами CCP1CON ‹5,4›, а CCPR1H используется только как буфер для промежуточного хранения, период PR2 должен быть больше CCPR1L и CCP1CON ‹5,4›
... Да, в даташите написано именно так. Я немного сбрехал. Виноват...
iso9001 вне форума  
Эти 2 пользователя(ей) сказали Спасибо iso9001 за это сообщение:
VitaminPSG (14.06.2012), warel (29.06.2019)
Непрочитано 14.06.2012, 14:33  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Ну примерно разобрался, сделал изменения в прерывании. Код
Цитата:
#include ‹16F877.H›
#fuses XT, NOWDT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)


#define MAX_DUTY 255

int8 duty_cycle;


#int_timer2
void timer2_isr(void)
{
static int8 increment = TRUE;

if(increment)
{
duty_cycle++;

if(duty_cycle == MAX_DUTY)
increment = FALSE;
}
else
{
duty_cycle--;

if(duty_cycle == 0)
increment = TRUE;
}

set_pwm1_duty(duty_cycle);
}

//======================================
void main()
{
duty_cycle = 0; // Start with 0 duty cycle

// Setup CCP1 for PWM at 245 Hz.
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 254, ; // Interrupt at 1/8 PWM freq
set_pwm1_duty(duty_cycle);

clear_interrupt(INT_TIMER2);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);

while(1);
}
Скважность меняется постепенно, только возникают проблемы когда скважность должна быть равна 0 или 100, оно держится несколько периодов, ... 98 99 100 100 100 99 98 ... 4 3 2 1 0 0 0 1 2 3 4 ...
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (29.06.2019)
Непрочитано 14.06.2012, 17:36  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Я бы сделал установку duty_cycle ДО выполнения вычислений. На границах диапазона возможно происходит что-то типа "гонок" между аппаратной и программной перезагрузками таймера. Кстати, у Вас получилась неплохая заготовка для синусоидального генератора/синтезатора частоты Нужно только заменить алгоритм вычисления нового значения коэффициента ШИМ.
__________________
misterdi<@>i.ua

Последний раз редактировалось MisterDi; 14.06.2012 в 17:39.
MisterDi вне форума  
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
VitaminPSG (14.06.2012), warel (29.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова ШИМ SAHA_T Микроконтроллеры, АЦП, память и т.д 284 21.03.2012 11:49
Посоветуйте ШИМ Easyrider83 Информация по радиокомпонентам 19 04.10.2010 14:13
Шим + pic16f873 flax88 Микроконтроллеры, АЦП, память и т.д 0 22.08.2008 12:21
Схеми ШИМ o_sanya Источники питания и свет 1 09.01.2007 20:56
резолюция шим ejik Микроконтроллеры, АЦП, память и т.д 2 11.09.2005 18:00


Часовой пояс GMT +4, время: 09:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot