Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на май 2024 г.
1. 1000 руб
Сайт Паяльник

Похожие статьи:


Реклама ⓘ

ШИМ-регулятор на микроконтроллере ATmega8515

В своей статье я хочу представить проект ШИМ-регулятор на микроконтроллере Atmega8515 (даташит PDF) для управления какой-либо нагрузкой.

Что же такое ШИМ? ШИМ - это широтно-импульсная модуляция, иначе говоря-управление средним значением напряжения на нагрузке путём изменения скважности импульсов, управляющих ключом.
Скважность — один из классификационных признаков импульсных систем, определяющий отношение его периода следования (повторения) к длительности импульса.

Чтобы все встало на свои места привожу поясняющую картинку.

Принцип ШИМ

В данном примере будем управлять яркостью светодиода(5-ти ступенчатая регулировка) с помощью двух тактовых кнопок(+/-).

Итак для сборки ШИМ нам понадобится:

1) Микроконтроллер ATmega8515.
2) Тактовая кнопка - 2шт;
3) Резистор на 4,7кОм - 2шт;
4) Резистор на 200 Ом-1шт;
5) Панелька под микросхему DIP40;
6) Любой светодиод-1шт;
7) Стабилизированный источник питания для МК на 3-5В.

Принципиальная схема устройства:

Схема

Это устройство может изменять скважность импульсов с помощью двух тактовых кнопок S3(+) и S4(-), соответственно будет изменяться яркость светодиода.

Исходный код программы написан в среде CodeVisionAvr   и представлен в конце статьи.

Небольшие комментарии к исходному коду:

В этой части кода мы прописываем обработчик внешнего прерывания(INT0/INT1).

interrupt [EXT_INT0] void ext_int0_isr(void)
{  
   i++;
   delay_ms(50);
}      
interrupt [EXT_INT1] void ext_int1_isr(void)
{  
   i--;
   delay_ms(50); 
}      

Настраиваем порты микроконтроллера, устанавливаем условие глобальных прерываний от INT0 и INT1, разрешаем глобальные прерывания.

MCUCR |= (0<<ISC01)|(0<<ISC00); //устанавливаем условие внешнего прерывания от INT0
GICR |= (1<<INT0);   
MCUCR |= (0<<ISC10)|(0<<ISC11); //устанавливаем условие внешнего прерывания от INT1
GICR |= (1<<INT1);
PORTB=0x00;//Все пины порта В в 0
DDRB=0xFF;  //Все пины Порта B на выход
PORTA.0=0x00;//пин порта A в 0
DDRA.0=0xFF;  //пин Порта A на выход
PORTC=0x00;//Все пины порта С в 0
DDRC=0xFF;  //Все пины Порта B на выход
PORTD.0=0x00;  //Все пины порта D в 0
DDRD.0=0xFF;  //Все пины Порта D на выход
TIMSK=0x00;
TCCR0=0x6B;//start timer
TCNT0=0x00;
OCR0=0x00;// задаем величину генерируемого ШИМ сигнала

#asm("sei")//разрешаем глобальные прерывания

