Re: Н-Мост на MOSFET+Arduino
Извиняюсь за такое обяснение... Вот последний рабочий скетч. На данный момент средний уровень устанавливается нажатием кнопки CentrSet (когда D12==HIGH) хотелось бы реализовать это автаматически. Тоесть при включении arduino выполнялась одноразовая команда "записать длинну сигнала в переменную centr
PHP код:
#include <TimerOne.h>
#define BTNPIN 2 // Вход сигнала
#define SET 12 // Кнопка CentrSet
#define L 5 // Выход на H-Мост вращение в лево
#define R 6 // Выход на H-Мост вращение в право
int centr = 150; //значение по умолчанию пока не будет нажата кнопка CentrSet
volatile uint16_t lengthImpuls, timerCount;
void setup()
{
/* LOW — вызов прерывания всякий раз,
когда на порту низкий уровень напряжения;
CHANGE – прерывание вызывается при изменении
значения на входе;
RISING – вызов прерывания при изменении уровня
напряжения с низкого (LOW) на высокое(HIGH)
FALLING – вызов прерывания при изменении уровня
напряжения с высокого (HIGH) на низкое (LOW)*/
lengthImpuls=0;
pinMode (BTNPIN, INPUT);
pinMode (SET, INPUT);
pinMode (L, OUTPUT);
pinMode (R, OUTPUT);
analogWrite (L, 0);
analogWrite (R, 0);
Timer1.initialize(10);
Timer1.attachInterrupt(callback);
attachInterrupt(0, fireUp, RISING);
}
void callback() { timerCount++; }
void loop()
{
uint16_t li = lengthImpuls;
if (li > (centr-50) && li < (centr+50))
{
if (li > (centr+1)) {analogWrite (R, (li-centr)*5); analogWrite (L, 0);}
else if (li > (centr+45)) {analogWrite (R, 255); analogWrite (L, 0);}
if (li < (centr-1)) {analogWrite (L, (centr-li)*5); analogWrite (R, 0);}
else if (li < (centr-45)) {analogWrite (L, 255); analogWrite (R, 0);}
if (li > (centr-1) && li < (centr+1)) {analogWrite (L, 0); analogWrite (R, 0);}
if (digitalRead (12)== HIGH) {centr = li;}
}
}
// Функция обработки прерывания на подъем
void fireUp()
{
timerCount=0;
detachInterrupt(0);
attachInterrupt(0, fireDown, FALLING);
}
// Функция обработки прерывания на падение
void fireDown()
{
lengthImpuls = timerCount;
detachInterrupt(0);
attachInterrupt(0, fireUp, RISING);
}
Re: Н-Мост на MOSFET+Arduino
В теле void setup() сделай маленькую паузу и опроси начальное положение, заноси в переменную centr = li; и все.
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Mastar
В теле void setup() сделай маленькую паузу и опроси начальное положение, заноси в переменную centr = li; и все.
Не все так просто, на момент выполнения void setup() переменные lengthImpuls, timerCount пусты. Так как обработка прерываний и запись длинны сигнала в них обрабатываются в void fireUp() и void fireDown() Думаю что надо в теле void setup() прописать одноразовую обработку прерываний, либо прописать выполнение fireUp() и void fireDown() затем запись в переменную типа uint16_t а уже с нее брать значение в переменную centr, и все это в теле void setup()
Re: Н-Мост на MOSFET+Arduino
Я все равно доконца не понимаю как это должно работать.
Опиши подробно проект что должен делать контроллер
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Chip
Я все равно доконца не понимаю как это должно работать.
Опиши подробно проект что должен делать контроллер
Собираю свой блок управления моторами для RC модели типа вот такова. Мой блок предназначается для моделей полевой техники. трактаров, экскаваторов, танков... Там где нужно много моторов. Например Актуальная модель К700 2 моста и рулевая и того уже 3 блока управления моторами. Я хочу собрать 1 для 2х моторов. Хотел больше но ресурсов atmegi 168 и 328 маловато изза ограниченных возможностей обработки внешнх прерываний и числа выходов ШИМ. Более навороченную Atmegu например 1280 ставить не бюджетно... В планах создание полностю своего девайса на базе 168й атмеги с разведением платы и всем что к этому относится.
Что касается конкретной задачи с оприделением среднего сгнала, то в планах реализовать чтоб блок сам при включении захватил средний сигнал и от него так сказать плясал. Нужно это для банального удобства чтоб при включении модель не дергалась если подстроечный рычаг на пульту случайно сдвинулся на несколько шагов от середины. Большенство производителей решают это тупо установкой мертвой зоны на шагов 10 в каждую сторону. В следствии чего теряется чувствительность руля и моторы работают не на полную мощность в максимальном положении рычага управления.
Re: Н-Мост на MOSFET+Arduino
А если прописать средний сигнал в энергонезависимую память?
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Chip
А если прописать средний сигнал в энергонезависимую память?
Я так понял имеется ввиду EEPROM? можно и так, только я не знаю как это сделать, и сигнал должен перезаписываться каждый раз когда включается модель, не знаю как это отразится на EEPROM, запись в него ведь ограниченна, кажется 10000 раз. Например выключил модель, положил пульт, рычажок сдвинулся немного и при следующем включении блок сам скоректировал среднее положение.
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
XsanderS
Собираю свой блок управления моторами для RC модели типа вот
такова.
Так, минуточку. Этот регулятор без реверса, а имеет только вращение в одну сторону и тормоз, который можно отключить перемычкой.
Самое прикольное, что то о чем Вы просите, в этом регуляторе уже есть. При включении питания, он считывает положение стика и принимает его как нулевое значение.
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Mastar
Так, минуточку. Этот регулятор без реверса, а имеет только вращение в одну сторону и тормоз, который можно отключить перемычкой.
Самое прикольное, что то о чем Вы просите, в этом регуляторе уже есть. При включении питания, он считывает положение стика и принимает его как нулевое значение.
Я просто привел его как пример чтобы было понятно о чем речь. Конечно такие регуляторы как брушлес и остальные солидные марки уже имеют эту функцию... Я собираю так сказать регулятор на 2 мотора с вращением в обе стороны. когда это будет работать нормально, буду расширять блок наример поворотники, стоп сигналы, мигалки и тому подобное.
Re: Н-Мост на MOSFET+Arduino
Так а зачем заморачиваться на изобретение велосипеда? Просто берете готовое изделие со всеми нужными функциями, есть и с реверсом для коллекторников, только в поиске нужно набирать брашед(Brushed Speed Controller) например такой, а на счет варианта включения по одному каналу разных дискретных каналов, то можно такой вариант на 7 ключей по выходу.
Хотя можно через ардуину это задействовать, но смысла не вижу.