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

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

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

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

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

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

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

 
Опции темы

Заданный ШИМ в PIC

Непрочитано 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
Сообщений: 342
Сказал спасибо: 10
Сказали Спасибо 170 раз(а) в 103 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Заданный ШИМ в PIC

Есть же аппаратный 10-разрядный ШИМ - модуль CCP.
Bumbarra вне форума  
Сказали "Спасибо" Bumbarra
warel (29.06.2019)
Непрочитано 12.06.2012, 21:18  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
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
Сказал спасибо: 35
Сказали Спасибо 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
Сказал спасибо: 35
Сказали Спасибо 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.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
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, время: 17:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.