Це вже 3-тя і, надіюсь, завершальна частина епопеї по доопрацюванні кан адаптера, хронологія виглядає так:
Стикнувся я певними проблемами в стабільності роботи цієї чудо-коробочки. Проявлялось це в тому, що в один момент вона відмовлялась запускатись і потрібно було прибирати повністю живлення аби зробити "перезавантаження", після чого все починало працювати штатно.
Було виявлено 2 причини: програмна й апаратна. Програмна проявлялась в тому, що після кількох циклів сну і просинання (рандомна кількість) кан контролер починав відправляти мікроконтролеру нескінчену кількість битих пакетів (навіть без підключення до кан шини), або не відправляти їх взагалі. Апаратна проблема була пов'язана з заниженим живленням.
Програмну частину вдалось вирішити наступним чином: перед кожним сном і після сну роблю наново ініціалізацію кан контролерів. Для тестування зібрав схему з 2-х ардуіно: одна відправляє кан пакети, а інша - приймає. Перший модуль надсилає пакети певний час, а далі робить паузу (тут інший модуль засинає), далі знову починає відправляти пакети (інший модуль просинається) і так по колу. До змін в коді приймач відвалювався в межах декількох годин стабільно, після змін ганяв 2 доби - жодних нестабільностей.
Проте, це не все. Була ще одна нестабільність, яка проявлялась в тому, що після просинання модуль за кілька секунд "зависав" і знову допомагало тільки перезавантаження. Після чого підняв напругу до потрібних 5в і ця проблема перестала докучати.
Зрозуміло, що після підняття напруги виросло енергоспоживання (з яким я намагався боротись) і виникла потреба розв'язати проблему радикально.
Куди копати? В Arduino Nano є 2 елементи які жруть енергію ложками: лінійний стабілізатор і USB модуль. Якщо від стабілізатора я позбавився ще в попередньому записі, то від іншого буду позбавлятись сьогодні (пороте зі збереженням робочого USB ;)). Також буду робити маніпуляції з кан модулем, оскільки кан трансивер TJA1050 не вміє в енергоощадження, тому потрібно замінити його на MCP2551.
Ну поїхали. Потрібні 2 мікросхеми MCP2551, USB модуль на мікросхемі CP2102 і тактова кнопка, для винесення кнопки Reset (бо цей модуль не вміє робити ресет мікроконтролера при прошивці)
Працюємо з платою. Потрібно відпаяти мікросхему USB і її обв'язку (паяльником спокійно можна справитись), далі приклеюємо зовнішній модуль USB і тактову кнопку, підпаюємось до плати. Живлення USB модуля кинув через 2 діоди: це дозволяє модулю працювати при під'єднанні його до ноутбука, проте він зовсім нічого не споживає коли під'єднання по кабелю немає.
Далі кан модулі. Нам потрібно замінити мікросхеми TJA1050 на MCP2551. Тут момент: 8 ніжку мікросхеми потрібно підпаяти до Arduino і подавати на неї керуючий сигнал аби змінювати режим роботи, тому підпаювати її до плати непотрібно. Я робив наступним чином: обидві 8 ніжки на обох мікросхемах відігнув, зпаяв їх провідником і кинув контакт від них до D4 ардуінки. Додатково промазав 8 ніжки термоклеєм аби трішки захистити їх.
Ну і виглядає то все діло десь так:
Трішки модифікуємо код.
// визначаємо пін, до котрого під'єднані мікросхеми
#define MCP_2551_RS 4;
// задаємо режим піна як output
pinMode(MCP_2551_RS, OUTPUT);
// подаємо високий рівень при ініціалізації
digitalWrite(MCP_2551_RS, LOW);
// подаємо низький рівень для переходу в режим сну
digitalWrite(MCP_2551_RS, HIGH);
Всі ці зміни дозволили отримати чудовий результат по енергоспоживанні:
Виходить, що в нормальному режимі роботи споживання менше, ніж в режимі сну до маніпуляцій. А в режимі сну взагалі чудові 0.58 мА! Їжджу з цими змінами вже певний час і нарешті все працює стабільно, тому вважаю за потрібне поділитись цим досвідом.
Невелике доповнення: після цих маніпуляцій краще залишити лінійний стабілізатор живлення на ардуіно і не ставити імпульсний HW-613, з ним виникали проблеми.
Пробіг 259000 км.
1. Watch Dog - від зависання
2. Arduino Mini - 3.3v, а сам МК, здається, чудово себе почуває при 1.8v
3. Є декілька різних варіантів сну Ардуінки
P.S. Світлодіод відпаяйте, що POW -))
А для чого потрібна така енергоефективність?
1. Як він допоможе при зависанні кан контролера?
2. Ок, тільки кан контролер всерівно хоче 5v
3. Вибрано powerdown sleep
Світлодіод, той що POW відпаяний (а саме його резистор)
Варто було б додати, що треба брати поправку на глючні ардуінкі, кварц в кан модулі і швидкість кан шини))
https://driver.top/exp/460396 тут трошки більше, з фото фільтра)