цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Используем STM32 для управления серводвигателем с помощью ШИМ

Используем STM32 для управления серводвигателем с помощью ШИМ

Автор: Mike(admin) от 13-12-2019, 08:35

Широтно-импульсная модуляция (ШИМ) используется для управления амплитудой цифровых сигналов с целью управления устройствами и приложениями. В этом уроке мы узнаем, как генерировать переменный сигнал ШИМ с помощью микроконтроллера серии STM32 (STM32F103C). Переменный сигнал ШИМ используется для управления скоростью двигателей или вентиляторов постоянного тока. Этот подход также используется в устройствах диммирования. Солнечные зарядные устройства также работают с переменным сигналом ШИМ. Угол и направление серводвигателей также контролируются с помощью сигнала ШИМ.


Используем STM32 для управления серводвигателем с помощью ШИМ

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


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


ШИМ характеризуется скважностью или коэффициентом заполнения. Скважность измеряется в процентах. Коэффициент заполнения в процентах конкретно описывает процент времени, в течение которого цифровой сигнал высокий в течение интервала или периода времени. Этот период обратно пропорционален частоте сигнала. Если цифровой сигнал заполняет половину времени всего периода, мы бы сказали, что цифровой сигнал имеет коэффициент заполнения 50% и напоминает идеальный меандр. Если процент выше 50%, цифровой сигнал тратит больше времени в высоком состоянии, чем в низком, и наоборот, если коэффициент составляет менее 50%. Смотрите рисунок ниже для полного понимания.


Используем STM32 для управления серводвигателем с помощью ШИМ

Микроконтроллер STM32F103C имеет 15 выводов ШИМ и 10 выводов АЦП. Он имеет 7 таймеров, и каждый выход ШИМ обеспечивается каналом, подключенным к 4 таймерам. Он имеет 16-битное разрешение ШИМ, т.е. 2 в степени 16. Из-за этого его счетчики и переменные могут достигать значения 65535. Поскольку он имеет тактовую частоту 72 МГц, его выход ШИМ может иметь максимальный период около одной миллисекунды.


Значение 65535 дает полное вращение сервомотора (скважность 100%). Значение 32767 дает половину поворота (скважность 50%). Значение 13107 дает 20% от полного вращения (скважность 20%).


Используем STM32 для управления серводвигателем с помощью ШИМ

Таким образом, в этом руководстве по ШИМ мы будем использовать потенциометр 100 КОм и STM32, чтобы изменять угол поворота серводвигателя SG90 с использованием метода ШИМ. ЖК-дисплей 16 × 2 используется для отображения угла поворота в градусах. Принципиальная схема подключения представлена далее.


Используем STM32 для управления серводвигателем с помощью ШИМ

В STM32F103C имеется 10 выводов АЦП (PA0-PB1), и мы будем использовать только один вывод (PA5) для аналогового считывания для установки положения вала двигателя с помощью потенциометра. Также из 15 выводов ШИМ STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), один вывод PA0 будет использоваться для подачи импульсов на ШИМ-контакт сервопривода. ЖК-дисплей 16 × 2 подключен к STM32 со следующими контактами: rs = PB11, en = PB10, d4 = PA4, d5 = PA3, d6 = PA2, d7 = PA1. К нему подключен потенциометр 10К для регулировки контрастности.


Используем STM32 для управления серводвигателем с помощью ШИМ

Код программы управления сервомотором с помощью ШИМ микроконтроллера STM32 написан на C-подобном языке Arduino и приведен далее. Посмотрите в другом нашем материале, как запрограммировать STM32 с помощью Arduino IDE.



#include<Servo.h>                                                          // включаем библиотеку сервомотора
#include<LiquidCrystal.h>                                               // включаем библиотеку ЖК-дисплея
const int rs = PB11, en = PB10, d4 = PA4, d5 = PA3, d6 = PA2, d7 = PA1;   // объявление имен выводов и номеров выводов ЖК-дисплея
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);                               // настройка ЖК-дисплея и его параметров
int servoPin = PA0;                                // объявить и инициализировать вывод для серво выхода ШИМ
int potPin = PA5;                                     // вход АЦП для потенциометра
Servo servo;                                            // создание переменной servo с типом данных Servo
void setup()                            
{ 
  lcd.begin(16,2);                                                         
  lcd.setCursor(2,0);                                                        
  lcd.print("PWM Tutorial");                                               
  lcd.setCursor(3,1);                                                       
  lcd.print("Using Servo");                                           
delay(3000);                                                            
  lcd.clear();                                                              
  servo.attach(servoPin);   // это соединяет вывод PA0 с двигателем в качестве обратной связи управления, обеспечивая импульсы
}
void loop()
{
 lcd.clear();                                                                 // очищает жк
int angle;                                                                   // объявить переменную угла как int
int reading;                                                                 // объявить переменную чтения как int
 reading = analogRead(potPin);                                                // считать аналоговое значение с контакта PA3
 angle = (reading/24);                                                        // делит значение АЦП по максимальному углу 170 градусов
 servo.write(angle);                                                          // значение угла в сервопривод
 lcd.setCursor(0,0);                                                          // установка курсора на первый ряд и первый столбец
 lcd.print("Angle:");                                                         // помещает угол в ЖК
 lcd.print(angle);                                                            
delay(100);                                                                
} 



© digitrode.ru


Теги: STM32, сервомотор, ШИМ




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий