Привет всем.
Поведаю странную историю в надежде на то, что кто либо дельный совет даст ибо сил страдать уже нет.
И так…
Есть то, что написано в шапке и инклинометр (гироскоп). Есть двигло, которое ШИМится.
Все это дело собрано и спроектировано (протестировано как по отдельности - так и вместе на плате). Вкратце… инклинометр нагибается - двигло крутится согласно транслируемому углу инклинометра. Больше угол - больше обороты, меньше - меньше обороты.
Гемор в том, что при тесте (визуальном в порту и ШИМ на осциле) все работает - Это при USB питании естественно. Двигло при этом естественно не куртится - просто данные наблюдаю.
А вот при подключении внешнего питания 9v (лаб. блок) двигло пару сек. работает и плата виснет. Если в этот момент воткнуть еще и USB. то плата отвисает и работает как надо. Иииии если уже в этот момент выдернуть USB - то она продолжает работать.
Что происходит не могу понять. Сброс не помогает.
без схемы и кода, ваша душетрепательная история, не помогает нам понять проблему и дать хоть какие то рекомендации.
Вот кусок - как раз тот самый гемогойный…
И еще кое что забыл добавить.
Если например из программы сделать изменение от 0 до частоты например 20kHz а при ее достижении опять до нуля. То все работает… Плевать откуда питание берется.
Я уж не знаю - вот тот самый кусок кода который присваивает значение с инклинометра в двигло (там функции библиотеки PWM.h)
freq = int(abs(kalAngleX)); // тут валят данные с инклинометра.
freq *= 10; // чтоб было заметное изменение
bool success = SetPinFrequencySafe(PWM, freq); // Подаем их для изменения частоты.
//-----------------------------------------------------------------------------------------------------------------------------------------
// А вот эта вставка для искусственного изменения (без инклинометра) его при этом надо
// закоментировать (самую верхнюю строку)
//freq = freq + a;
//if (freq == 0 || freq == PWM_WORK) a = -a ;
//---------------------------------------------------------------------------------------------------
int zz = map(freq, 0, PWM_WORK, 100, 127); // 100, 127 красивый меандр
pwmWrite(PWM, zz); // Это duty на ШИМ
delay(10); // не обязательно
Забыл пометить в коде “а” это просто int = 50;
тебе нужна помощь, или огрызок помощи?
А что из написанного не понятно?
Переполняется zz
Не… ну как оно может переполняться если над ним стоит:
int zz = map(freq, 0, PWM_WORK, 100, 127);
Да и япробовал выносить и этот методи тот,которыйчастоту устанавливает… по очередно в Setup();
То есть в каждый изних, по разу плюет какое-то значение и все ровно виснет.
Причем тенденция зависания наблюдается всегда на частоте около 60hZ.
Это на осциле…
Извиняюсь -запарилсясовсем…
PWM_WORK - это предельнаячастота 16000.
PWM - нога 9.
Что тут непонятного - переполняется и все.
как он может переполняться если я выносил его в Setup(); Я- ж писал выше про это.
Я попробю резюмировать…
- если USB то все работает (без движка).
- если VIN то виснет. (2сек. и пипец)
- если VIN и USB то работает ( с движком или безнего - насрать)
- если VIN и искуственное изменение FREQ и PWM то работает.
Может выносил, может нет. В предоставленных материалах дела данное утверждение фактами не подкреплено.
каким фактом…? Я ж сказал проэто. Мне бубен с иконкой святой водой оросить чтоли???
И как связать то, что где-то … что-то переполняется вот с этим:
“Двигло” у тебя причина всего. Помехи ,максимальные на определенной частоте, вешают твой мк. Это мне поведал хрустальный шар. А какой "двигло " и как он подключен -шар не ведает . Поставь светодиод вместо двигла -и все у тебя будет работать нормально от любой комбинации вариантов питания,которые ты использовал.Так шар глаглолет.
Может так оно и есть (шару виднее) … Но как быть с 4ым вариантом…
кстати заметил, что вешает он именно на 60hz, всегда.
Вот этот мотор …
А led будет работать при любом раскладе.
И да, шар ругается на непонятные обозначения на вашей схеме.От С5 до R18 должен стоять дроссель. И С3 -керамический.И диод параллельно движку.