Проект работает только от 5 В. При повышение глючит. Где я налажал?
- Войдите на сайт для отправки комментариев
Чт, 15/03/2018 - 13:55
Всем привет.
Собираю очередной "звездолет" детям из подножных материалов, и сделал управление главным мотором с помощью ШИМ через нрф24л01+. Пульт использовал от предыдущего проекта - карпового кораблика.
И, вдруг, оказалось, что мой мотор нормально регулируется только тогда, когда Уно запитывается строго от 5 вольт. при попытке поднять входное напряжение хотя бы на 1 -2 вольта, мотор начинает глучить.
Что за...?
Вот схема приемника:
Вот код приемника:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <Servo.h> unsigned long time =0; // для засекания времени обновления массива (наличие связи с пультом) RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно byte recieved_data[6]; // массив принятых данных byte servo_ruly = 2; // сервопривод на 2 цифровом (право/лево руля) byte pwm = 6; // пин 6 на шим byte data4; // переменная в которую преобразуется радиосигнал джойстика "вперед" Servo myservo1; //серво руля byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб void setup() { Serial.begin(9600); //открываем порт для связи с ПК time=millis(); pinMode(servo_ruly, OUTPUT); // настроить пин сервопривода как выход pinMode(pwm, OUTPUT); // настроить пин шим как выход // pwm = 0; myservo1.attach(servo_ruly); myservo1.write(90); radio.begin(); //активировать модуль radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(32); //размер пакета, в байтах radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0 radio.setChannel(0x60); //выбираем канал (в котором нет шумов!) radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.startListening(); //начинаем слушать эфир, мы приёмный модуль } void loop() { byte pipeNo; while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал time=millis(); // засекаем и сбиваем время при каждом приеме данных myservo1.write(recieved_data[1]); // повернуть серво на угол с 1 элемента массива if ((recieved_data[4])>=130) // джойстик в нормальном(центральном) положении дает значение 127-128 { data4 = map (recieved_data[4],130,255,0,255); analogWrite (pwm, data4); } else {analogWrite(pwm, 0); } } if((millis()-time)>1000) { //если больше 1секунды не обновлялся массив (пропал сигнал пульта), останаливаем мотор analogWrite(pwm, 0); } }
На всякий случай схема передатчика:
Код передатчика:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
#define JOYSTICK_1_X A0
#define JOYSTICK_1_Y A1
#define JOYSTICK_2_X A2
#define JOYSTICK_2_Y A3
#define POTENT_KT803 A4
byte button = 3; // кнопка на 3 цифровом (фара)
byte transmit_data[6]; // массив, хранящий передаваемые данные
byte latest_data[6]; // массив, хранящий последние переданные данные
//boolean flag; // флажок отправки данных
void setup() {
Serial.begin(9600); //открываем порт для связи с ПК
pinMode(button, INPUT_PULLUP); // настроить пин кнопки
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приёмнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, мы передатчик
}
void loop() {
transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки
transmit_data[1] = map(analogRead(JOYSTICK_1_X), 0, 1023, 60, 120); // значение право/лево руля
transmit_data[2] = map(analogRead(POTENT_KT803), 0, 1023, 10, 160); // регулятор мощности малого хода KT803
transmit_data[3] = map(analogRead(JOYSTICK_2_X), 0, 1023, 255, 0); // выгруз левый/правый
transmit_data[4] = map(analogRead(JOYSTICK_1_Y), 0, 1023, 255, 0); // полный/малый вперед + малый назад катера
transmit_data[5] = map(analogRead(JOYSTICK_2_Y), 0, 1023, 0, 255); // запасной
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
}
П.С.: Ардуино для меня только хобби, могу не знать каких-то простых для вас вещей. Может кому будет ясно почему схема работает от 5 вольт, но не работает от7 или 9 вольт. Объясните пожалуйста. Буду признателен.
Оо.Вам скорее понадобиться промежуточное звено.Проблема в том что открытие полевика примерно равно пяти вольтам.Шилд L298N.Выход как раз на Ваш мотор а управляющее напряжение сделать от 0до 5 В
Всем привет.
Собираю очередной "звездолет" детям из подножных материалов, и сделал управление главным мотором с помощью ШИМ через нрф24л01+. Пульт использовал от предыдущего проекта - карпового кораблика.
И, вдруг, оказалось, что мой мотор нормально регулируется только тогда, когда Уно запитывается строго от 5 вольт. при попытке поднять входное напряжение хотя бы на 1 -2 вольта, мотор начинает глучить.
Что за...?
Вот схема приемника:
на картинке УНА питается от 9в по входу VIN, в соответствии со спецификацией.
можно пояснить про "Уно запитывается строго от 5 вольт. при попытке поднять входное напряжение хотя бы на 1 -2 вольта, мотор начинает глучить." ? Куда эти 5-6-7 вольт подаются?
Куда эти 5-6-7 вольт подаются?
Все время речь идет о питании ардуино. На схеме 9 В, при них схема глючит, а когда даю 5 вольт, то все идеально. Даю 6 вольт и больше - начинает глючить.
Куда эти 5-6-7 вольт подаются?
Все время речь идет о питании ардуино. На схеме 9 В, при них схема глючит, а когда даю 5 вольт, то все идеально. Даю 6 вольт и больше - начинает глючить.
при подаче 5 - 6 - 7v на вход VIN какие напряжения на пине "5v" ?
при подаче 5 - 6 - 7v на вход VIN какие напряжения на пине "5v" ?
Завтра отпишусь. Ардуино не со мной сейчас.
VOS , напишите подробно на какие именно пины ардуины и какое напряжение подаёте. Т.к. у ардуины несколько вариантов запитки - через стабилизатор и напрямую на микроконтроллер. И для каждого варианта напряжения различаются.
VCC (5V) - строго 5В
VIN (RAW) - от 7В до 12В
при подаче 5 - 6 - 7v на вход VIN какие напряжения на пине "5v" ?
при подаче 5v на VIN напряжение на пине "5v" равно 4,2v,
при подаче 6v и больше на VIN напряжение на пине "5v" равно 5v,
при поднятии с 5v до 6v на VIN, напряжение на пине "5v" плавно растет от 4,2 до 5 v.
VOS , напишите подробно на какие именно пины ардуины и какое напряжение подаёте.
Всегда запитываю только через VIN. Даю от 5В до 12В.
Теперь понял, что стаб выравнивает 5 вольт при подаче от 6вольт минимум.
VOS , напишите подробно на какие именно пины ардуины и какое напряжение подаёте.
Всегда запитываю только через VIN. Даю от 5В до 12В.
Теперь понял, что стаб выравнивает 5 вольт при подаче от 6вольт минимум.
"Платформа может работать при внешнем питании от 6 В до 20 В. При напряжении питания ниже 7 В, вывод 5V может выдавать менее 5 В, при этом платформа может работать нестабильно. При использовании напряжения выше 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 В до 12 В."
http://arduino.ru/Hardware/ArduinoBoardUno
П.С.: Ардуино для меня только хобби, могу не знать каких-то простых для вас вещей. Может кому будет ясно почему схема работает от 5 вольт, но не работает от7 или 9 вольт. Объясните пожалуйста. Буду признателен.
Откиньте мотор и повесьте лампочку или светодиод. Как физически соединены земли? Источники питания строго как на схеме или как-то иначе? Добавьте в программу еще один ШИМ и повесьте контрольный светодиод (управление программно-параллельное) – что когда происходит (при любом ШИМ или определенном значении)?.
Во первых вопрос. Что означает мотор гючит? Он начинает светиться, разговаривать или изменяет скорость?
Все достаточно странно, если схема собрана правильно и стабилизатор в ардуино работает, то изменение напряжения питания в разумных пределах (6-12В) не должно влиять. Наиболее вероятен вариант неправильного подключения земляных проводников источников питания мотора и ардуины. Минусоовые провода обоих источников должны быть соединены в одной точке. И посмотрите, хотя-бы тестером, а лучше осциллографом, что происходит на затворе силового транзистора при изменении питания.
Что означает мотор гючит?
Когда на питание подаю 5 В все работает гуд - меняю сопротивление на пульте и мгновенно (для человеческого глаза) отзывается приемник, меняя напряжение на моторе или светодиоде. Когда даю 6 вольт или больше на питание, то реакция замедленная, очень.
что происходит на затворе
Вчера вечером сделал это, оказывается, что сигнал на пин 6 появляется с задержкой, а не задержку дает сам полевик. Получается, какая-то лажа с радиоканалом.У меня по этой схеме, на базе этого скетча работала схема от 9 вольт без проблем. ХЗ, что ему стало. Сегодня попробую напаять жменю кондеров на питание нрф. Вэтот раз я не делал этого, т.к. они есть на ЛМ2596 на входе и выходе, но все же...
Тогда ещё вопрос:
Зачем вы в передатчике повышаете напряжение до 9 Вольт?
Чтобы потом греть стабилизатор у НАНО ?
Затем, что 9 вольт правильное (6-12В) питание, а моя схема работает только при неправильных 5 вольтах на питании. Хочется разобраться, что происходит.
То есть подать 5 Вольт на клемму
с надписью "5 Вольт" вы считаете неправильным решением?
с надписью "5 Вольт" вы считаете неправильным решением?
Уже не считаю.))
Просто всегда пользовал vin. Говорю о нем. Хочу понять, почему по такой запитке не работает.
Во первых почитайте про 1117 и его параметр падения напряжения.
Во вторых про фьюзы boden.
http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html
А потом вперёд с мультиком измерять эти самые насряжения.
Кстати кондёр на ножках нрф крайне рекомендуется
Во вторых про фьюзы boden.
http://easyelectronics.ru/avr-uchebnyj-kurs-konfiguraciya-fuse-bit.html
А потом вперёд с мультиком измерять эти самые насряжения.
Кстати кондёр на ножках нрф крайне рекомендуется
Спасибо
Когда на питание подаю 5 В все работает гуд - меняю сопротивление на пульте и мгновенно (для человеческого глаза) отзывается приемник, меняя напряжение на моторе или светодиоде. Когда даю 6 вольт или больше на питание, то реакция замедленная, очень.
Похоже на проблемы с питанием радиомодуля. Проверьте на всякий случай возможно стабилизатор питания неисправен или выставлено не то напряжение. При изменении напряжения питания , частота может значительно уходить, откуда неуверенный прием и задержки.
Правильно заданный вопрос-половина ответа.
nrf 3,3В а ардуино 5В они сопряжены по лог. уровням (сам с ним не работал)? А то получится питаение передатчика по ногам данных через защиту. При питании 5 В через стабилизатор дуине достается не более 4,5В - обоим устройствам нормально, а если поднять - радиомодуль может сдуться...
Народ, всем спасибо.
Дело было в кондерах. Добавил электролит 10мкФ и многослойный 0,01 мкФ (Всегда такую пару ставлю) и все работает, как часы.
Моей ошибкой было исключить пару кондеров, понадеявшись на кондеры в ЛМ2596.
Еще раз спасибо всем. Узнал много нового в процессе. ))
Удачи.
Поздравляем!