Цикл,Оператор выбора из множества вариантов, регистром OCR0 настраивается скважность импульса (1-255).

 
while(1){
       switch(i){
       case 1:
       { 
         PORTC=0x06;    
         OCR0=50; 
           
         break;   
       }
........

Фото готового устройства:

DSCN6477.jpg

Схема безобразно проста и чтобы убедится в ее работоспособности устройство было собрано на обычной пластиковой обложке от какой-то папки.

Можно собрать ШИМ и на печатной плате (Плата нарисована в программе SprintLayout 5.0):

Плата

Несколько осциллограмм демонстрирующих изменение скважности импульсов с помощью двух тактовых кнопок::

   Значение регистра OCR0= 50    Значение регистра OCR0= 100

DSCN6481.jpgDSCN6482.jpg

   Значение регистра OCR0= 150    Значение регистра OCR0= 200

DSCN6483.jpgDSCN6484.jpg

   Значение регистра OCR0= 254

DSCN6485.jpg

Без изменения прошивки к микроконтроллеру можно подключить любой 7-ми сегментный индикатор с общим катодом, который будет отображать номер режима работы ШИМ-регулятора(от 1 до 5). Катод индикатора подключается на 39 ножку МК, а анод через токоограничительные   резисторы (100-250 Ом) на 21-27 ножки МК.

mc211_sch2.png

Фьюзы для прошивки выставлять не надо! Оставляем их стандартными.

Это устройство имеет широкое применение. Например его можно использовать для управления яркостью светодиодов, управлять оборотами вентилятора, применить для регулировки оборотов двигателя сверлильного станочка и т.п.

Более мощную нагрузку (вентилятор, большое кол-во светодиодов) необходимо подключать через транзистор.

Синусоидальный сигнал

А здесь будет приведен пример, как получить синусоидальный сигнал.

Схема  не представляет никаких трудностей т.к. здесь используется один микроконтроллер (Atmega8515) и низкочастотный фильтр (R1 и C1) через который мы пропускаем генерируемый сигнал и на выходе получаем постоянное напряжение.

Схема

В данном случае получается синус с частотой 35 Гц.

Частоту синуса можно высчитать по следующей формуле:

Fs = Fckl/(256 * N * M)

Fs=8000000/(256 * 8 * 112)=34.8 Гц.
где Fclk - тактовая частота микроконтроллера, N - коэффициент деления предделителя, M - число отсчетов сигнала.

Прошивка писалась в среде CodeVisionAvr, исходники прилагаются в конце статьи.

Для построение синуса была написана библиотека, в которой прописан константный массив, содержащий значения синуса.

Осциллограмма

Прикрепленные файлы:

Теги:

Опубликована: 21.05.2013 Изменена: 22.05.2013 0 0
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3.8 Проголосовало: 2 чел.

Комментарии (8) | Я собрал (0) | Подписаться

-4
Александр #
R1 увеличить хотя бы до 470 Ом и желательно закон Ома выучить
Ответить
0

[Автор]
Radiotehnika S-90 #
Здесь указано среднее значение, если быть точным, то необходимо считать под конкретный индикатор/светодиод.
Ответить
0

[Автор]
Radiotehnika S-90 #
4В/20мА = 200 Ом
Ответить
-2
Evgeniy #
20 мА верю, а почему напряжение 4 В? Питать от 3 батареек считаю не правильным (т.к. напряжение будет гулять при разрядке батареек, к тому же на аккумуляторах вообще 1.2 В будет - питание всего 3.6 В будет). Правильнее взять батареек вольт на 7 и стабилизатор на 5 В для МК.
По расчетам получается 250 Ом для 20 мА, но это, на сколько я помню, максимальное значение для светодиода. Следовательно он проработает не очень долго. А если еще собрать эту схему с нормальным источником на 5В и поставить резистор на 200 Ом то будет ток 25 мА, что уже очень много...
Ответить
0
Rhime #
Сидят тут двое считают не понятно что. Допустим, что падение напряжения на светодиоде 1.8В, тогда 4-1.8=2.2, отсюда 2.2/0.02=110 Ом. У желтого светодиода падение напряжения выше где-то порядка 2-2.5В. Считаем 4-2=2
2/0.02=100 Ом. Подсчитаем для 5-ти Вольт 5-1.8=3.2
3.2/0.02=160 Ом. Так что 200 Ом тут за глаза...
Ответить
0
Big_D #
Блин я не понял: так куда тыкать вентилятор? На какие выводы микросхемы?
Ответить
0
Дмитрий #
Что за коэффициент деления "N"? И что является предделителем?
Ответить
0
Дмитрий #
И можно ли изменять частоту синусоиды?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
МиниПК MK809V - 4 ядра, Android 4.4.2 Макетная плата для пайки (10 шт)
вверх