Аномалии кода. 328P-LQFP32 питание (от USB или внешнего VIN)

Привет всем.
Поведаю странную историю в надежде на то, что кто либо дельный совет даст ибо сил страдать уже нет.
И так…
Есть то, что написано в шапке и инклинометр (гироскоп). Есть двигло, которое ШИМится.
Все это дело собрано и спроектировано (протестировано как по отдельности - так и вместе на плате). Вкратце… инклинометр нагибается - двигло крутится согласно транслируемому углу инклинометра. Больше угол - больше обороты, меньше - меньше обороты.
Гемор в том, что при тесте (визуальном в порту и ШИМ на осциле) все работает - Это при 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(); Я- ж писал выше про это.

Я попробю резюмировать…

  1. если USB то все работает (без движка).
  2. если VIN то виснет. (2сек. и пипец)
  3. если VIN и USB то работает ( с движком или безнего - насрать)
  4. если VIN и искуственное изменение FREQ и PWM то работает.

Может выносил, может нет. В предоставленных материалах дела данное утверждение фактами не подкреплено.

3 лайка

каким фактом…? Я ж сказал проэто. Мне бубен с иконкой святой водой оросить чтоли???

И как связать то, что где-то … что-то переполняется вот с этим:

“Двигло” у тебя причина всего. Помехи ,максимальные на определенной частоте, вешают твой мк. Это мне поведал хрустальный шар. А какой "двигло " и как он подключен -шар не ведает . Поставь светодиод вместо двигла -и все у тебя будет работать нормально от любой комбинации вариантов питания,которые ты использовал.Так шар глаглолет. :slightly_smiling_face:

Может так оно и есть (шару виднее) … Но как быть с 4ым вариантом…

кстати заметил, что вешает он именно на 60hz, всегда.

Вот этот мотор …

А led будет работать при любом раскладе.

И да, шар ругается на непонятные обозначения на вашей схеме.От С5 до R18 должен стоять дроссель. И С3 -керамический.И диод параллельно движку.