Регулируем скорость вращения двигателя с помощью ШИМ(PWM) на ATtiny2313

Реализация регулировки скорости вращения двигателя довольно не сложная. Для этого необходимо знать что такое Широтно Импульсная Модуляция (ШИМ по английски PWM), иметь понятие о возможных вариантах её реализации.

В данном примере я расскажу как использовать программную ШИМ, то есть специальные таймеры-счетчики при программной ШИМ не будут задействованы. ШИМ с применением аппаратного ресурса таймеров-счетчиков называется аппаратной ШИМ про нее хорошо рассказал мой коллега.

И так, алгоритм следующий, необходимо организовать уменьшение и увеличение заполненности импульсов, при нажатии на кнопки "+" и соответственно "-". Подпрограммы уменьшения и увеличения скорости вращения будет включаться двумя кнопками, которые в свою очередь будут присоединены к прерываниям int0 и int1. Такое решение в связи с тем что управляющих кнопок больше не будет, а значит прерывания просто грех не использовать. Соответственно скорость будет увеличиваться или уменьшаться в зависимости от заполненности импульсов коммутирующих силовую схему управления двигателем.

Схема устройства представляет из себя следующее:
схема регулятора скорости мотора
Используется только один полевой транзистор из сборки.

В основном цикле программы будет сама непосредственно программа реализации программной ШИМ.

  1. //Подключаем стандартные библиотеки необходимые для работы
  2. #include <avr/io.h>//библиотека ввода/вывода
  3. #include <avr/interrupt.h>//библиотека прерываний
  4.  
  5. #define nop() {asm("nop");}//функция позаимствованная из ассемблера "nop"
  6.  
  7. //перечисление переменных
  8. unsigned int i=1;//переменная для ШИМ
  9. unsigned int p;//переменная для ШИМ
  10. unsigned int pp=50;//переменная для ШИМ скорость нарастания напряжения
  11. unsigned int ms;//переменная для задержки
  12. unsigned int x;//переменная для задержки
  13.  
  14. //Попрограммы обработки прерываний
  15. SIGNAL(SIG_INTERRUPT0)//обработка прерываний кнопки "+"
  16. {pp=pp+1;} //увеличение при нажатии на кнопку "+" на 1
  17.  
  18. SIGNAL(SIG_INTERRUPT1)//обработка прерываний кнопки "-"
  19. {pp=pp-1;} //уменьшение при нажатии на кнопку "-" на 1
  20.  
  21. //функция задержки
  22. void delay_ms(int ms)
  23. {for (x=ms;x>0;x--) nop (); }
  24.  
  25. //Функция включения бита 0 порта B
  26. void ledon(int ms)
  27. { PORTB = 0x01; delay_ms(ms); }
  28.  
  29. //Функция выключения бита 0 порта B
  30. void ledoff(int ms)
  31. { PORTB = 0x00; delay_ms(ms); }
  32.  
  33. //Основная программа
  34. int main( void )
  35. {
  36. DDRB=0x01;//конфигурирование порта B на выход
  37.  
  38. GIMSK=0b11000000; //разрешаем прерывание int0 и int1
  39. MCUCR=0b00001111;// прерывание по возрастающему фронту - для кнопки 1 и 2
  40.  
  41. sei();//разрешаем прерывания
  42.  
  43. for (;;)//бесконечный цикл
  44. { p=pp-i;//реализация
  45. ledon(p);//программного
  46. ledoff(i);//ШИМ
  47. }
  48. }

Вывод 12 микроконтроллера AtTiny2313 необходимо соединить с силовой схемой. Силовую схему для управления двигателем предлагаю построить на сборке из двух полевых транзисторов IRF7105. Довольно дешевая, компактная и доступная в продаже сборка. Преимущество применения именно полевых транзисторов в том что на них практически нету падения напряжения, и собственно они за счет этого не греются. Небольшим недостатком является напряжение открытия полевых транзисторов этой сборки оно составляет по паспорту 5В, но экспериментально проверено что оно порядка 4В.

А это значит что мы будем иметь довольно узкий диапазон изменения скорости вращения двигателя от 4В до 5В. В принципе можно использовать любую другую схему для управления мощной нагрузкой, применение такой схемы обусловлено маленькой мощностью портов микроконтроллера ATTiny2313 да и вообще всех микроконтроллеров семейства AVR. Что бы не сжечь порты микроконтроллера как-раз и применяется силовая схема управления нагрузкой а в данном случаи коллекторным двигателем.
Регулятор скорости в сборе
На фотографии:
- макетная плата для attiny2313;
- сборка IRF7105 на полевых транзисторах;
- маломощный коллекторный двигатель.

Видео работы регулятора:

С регистрацией получилось,

С регистрацией получилось, спасибо! по поводу данной темы: я начинающий в данной технологии и программировании.. только изучаю как все это работает.. :(

Так а сайт для этого и

Так а сайт для этого и задумывался. Просто в интернете нету реально нормального сайта, на котором были бы статьи по работе микроконтроллера и различной периферии, что бы программы все были на одном языке (а не так как у некоторых, наворовали статей с разных сайов, код программ то на Си, то на Си для WinAVR то на CV AVR, то на бэйсике, то на Си++). Короче говоря читайте и задавайте вопросы.