Например TDA7294

Форум РадиоКот • Просмотр темы - Программный ШИМ на AVR
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт мар 19, 2026 17:32:29

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  
Автор Сообщение
 Заголовок сообщения: Программный ШИМ на AVR
СообщениеДобавлено: Ср окт 24, 2012 16:37:25 
Встал на лапы

Зарегистрирован: Ср ноя 02, 2011 15:11:49
Сообщений: 95
Рейтинг сообщения: 0
Код:
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
 TCNT1H=0x00;
 TCNT1L=0x00;
 
 if(count>=PWM_digit)
        count=0;
 count++;
 
  if(value<count)
       {
        PWM_out=0;
       
       }
      else
       {
        PWM_out=1;
       }
 
}


Мой вариант программного ШИМа, где скважность импульсов задает value, 0<=value<=PWM_digit.Можно легко через CASE добавить нужное количество ножек с независимой регулировкой ШИМ,например вот так
Код:
 for(i=0;i<=Chanel_Count;i++)
  {
    if(count<Chanel_Lev[i])
    {
      switch(i)
      {
        case 0 : PORTD.0=1;break;
        case 1 : PORTD.1=1;break;
        case 2 : PORTD.2=1;break;
        case 3 : PORTD.3=1;break;
        case 4 : PORTD.4=1;break;
        case 5 : PORTD.5=1;break;
        case 6 : PORTD.6=1;break;
        case 7 : PORTD.7=1;break;
      }
    }
    else
    {           
       switch(i)
      {
        case 0 : PORTD.0=0;break;
        case 1 : PORTD.1=0;break;
        case 2 : PORTD.2=0;break;
        case 3 : PORTD.3=0;break;
        case 4 : PORTD.4=0;break;
        case 5 : PORTD.5=0;break;
        case 6 : PORTD.6=0;break;
        case 7 : PORTD.7=0;break;
      }
    } 
     
  }   

Но в этом алгоритме есть минус в том что частота ШИМа равна (Частота прерываний таймера)/(количество ступенек регулирования(PWM_digit)), тоисть чем больше ступенек тем меньше частота. Может есть какой нибуть другой алгоритм или все же невозможно без потерь частоты ШИМ сделать ?


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Ср окт 24, 2012 16:57:26 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 623
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3780
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Попробуйте вторй switch написать так: switch(Chanel_Count - i).


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Ср окт 24, 2012 17:13:02 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
http://bsvi.ru/bam-alternativa-shimu/


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Ср окт 24, 2012 22:41:50 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
:tea: Вот уж действительно БУМ рулит. более 200 шим по трем проводам.
любой оптимизированный программный шим просто меркнет на фоне БУМ (BAM)

Ser60 писал(а):
Попробуйте вторй switch написать так: switch(Chanel_Count - i).

Вы, должно быть забыли, что в switch можно только целые числа запихать.Никаких выражений в процессе работы.
В выражении есть переменная i, значит нужно выносить выражение за функцию.
И что вообще даст это ваше нововведение? Смену состояния ДРУГОЙ ножки.Если i это номер канала, с которым работаем.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Ср окт 24, 2012 23:53:11 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 623
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3780
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Да, видимо я неправильно понял роль переменной i.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 06:26:17 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
vitalik_1984 писал(а):
:tea: Вот уж действительно БУМ рулит. более 200 шим по трем проводам.
любой оптимизированный программный шим просто меркнет на фоне БУМ (BAM)

Не стоит слишком расслабляться... 8) Сделай два варианта - стандартный ШИМ и BAM с последовательным плавным набором градаций (и последующим спадом) - простой "перебор по кругу" для светика и сразу разницу увидиш... :facepalm:


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 11:15:27 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Цитата:
Сделай два варианта ... сразу разницу увидишЬ

Как же эта разница будет выглядеть по вашему?
Речь идет о программном шим, не аппаратном с аппаратным то как раз все замечательно.
В случае с BAM вроде как проще управлять большИм количеством выводов.
Хотя возможно это мнение ошибочно.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 12:47:53 
Вымогатель припоя

