Технический форум по робототехнике.
Myp » 30 июн 2007, 12:02
вобщем есть акумулятор
6 вольт
мин напр 4.5 вольт, макс 7.5 вольт
диапазон измерений 3 вольта
как это можно завести на ADC меги8 чтоб без ОУ обойтись???
хочу контролировать степень разрядки акумулятора а огород городить неохото.
Tracer » 30 июн 2007, 13:42
А зачем тебе ОУ при таких напряжениях?
А с чем сравнивать будеш?
Заводи через делитель
Vooon » 30 июн 2007, 15:08
через простой делитель и все ок
посчитать и сам думаю сможешь
только не давай слишком маленький ток через делитель
помехи будут... ставь около 1 мА - 400 мкА
- Код: Выделить всё • Развернуть
| V+
П
П
|
+---+--- ADC IN
| |
П ---
П --- ~0,1
| |
--- ---
Master » 30 июн 2007, 16:33
[off]Давайте подарим Vooon карандаш.[/off]
Vooon » 30 июн 2007, 17:35
[off]зачем мне карандаш? мне клавы достаточно

ну и потом не загружать же kicad ради столь простой схемы

[/off]
Myp » 30 июн 2007, 19:51
ах точно
этож через дделитель нуно завести
а я чёт посмотрел и ничё не пришло в голову
блин
опять до полуночи сидеть считать

эх
пойду пока на платке разведу 2 резюка и кондёрчик
Vooon » 30 июн 2007, 21:02
Myp писал(а):блин
опять до полуночи сидеть считать

ну что там считать?
сначало прикинем общее сопротивление
U = 8 V
I = 1 mA
I = U/R => R = U/I
R = 8 / 1e-3 = 8 кОм
теперь найдем сопротивление нижнего
R = 5 / 1e-3 = 5 кОм
R1 = 3 кОм
R2 = 5 кОм
а теперь берем протеус и проверяем что я сказал + поточнее подбираем номаналы
(вместо верхнего я бы посоветовал поставить подстроечник гденить 10к)
а что касается получения правильного значения напряжения с АЦП нужно вычислить пропорцию
5.0 x
------- = ------ , где y - результат АЦП
1023 y
те
- Код: Выделить всё • Развернуть
uncigned int a;
float voltage;
a = readADC(<chanel>);
voltage = (5.0 * y)/1023;
Myp » 30 июн 2007, 21:19
засимуировал
как доктор прописал
разряженый акк 4.5 вольт
ток 0.56 мА напряжение на АЦП 2.81 В
заряженный акк 8 вольт
ток 1мА АЦП 5 В
тока код вот такой наверно? =)
- Код: Выделить всё • Развернуть
uncigned int a;
float voltage;
y = readADC(<chanel>);
voltage = (5.0 * y)/1023;
Myp » 30 июн 2007, 21:23
кста
а если вдруг случайно напр на АЦП будет выше Vcc то чё ??
не сгорит???
Vooon » 30 июн 2007, 23:12
ну ошибси одной букавкой

все равно же понятно

да и писал "на одном дыхании"
недолжен (если конечно не в 220 сунеш

)
после 5.5 В откроется защитный диод (они на всех портах есть)
но можно поэкспериментировать, как вариант добавить резюк в несколько кОм между выходом делителя
и АЦП (тогда точно защитишь, тк диоды эти около 1 мА держат)
а повлияет он слабо (скорее всего даже не заметишь) тк внутреннее сопротивление ацп велико
но лучше не перебарщивать ...
North » 03 июл 2007, 09:26
2Мур: Незабудь подключить внешний источник опорного напряжения в таком случае.
Vooon » 03 июл 2007, 19:29
North писал(а):2Мур: Незабудь подключить внешний источник опорного напряжения в таком случае.
зачем внешняя опора?
хотя... у мура же не очень чистое питание будет... тогда да - лучше внешнюю и как в ДШ через LC

Виталий » 03 июл 2007, 21:53
Код все-таки такой =)
- Код: Выделить всё • Развернуть
unsigned int a;
float voltage;
y = readADC(<chanel>);
voltage = (5.0f * y)/1023.0f;
[/b]
Vooon » 03 июл 2007, 21:59
да можно указать что константы флоат

кстати полностью правильный код вот:
- Код: Выделить всё • Развернуть
unsigned int y;
float voltage;
y = readADC(<chanel>);
voltage = (5.0f * y)/1023.0f;

:D :wink:
Myp » 03 июл 2007, 22:50
блииин
гдеж я вам возьму чистое опр\орное
да ещё с ЛС о даташиту