Обороты мотора в зависимости от напряжения.

black82
Offline
Зарегистрирован: 07.02.2017

Здравствуйте .

4 -5ч гугол, но так и не смог найти пример. 

Помогите, подскажите пожалуйста кодом :

 

Бессколекторный мотор, подключён регулятор, 

Arduino генератор ШИМа.

Задача в том что бы в завимости от входного напряжения с блока питания (0-24вольта) изменялся ШИМ и тем менялись обороты. 

 

Как это реализовать практически не могу понять. 

Предполагаю что нужно мерить напряжение на входе (воолтметр/analogRead)

переводить его в переменную.

После переменной менять частоту ШИМа.

 

Еще загвоздка в том что напряжение может быть до 24 вольт(мотор не утвержден, модельный, коптер) и тогда как-то резисторами его гасить.

 

Помогите пожалуста кодом/наметками кода.

Сам пока нашёл ток код замера уровня заряда на батарейках и код ШИМ с постоянной частотой или от потенциометра включенного в arduino.

 

Заранее большое спасибо, всем откликнувшимся!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

параметры делителя. резистор VCC это верхний, второй нижний

мотор бк, значит драйвер скорее всего с управлением ppm. значит бери библиотеку servo (одинаковые сигналы управления) и функцию map, но не через градусы, а микросекунды (для servo). так будет точнее. но для начала можешь и в градусах. может так понятнее будет

ну если совсем непонятно пример knob к библиотеке серво

/* 
 Controlling a servo position using a potentiometer (variable resistor) 
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Knob
*/

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
void loop() 
{ 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
} 

нужно только делитель поставить

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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