Зарегистрирован: Сб фев 19, 2011 18:04:08
Сообщений: 513
Откуда: Татарстан, пос. Актюбинский
Рейтинг сообщения: 0
Еще как вариант можно предложить зажигать светодиод по переполнению таймера, а гасить по совпадению того же таймера.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 14:56:00 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
А вот сооруди макетик ШИМ и BAM с частотой 50-60Гц для светиков и прокрути на том макетике плавный перебор уровня яркости - именно плавный перебор, а не фиксированное значение или прыжки уровня...
на макетике с BAM будут несанкционированные мерцания (то-ли погасанием, то-ли вспышкой) : это особенности формирования сигнала на переходах весовых коэффициентов - вместо
__--__--__ получается кратковременно что-то вроде__--____--__ или __----____--, но такой "мелочи" вполне достаточно для дискомфорта восприятия при динамическом изменении уровня яркости ("джиттер фазы")... В остальном BAM намного эффективнее по использованию рабочего времени МК (кроме кванта уровня=1 там и BAM и ШИМ равноценны), чем ШИМ ;-)


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 15:19:19 
Вымогатель припоя

Зарегистрирован: Сб фев 19, 2011 18:04:08
Сообщений: 513
Откуда: Татарстан, пос. Актюбинский
Рейтинг сообщения: 0
Вот что пишут по этому поводу на одном из форумов
Цитата:
1 Возможно Вы не знали, что в ВАМ методе, при переходе значений от 127 к 128 и наоборот возникают артефакты в виде заметного моргания. Такое получается из за того, что при смене вышеуказанных значений соседние периоды ВАМ образуют облась с одним уровнем (в зависимости от напрвления перехода 0 или 1) с периодом равным целому периоду ВАМ.

Цитата:
Для того, чтобы этого избежать, в каждый следующий период работы ВАМ нужно меняеть направление обработки


источник http://forum.getchip.net/viewtopic.php? ... e&start=10


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 15:24:22 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
BOB51 писал(а):
А вот сооруди макетик ШИМ и BAM с частотой 50-60Гц для светиков и прокрути на том макетике плавный перебор уровня яркости - именно плавный перебор, а не фиксированное значение или прыжки уровня...
на макетике с BAM будут несанкционированные мерцания (то-ли погасанием, то-ли вспышкой)
Всего-то? Так это лечится одной дополнительной переменной (фрагмент кода из параллельного разговора по BAM в теме codevision).
Код:
volatile uint8_t value; // Сюда верхний уровень пишет нужную яркость

static uint8_t value_cache;
static uint8_t mask;

interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
    mask <<= 1;
    if (mask == 0) {
        mask = 0x01;
        value_cache = value; // И никаких скачков
    }
    OCR2 += mask;
    if (value_cache & mask) {
        PORTD.0=1;
    } else {
        PORTD.0=0;
    }   
} 

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 15:38:04 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
phanis писал(а):
Вот что пишут по этому поводу на одном из форумов
Надо посоображать. Это не то, о чём я -- о смене кода value в середие периода, когда первая половина периода отработает по одному коду, а вторая по другому. От этого промежуточная переменная спасёт.
А от такого склеивания - надо подумать, будет оно (даже при промежуточной переменной) проявляться только при частотах на грани восприятия или всегда.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 20:56:27 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Там ведь не только при переходе с 0х7F на 0x80 (или с 0x80 на 0х7F) подобная ситуация встречается - просто это наиболее заметное явление - как один из способов борьбы программное предсказание ситуаций "склеивания" с подстановкой "правильного" значения - однако такой "фокус" избыточно усложняет код. 8)
По крайней мере мне это мерцание не понравилось :kill: - для фиксированного или ступенчато изменяемого уровня вполне пригодно, но для плавных переливов "не очень". :roll:
Да и коды я рисую на асме... :beer:


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Чт окт 25, 2012 21:45:20 
Встал на лапы

