Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.06.2012, 16:45
|
|
Частый гость
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Заданный ШИМ в 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
|
|
|
12.06.2012, 18:37
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Есть же аппаратный 10-разрядный ШИМ - модуль CCP.
|
|
|
Сказали "Спасибо" Bumbarra
|
|
|
12.06.2012, 21:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Если мне не изменяет склероз, обработка прерывания по Таймеру2 даст возможность изменять период ШИМ каждый цикл.
__________________
misterdi<@>i.ua
|
|
|
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
|
|
|
12.06.2012, 21:52
|
|
Заблокирован
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Очередная тема-"русская рулетка"...
Догадайтесь, типа, сами... "Вынос мозга гарантирован!"...
|
|
|
|
13.06.2012, 14:56
|
|
Прописка
Регистрация: 04.01.2012
Сообщений: 110
Сказал спасибо: 37
Сказали Спасибо 53 раз(а) в 34 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Если делаешь программно, то скважность определяется количеством счётчика паузы и импульсов (2 переменные). При этом сумма значений этих счётчиков должна быть постоянная и равна максимальному количеству их в периоде. Для аппаратного шима есть даташит, даже на русском на этот МК. Там период шим задаётся в регистре PR2, а длительность единичного уровня в CCPR1H:CCPR1L. Опорный таймер TMR2. Стр. 61-62 даташита.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо iso9001 за это сообщение:
|
|
|
13.06.2012, 17:43
|
|
Временная регистрация
Регистрация: 15.12.2006
Сообщений: 74
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 3 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Сообщение от iso9001
|
Там период шим задаётся в регистре PR2, а длительность единичного уровня в CCPR1H:CCPR1L. Опорный таймер TMR2. Стр. 61-62 даташита.
|
Не совсем так, скважность задается только CCPR1L и двумя битами CCP1CON ‹5,4›, а CCPR1H используется только как буфер для промежуточного хранения, период PR2 должен быть больше CCPR1L и CCP1CON ‹5,4›
|
|
|
Эти 2 пользователя(ей) сказали Спасибо retro55 за это сообщение:
|
|
|
14.06.2012, 09:41
|
|
Прописка
Регистрация: 04.01.2012
Сообщений: 110
Сказал спасибо: 37
Сказали Спасибо 53 раз(а) в 34 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Сообщение от retro55
|
Не совсем так, скважность задается только CCPR1L и двумя битами CCP1CON ‹5,4›, а CCPR1H используется только как буфер для промежуточного хранения, период PR2 должен быть больше CCPR1L и CCP1CON ‹5,4›
|
... Да, в даташите написано именно так. Я немного сбрехал. Виноват...
|
|
|
Эти 2 пользователя(ей) сказали Спасибо iso9001 за это сообщение:
|
|
|
14.06.2012, 14:33
|
|
Частый гость
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
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
|
|
|
14.06.2012, 17:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Заданный ШИМ в PIC
Я бы сделал установку duty_cycle ДО выполнения вычислений. На границах диапазона возможно происходит что-то типа "гонок" между аппаратной и программной перезагрузками таймера. Кстати, у Вас получилась неплохая заготовка для синусоидального генератора/синтезатора частоты Нужно только заменить алгоритм вычисления нового значения коэффициента ШИМ.
__________________
misterdi<@>i.ua
Последний раз редактировалось MisterDi; 14.06.2012 в 17:39.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо MisterDi за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 05:00.
|
|