В этом проекте мы рассмотрим управление направлением и скоростью вращения электродвигателя постоянного тока (24v) с помощью платы Arduino, двух реле и MOSFET транзистора. Никаких переключателей питания для этого проекта не потребуется, будут нужны две обычные кнопки и потенциометр для управления направлением и скоростью вращения двигателя. При нажатии одной из кнопок двигатель будет вращаться по часовой стрелке, а при нажатии другой – против часовой стрелки. MOSFET транзистор с каналом n-типа необходим для управления скоростью вращения двигателя. Реле используются для переключения направления вращения двигателя. В данном случае они похожи на мост H-типа.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Два реле на 12v (реле на 5v тоже могут быть использованы).
- Два транзистора BC547 (купить на AliExpress).
- Две кнопки.
- IRF540N.
- Резистор 10 кОм (купить на AliExpress).
- Источник питания на 24 В.
- Потенциометр 10 кОм (купить на AliExpress).
- Три диода 1N4007 (купить на AliExpress).
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Работа схемы
Схема устройства представлена на следующем рисунке.
В схеме необходимо сделать следующие соединения:
- подсоединить нормально замкнутые выводы обоих реле к положительному выводу батареи;
- подсоединить нормально разомкнутые выводы обоих реле к стоку MOSFET транзистора;
- подсоединить исток MOSFET транзистора к отрицательному выводу батареи и к земле платы Arduino UNO;
- затвор MOSFET транзистора подключить к контакту 6 платы Arduino (на этом контакте возможно формирование ШИМ сигнала);
- подсоединить резистор 10 кОм между затвором и истоком MOSFET транзистора, а также подсоединить диод 1N4007 между истоком и стоком MOSFET транзистора;
- подсоединить двигатель между средними выводами реле;
- один из оставшихся выводов реле (для каждого реле) подключить к контакту Vin платы Arduino, а другой – к коллектору транзистора;
- подсоединить эмиттеры обоих транзисторов к контакту GND (земля) платы Arduino;
- контакты 2 и 3 платы Arduino подключить к кнопкам, вторые концы кнопок подключить к базе транзисторов;
- подключить диоды параллельно выводам реле как показано на схеме;
- оконечные контакты потенциометра подсоединить к контактам 5v и Gnd платы Arduino, а средний контакт потенциометра – к контакту A0.
Если батареи на 24 В у вас нет, то можно последовательно соединить две батареи на 12 В.
Функции транзисторов
Цифровые контакты платы Arduino не могут обеспечить достаточный ток для срабатывания реле на 5v. К тому же мы используем реле на 12v. Контакт Vin платы Arduino не может обеспечить достаточный ток для обоих реле. Поэтому транзисторы используются для "доставки" тока от контакта Vin платы Arduino к реле. Транзисторы управляются с помощью кнопок, один вывод которых подключен к их базе, а другой – к цифровому контакту платы Arduino
Функции платы Arduino
- обеспечить ток, необходимый для срабатывания реле;
- управлять транзистором;
- управлять скоростью вращения электродвигателя постоянного тока с помощью потенциометра.
Функции MOSFET
MOSFET транзистор используется для управления скоростью вращения двигателя. Он включается и выключается (открывается и закрывается) с высокой частотой, поэтому и двигатель, соединённый последовательно со стоком MOSFET, управляется данной ШИМ (широтно-импульсной модуляцией). Чем больше коэффициент заполнения ШИМ, тем выше скорость вращения двигателя. Более подробно о подобном механизме управления с помощью ШИМ и MOSFET транзистора можно прочитать в статье про понижающий преобразователь напряжения постоянного тока на Arduino.
Расчеты тока
- сопротивление катушки реле, измеренное нами с помощью мультиметра, составило примерно 400 Ом;
- контакт Vin платы Arduino обеспечивает 12v;
- поэтому получаем ток, необходимый для переключения реле равный 12/400 = 30 mA;
- если энергия подается на оба реле, то получаем ток 30*2=60 mA;
- контакт Vin платы Arduino рассчитан на максимальный ток 200mA, поэтому проблем с обеспечением тока возникнуть не должно.
Работа проекта
На контакты 2 и 3 платы Arduino постоянно подается напряжение высокого уровня.
Когда ни одна из кнопок не нажата
В этом случае на базы транзисторов не подается открывающего напряжения, следовательно транзисторы закрыты – поэтому на катушки реле не подается ток от контакта Vin платы Arduino.
Когда одна кнопка нажата
В этом случае на базу транзистора с цифрового контакта платы Arduino поступает открывающее напряжение и транзистор открывается. Теперь ток от контакта Vin поступает на катушку реле, что приводит к переключению реле (RELAY A) в положение NO (нормально разомкнуто). В это время другое реле (RELAY B) остается в положении NC (нормально замкнуто). Поэтому ток начинает протекать от положительного вывода батареи к ее отрицательному выводу через двигатель, то есть ток течет от relay A к relay B. Это приводит к вращению двигателя по часовой стрелке.
Когда другая кнопка нажата
Теперь ток подается уже на другое реле - RELAY B. Этот ток переключает реле в положение NO. В это время другое реле (RELAY A) находится в положении NC. Поэтому ток начинает протекать от положительного вывода батареи к ее отрицательному выводу через двигатель. Но в этой ситуации ток течет уже от relay B к relay A, что приводит к вращению двигателя против часовой стрелки.
Когда обе кнопки нажаты
В этой ситуации оба транзистора открыты, что приводит к тому что оба реле находятся в положении NO, поэтому в этой ситуации ток уже не протекает от положительного вывода батареи к ее отрицательному выводу через двигатель, поэтому двигатель не вращается.
Управление скоростью вращения двигателя
Затвор MOSFET транзистора подключен к ШИМ контакту 6 платы Arduino UNO. Под действием ШИМ на этом контакте Mosfet транзистор включается и выключается (открывается и закрывается) с высокой частотой, а поскольку двигатель соединен последовательно со стоком mosfet, значение коэффициента заполнения ШИМ оказывает непосредственное влияние на скорость вращения двигателя. А значение коэффициента заполнения ШИМ управляется с помощью потенциометра – вращение его оси приводит к изменению напряжения на контакте A0, следовательно изменяется значение на выходе АЦП (аналогово-цифрового преобразователя) данного контакта (более подробно об АЦП в Arduino). Arduino считывает значение с выхода этого АЦП и в соответствии с ним изменяет коэффициент заполнения ШИМ на контакте 6.
Исходный код программы
Код программы для рассмотренного двунаправленного двигателя постоянного тока с изменяемой скоростью вращения достаточно простой. Я думаю, он не вызовет у вас никаких затруднений.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
int x; int y; void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(6,OUTPUT); pinMode(A0,INPUT); } void loop() { x=analogRead(A0); y=map(x,0,1023,0,255); analogWrite(6,y); digitalWrite(2,HIGH); digitalWrite(3,HIGH); } |
А не проще реверс, ШИМ и даже торможение обеспечить подключением двигателя через мост???
Добрый вечер. Возможно и проще - не очень хорошо разбираюсь в этой тематике. Но сейчас MOSFET как то очень сильно популярны, возможно, поэтому он и был применен в этом проекте