Зарегистрирован: Ср ноя 02, 2011 15:11:49
Сообщений: 95
Рейтинг сообщения: 0
avreal писал(а):
BOB51 писал(а):
А вот сооруди макетик ШИМ и BAM с частотой 50-60Гц для светиков и прокрути на том макетике плавный перебор уровня яркости - именно плавный перебор, а не фиксированное значение или прыжки уровня...
на макетике с BAM будут несанкционированные мерцания (то-ли погасанием, то-ли вспышкой)
Всего-то? Так это лечится одной дополнительной переменной (фрагмент кода из параллельного разговора по BAM в теме codevision).
Код:
volatile uint8_t value; // Сюда верхний уровень пишет нужную яркость

static uint8_t value_cache;
static uint8_t mask;

interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
    mask <<= 1;
    if (mask == 0) {
        mask = 0x01;
        value_cache = value; // И никаких скачков
    }
    OCR2 += mask;
    if (value_cache & mask) {
        PORTD.0=1;
    } else {
        PORTD.0=0;
    }   
} 

Как обьяснить то что этот код во втором таймере не пашет, получается что таймер не вовремя меняет счет, а если кинуть без переделок в первый то сразу работает ???


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 06:02:09 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Тогда это уже табличная предкоррекция данных для обработчика :)


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 07:32:14 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 9
Зарегистрирован: Пт июн 12, 2009 19:17:35
Сообщений: 487
Рейтинг сообщения: 0
Цитата:
:tea: Вот уж действительно БУМ рулит. более 200 шим по трем проводам.
вы хоть загляните в листинг компилятора - программно ШИМ проще и легче БАМа.
ШИМ - это один общий счетчик и одно сравнение на канал, для БАМа алгоритм посложнее, тем более заполнение у него далеко неравномерное.
если нужно равномерное - тогда уж Брезенхем.


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 09:35:35 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
" программно ШИМ проще и легче БАМа "
Неверное мнение! :)))
Не знаю, что там Сишшшные компиляторы выписивают, но с точки зрения ассемблера BAM реализуется если не на равных, то несколько проще, чем программный ШИМ - зато экономия времени для основной программы безспорна. :tea:
Единственное обязательное требование - 16-разрядный таймер (при ШИМ возможно применение 8-разрядного с предделителем). :beer:
Кстати, насчет программного ШИМ, да еще с некоторыми "прибамбасами" -
viewtopic.php?f=3&t=77399&start=60
download/file.php?id=119897
на 13-й тиньке 4 канала 256 градаций с мультиплексированием х4 и выборкой рисунка из ПЗУ (асинхронная картинка для каждого из каналов), но... бедная тинька на пределе возможностей... :cry:


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 10:21:21 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 9
Зарегистрирован: Пт июн 12, 2009 19:17:35
Сообщений: 487
Рейтинг сообщения: 0
Цитата:
Не знаю, что там Сишшшные компиляторы выписивают, но с точки зрения ассемблера BAM реализуется если не на равных
ошибаетесь. ШИМ - это инкремент счетчика и одно сравнение на канал. Для ВАМа алгоритм посложнее


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 11:46:57 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1506
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15522
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Для BAM всего лишь простой сдвиг данных в соответствующий бит порта (даже сравнение не требуется) :)))


Вернуться наверх
 
 Заголовок сообщения: Re: Программный ШИМ на AVR
СообщениеДобавлено: Пт окт 26, 2012 11:54:38 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 9
Зарегистрирован: Пт июн 12, 2009 19:17:35
Сообщений: 487
Рейтинг сообщения: 0
Цитата:
Для BAM всего лишь простой сдвиг данных в соответствующий бит порта (даже сравнение не требуется) :)))
на каких контроллерах возможен прямой сдвиг в бит порта, не подскажете ?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  

Часовой пояс: UTC + 3 часа


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y