- Що таке ШІМ-сигнал?
- Як перетворити ШІМ-сигнал в аналогову напругу?
- Кругова діаграма:
- Програмування MSP для ШІМ-сигналу:
- Керування яскравістю світлодіода за допомогою ШІМ:
Цей підручник є частиною серії підручників з MSP430G2 LaunchPad, в яких ми вчимося використовувати MSP430G2 LaunchPad від Texas Instruments. Наразі ми вивчили основи плати та розглянули способи зчитування аналогової напруги, інтерфейсу РК-дисплея з MSP430G2 тощо. Тепер ми переходимо до наступного етапу вивчення ШІМ у MSP430G2. Ми зробимо це, керуючи яскравістю світлодіода, змінюючи потенціометр. Отже, потенціометр буде приєднаний до аналогового штифта MSP430 для зчитування його аналогової напруги, отже, рекомендується знати, перш ніж продовжувати, пройти підручник з АЦП.
Що таке ШІМ-сигнал?
Широтно-імпульсна модуляція (ШІМ) - це цифровий сигнал, який найчастіше використовується в схемі управління. Цей сигнал встановлюється високим (3,3 в) і низьким (0 в) заздалегідь визначеним часом і швидкістю. Час, протягом якого сигнал залишається високим, називається “вчасно”, а час, протягом якого сигнал залишається низьким, називається “часом вимкнення”. Існує два важливі параметри ШІМ, про які йдеться нижче:
Робочий цикл ШІМ:
Відсоток часу, протягом якого сигнал ШІМ залишається ВИСОКИМ (у часі), називається робочим циклом. Якщо сигнал завжди ввімкнений, він знаходиться у 100% робочому циклі, а якщо він завжди вимкнений, це 0% робочого циклу.
Цикл роботи = час включення / (час включення + час вимкнення)
Частота ШІМ:
Частота ШІМ-сигналу визначає, наскільки швидко ШІМ завершує один період. Один Період завершено УВІМКНЕННЯ та ВИМКНЕННЯ сигналу ШІМ, як показано на малюнку вище. У нашому навчальному посібнику частота становить 500 Гц, оскільки це значення за замовчуванням, встановлене Energia IDE.
Існує безліч програм для ШІМ-сигналів в режимі реального часу, але, щоб дати Вам уявлення, ШІМ-сигнал може використовуватися для управління сервомоторами, а також може бути перетворений в Аналогову напругу, яка може регулювати яскравість яскравості світлодіода. Давайте дізнаємось трохи про те, як це можна зробити.
Ось кілька прикладів ШІМ з іншими мікроконтролерами:
- Генерування ШІМ за допомогою мікроконтролера PIC з MPLAB та XC8
- Серводвигун з Raspberry Pi
- Світлодіодний диммер на основі Arduino з використанням ШІМ
Перевірте всі проекти, пов’язані з ШІМ, тут.
Як перетворити ШІМ-сигнал в аналогову напругу?
Для ШІМ-сигналів на аналогову напругу ми можемо використовувати схему, яка називається RC-фільтром. Це проста і найбільш часто використовувана схема для цієї мети. Схема просто включає резистор і конденсатор послідовно, як показано в схемі нижче.
Отже, в основному тут відбувається те, що коли сигнал ШІМ високий, конденсатор заряджається через резистор, а коли ШІМ-сигнал падає, конденсатор розряджається через накопичений заряд. Таким чином, ми завжди матимемо постійну напругу на виході, яка буде пропорційна робочому циклу ШІМ.
На графіку, показаному вище, жовтий колір - це ШІМ-сигнал, а синій - вихідна аналогова напруга. Як бачите, вихідна хвиля не буде чистою хвилею постійного струму, але вона повинна дуже добре працювати для нашого додатку. Якщо вам потрібна чиста хвиля постійного струму для інших типів програм, вам слід розробити схему комутації.
Кругова діаграма:
Принципова схема досить проста; він просто має потенціометр і резистор і конденсатор, щоб сформувати RC-ланцюг і сам світлодіод. Потенціометр використовується для забезпечення аналогової напруги, на основі якої може управлятися робочим циклом сигналу ШІМ. Вихід бака підключений до виводу P1.0, який може зчитувати аналогові напруги. Потім ми повинні створити ШІМ-сигнал, що можна зробити за допомогою виводу Р1.2, цей ШІМ-сигнал потім надсилається в схему RC-фільтра для перетворення ШІМ-сигналу в аналогову напругу, яка потім подається на світлодіод.
Дуже важливо розуміти, що не всі контакти на платі MSP можуть зчитувати аналогову напругу або можуть генерувати ШІМ-висновки. Конкретні шпильки, які можуть виконувати конкретні завдання, показані на малюнку нижче. Завжди використовуйте це як вказівку, щоб вибрати шпильки для програмування.
Зберіть всю схему, як показано вище, ви можете використовувати макетну дошку і кілька дротових перемичок і легко встановити з'єднання. Після підключення моя плата виглядала так, як показано нижче.
Програмування MSP для ШІМ-сигналу:
Коли обладнання буде готове, ми можемо розпочати з нашого програмування. Перше, що є в програмі, - це оголосити шпильки, які ми збираємось використовувати. Тут ми будемо використовувати вивід номер 4 (P1.2) як наш вихідний вивід, оскільки він має можливість генерувати ШІМ. Отже, ми створюємо змінну і присвоюємо ім’я контакту, щоб потім було легко на нього посилатися. Повна програма подана в кінці.
int PWMpin = 4; // Ми використовуємо 4-й вивід на модулі MSP як ШІМ-висновок
Далі ми переходимо до функції налаштування . Незалежно від написаного тут коду буде виконано лише один раз, тут ми заявляємо, що використовуємо цей 4- й висновок як вихідний висновок, оскільки ШІМ є функцією виводу. Зверніть увагу, що ми використовували тут змінну PWMpin замість цифри 4, щоб код виглядав більш значущим
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin встановлюється як Outptut }
Нарешті, ми отримуємо в петлевий функції. Що б ми не писали тут, воно виконується знову і знову. У цій програмі ми повинні зчитувати аналогову напругу і відповідно генерувати ШІМ-сигнал, і це повинно відбуватися знову і знову. Отже, спершу почнемо з читання аналогової напруги з виводу A0, оскільки ми підключили до нього потенціометр.
Тут ми читаємо значення за допомогою функції AanalogRead , ця функція поверне значення від 0-1024 на основі значення напруги, прикладеної до виводу. Потім ми зберігаємо це значення у змінну, яка називається “val”, як показано нижче
int val = analogRead (A0); // зчитування значення АЦП з виводу A0
Ми повинні перетворити значення 0 до 1024 з АЦП у значення від 0 до 255, щоб передати його функції ШІМ. Чому ми повинні це перетворити? Я скажу це незабаром, але поки що пам’ятайте, що ми повинні перетворити. Для перетворення одного набору значень на інший набір значень Енергії має карту функцію, аналогічну Arduino. Отже, ми перетворюємо значення 0-1204 в 0-255 і зберігаємо їх назад у змінній “val”.
val = карта (val , 0, 1023, 0, 255); // АЦП дасть значення 0-1023, перетворить його на 0-255
Тепер ми маємо значення змінної 0-255 залежно від положення потенціометра. Все, що нам потрібно зробити, це використовувати це значення на ШІМ-штифті, це можна зробити за допомогою наступного рядка.
analogWrite (PWMpin, val); // Запишіть це значення на ШІМ-штифт.
Повернемося до питання, чому 0-255 записується на ШІМ-штифт. Це значення 0-255 визначає робочий цикл ШІМ-сигналу. Наприклад, якщо значення сигналу дорівнює 0, то це означає, що робочий цикл дорівнює 0%, для 127 це 50%, а для 255 це 100%, як і те, що показано і пояснено вгорі цієї статті.
Керування яскравістю світлодіода за допомогою ШІМ:
Після того, як ви зрозуміли обладнання та код, настав час трохи розважитися з роботою схеми. Завантажте код на плату MSP430G2 і поверніть ручку потенціометра. Коли ви повертаєте ручку, напруга на виводі 2 буде змінюватися, що буде зчитуватися мікроконтролером, і відповідно до напруги сигнали ШІМ будуть генеруватися на виводі 4. Чим більше напруга, тим більше буде робочий цикл і навпаки.
Потім цей ШІМ-сигнал перетворюється в аналогову напругу, щоб світитися світлодіодом. Яскравість світлодіодів прямо пропорційна скважности сигналу ШІМ. Окрім світлодіодного індикатора на макеті, ви також можете помітити індикатор smd (червоний колір), що змінює свою яскравість, подібно до світлодіодної панелі. Цей світлодіод також підключений до того ж контакту, але у нього немає мережі RC, тому він насправді блимає дуже швидко. Ви можете струсити дошку в темній кімнаті, щоб перевірити її мерехтливий характер. Повну роботу також можна побачити на відео нижче.
Наразі це все, ми дізналися, як використовувати ШІМ-сигнали на платі MSP430G2, у нашому наступному уроці ми дізнаємося, як легко управляти сервомотором, використовуючи ті самі ШІМ-сигнали. Якщо у вас є якісь сумніви, розмістіть їх у розділі коментарів нижче або на форумах для отримання технічної допомоги.