Страница 1 из 1

Ремонт Hobby King Battery Monitor 3S (ATTiny13A)

Добавлено: Вт ноя 15, 2016 00:30:28
Rebus77
Изначально была нужда в регуляторе (ещё осталась) )) http://radiokot.ru/forum/viewtopic.php?f=57&t=137245
Т.к. близкого проекта на CodeVision не нашёл, а предложения в личке было от пива до $100, решил заниматься сам. Использую протеус и CodeVisionAVR. Немного разобравшись с АЦП , вспомнил, что лежит "сгоревший" Hobby King Battery Monitor 3S
Изображение
Я его заказывал вместе с Li-Po аккумуляторами для переделывания шуруповёрта. И это устройство тоже было вмотировано в инструмент, чтобы следить за разрядом аккумулятора. Хорошо работало. И в один прекрасный день,-"умерло". Оказалось, что сгорел транзистор, который регулирует 5В-питание Tiny13, на неё подалось вольт 10 от аккумуляторов и она калится как утюг.
Теперь к делу. Написал код в CodeVisionAVR для Tiny13A под эту плату. Себе уже запаял, всё работает. Привожу исходник, для тех кто хочет "запилить" что-то под себя. Вот схема для моделирования (Протеус)
Изображение
Работает так
(Потенциометр RV1 установлен для моделирования. Изменяет входное напряжение. В любой другой схеме, вместо него устанавливается делитель их 2 резисторов. В Monitor 3s делитель стоит такой. +аккум-10кОм-5.76кОм-земля.)
Ниже пишу пороговые напряжения, которые описаны в инструкции к Monitor 3s от Hobby King
До 9.9 Вольт D1- мигает, Бузер- прерывисто пищит.
9.9-10.2 V D1- горит.
10.2-11.1 V D2- мигает (D1 -не горит и не мигает)
Свыше 11.1 V D2-горит постоянно.

Вот исходник
Спойлер#include <tiny13.h>
#include <delay.h>


void main(void)
{
int A=1;
PORTB=0x00;
DDRB=0x0F;
ADCSRA=0x87;
ADCSRB=0x00;
ADMUX=0x22;
DIDR0|=0x10;
while (1)
{
ADCSRA|=0x40;
if (ADCH<=184)
{
PORTB.0=A;
PORTB.3=A;
A=!A;
};

if (ADCH>184 & ADCH<=190)
{
PORTB.0=1;

}
if (ADCH>190 & ADCH<=207)
{
PORTB.1=A;
A=!A;
}
if (ADCH>207)
{
PORTB.1=1;
};
delay_ms(500);
PORTB=0x00;
}
}
Для тех, кто будет допиливать под себя. Меняя значения с чем сравниваем ADCH получаем значения какие вам нужны.
Считается так. Т.к. я использую только 8 разрядов(256 значений), то 1 мл разряд имеет вес 5В/256=0.01953125. 5В-потому, что мы в качестве опорного напряжения для АЦП взяли напряжение питания Tiny13, а оно 5В
Поэтому, например, при первом условии (см выше) if (ADCH<=184) имелось ввиду if (ADCH<=3.6В) (0.01953125*184)
Ну и прикладываю файлы проекта в Протеусе (у меня Релиз 7.10 SP0) и проект в CodeVisionAVR (версия 2.05.3)
Да, ещё, Tiny должна работать на 4.8 МГц, деление на 8 отключено. Поэтому когда будете программировать в программаторе ставьте CKSEL 1:CKSEL0 01 , CKDIV8 1
P.S. Понимаю, что для гуру это такая мелочь, делов на 10 минут. Но когда я искал похожее, не нашёл. Может кому пригодится.