Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Chip
Управлять то получилось?
Не совсем :( подправил окно со скетчем по последним изменениям, ну вот собственно и описание эксперемента:
Повторюсь что бы было понятно как работает сигнал с RC приемника. После включения ДУ пульта на выходе сигнал 1,5 мс (150 тактов таймера по 10мкс) При нажатии рычага в право сигнал плавно увеличивается от 1,5мс до 2мс... При возврате рычага в нейтральное положение естественно возвращается на 1,5мс... При нажатии рычага в лево сигнал плавно уменьшается с 1,5мс до 1мс.
Вот что у меня получилось: цепляю Н-Мост на 5 или 6 пин (L,R) мотор начинает крутить сразу после включения пульта. Думаю что идет запись в оба порта L и R сигнала 1,5мс при нейтральном положении. Нажимая рычаг в лево обороты двигателя возрастают. Перекидываю провод с пина 5 "L" на пин 6 "R" мотор крутится, но при нажатии рычага в право обороты двигателя снежаются. Следовотельно вывод: При нейтральном сигнале идет запись в оба порта L и R допустим от 0-128 при уменьшении сигнала в порт L записывается 0-255 а при увиличении в порт R записывается 255-0.
Мои знания иссякли. Просмотрел все проекты на форуме, совсем запутался. Но мысль такая что надо замерять от 100 до 200 тактов для обоих каналов а потом как то методом сравнения назначать на этот сигнал запись в порты...
Эдуард подскажи плиз как мне это органезовать... я иссяк, мой словарный запас программирования израсходован :)
зы: связь с компом используется только для просмотра приходящих данных.
Вложений: 1
Re: Н-Мост на MOSFET+Arduino
Давай начнем с Н-моста.
Для плавной регулировки оборотов например влево нужно:
На вход А моста подать логический 0, а на вход В подавать ШИМ сигнал от 0 до 255.
Для плавной регулировки оборотов например вправо нужно:
На вход В моста подать логический 0, а на вход А подавать ШИМ сигнал от 0 до 255.
Для остановки двигателя нужно на входы А и В подать логический 0.
Теперь вопрос какие пределы регулировки нужны?
Правильно ли я понимаю что изменение сигнала с пульта 1,5мс до 2мс это у тебя должно вызывать измениение ШИМ от 0-255?
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Chip
...Правильно ли я понимаю что изменение сигнала с пульта 1,5мс до 2мс это у тебя должно вызывать измениение ШИМ от 0-255?
И, вроде, при изменении длительности от 1,5 до 1мс тоже ШИМ должен меняться 0-255, только теперь на выводе В, а вывод А должен =0.
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
edw123
И, вроде, при изменении длительности от 1,5 до 1мс тоже ШИМ должен меняться 0-255, только теперь на выводе В, а вывод А должен =0.
Правильно. При изменении сигнала от 1,5мс до 2мс в порт A 0-255 при изменении сигнала от 1,5мс до 1мс в порт B 0-255
Re: Н-Мост на MOSFET+Arduino
теперь математика 2000-1500=500 , 1500-100=500 , 500мкс делим на 2мкс получим диапазон ШИМ 250, почему у тебя диапазон ШИМ 50?
Re: Н-Мост на MOSFET+Arduino
Цитата:
Сообщение от
Chip
теперь математика 2000-1500=500 , 1500-100=500 , 500мкс делим на 2мкс получим диапазон ШИМ 250, почему у тебя диапазон ШИМ 50?
здесь диапазон задается? analogWrite (R, 23 - li);
Re: Н-Мост на MOSFET+Arduino
Извини что не могу ответить развернуто , все никак не дают сосредоточится вникнуть, вечером все проверю
Re: Н-Мост на MOSFET+Arduino
Да нет проблем. Спасибо что вообще нашел время.
Re: Н-Мост на MOSFET+Arduino
Проверить мне не начем , так что пробуй и отпишись по результатам.
PHP код:
#include <TimerOne.h>
#define BTNPIN 2 // Вход сигнала
#define L 5 // Выход на H-Мост вращение в лево
#define R 6 // Выход на H-Мост вращение в право
volatile uint16_t lengthImpuls, timerCount;
void setup()
{
/* LOW — вызов прерывания всякий раз,
когда на порту низкий уровень напряжения;
CHANGE – прерывание вызывается при изменении
значения на входе;
RISING – вызов прерывания при изменении уровня
напряжения с низкого (LOW) на высокое(HIGH)
FALLING – вызов прерывания при изменении уровня
напряжения с высокого (HIGH) на низкое (LOW)*/
lengthImpuls=0;
pinMode (BTNPIN, INPUT);
pinMode (L, OUTPUT);
pinMode (R, OUTPUT);
analogWrite (L, 0);
analogWrite (R, 0);
Timer1.initialize(2);
Timer1.attachInterrupt(callback);
attachInterrupt(0, fireUp, RISING);
}
void callback() { timerCount++; }
void loop()
{
uint16_t li = lengthImpuls;
if (li > 499 && li < 1001)
{
if (li >= 750) {analogWrite (R, 255-(1000-li)); analogWrite (L, 0);}
if (li < 750) {analogWrite (L, 750-li); analogWrite (R, 0);}
lengthImpuls=0;
}
}
// Функция обработки прерывания на подъем
void fireUp()
{
timerCount=0;
detachInterrupt(0);
attachInterrupt(0, fireDown, FALLING);
}
// Функция обработки прерывания на падение
void fireDown()
{
lengthImpuls = timerCount;
detachInterrupt(0);
attachInterrupt(0, fireUp, RISING);
}
Re: Н-Мост на MOSFET+Arduino
При выключенном пульте начинает прирывисто крутить, включаю пульт останавливается. нажимаю в лево пин L начинает с высоких оборотов крутится, и к малым оборотам снижается. при нажатии в право на порт L тоже немного выдает (медленно крутится) пин 6 R совсем молчит.
Может укоротить импулс с 750 до 730 примерно, чтоб лишнего не захватывал? щас попробую с настройками поиграть.