atmega8, Как пересчитать данные с АЦП

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Пт мар 16, 2018 10:18:19

Сообщение volw »

Помогите рассчитать диапазоны регулирования терморезистора по схеме резистивного делителя в atmega8. Имеется такая формула N= (ADCW - 117)*420/261, но при умножении получается число более 100000 чего как я полагаю программа обработать не может. Подскажите реализацию данных расчетов, пишу на СИ в AVR Studio 4.
Вложения
2018-03-10_104048.jpg.96b024d67b32e369921e91b3d810380f.jpg
То что условно требуется получить
(168.19 КБ) 577 скачиваний
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Два способа есть

Код: Выделить всё

N= (long)(ADCW - 117)*420/261;
и

Код: Выделить всё

N= (ADCW - 117)*1.6092;
последний увеличивает объем кода.
Реклама
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

Сообщение viiv »

[uquote="volw",url="/forum/viewtopic.php?p=3332065#p3332065"]Имеется такая формула N= (ADCW - 117)*420/261, но при умножении получается.[/uquote]

Вот проблема :-)

Сократим дробь на 3 (и 420 и 261 делится на 3), получим N= (ADCW - 117)*140/87, теперь вычисления попадают в двухбайтовую беззнаковую арифметику.

PS. лучше, конечно сделать такое масштабирование аналоговым способом. Сейчас, насколько я понимаю, Вы используете только четверть диапазона АЦП.
Родился
Сообщения: 3
Зарегистрирован: Пт мар 16, 2018 10:18:19

Сообщение volw »

Тема решена! вот одинаково рабочие варианты:

N=(ADCW-117)*1.61

N= ADCW*1.61-188

N=(ADCW-117L)*420/261

long N;
long x = ADCW;
N= (x - 117)*420/261

N=(ADCW-117)*(420.0/261.0)


Добавлено after 43 minutes 33 seconds:
[uquote="viiv",url="/forum/viewtopic.php?p=3332196#p3332196"]PS. лучше, конечно сделать такое масштабирование аналоговым способом. Сейчас, насколько я понимаю, Вы используете только четверть диапазона АЦП.[/uquote]
Напряжение с делителя я смогу поднять до уровня опорного допустим с помощью операционного усилителя, а как мне из некоторого нижнего уровня получить ноль, ведь терморезистор не может иметь нулевое сопротивление

PS: Догадываюсь что это можно сделать с помощью того-же операционного усилителя смещением нуля какого-нибудь например. Может кто знает такую схему чтобы можно было подстроечниками выставить нижний и верхний предел, нижний сделать нулевой или допустим выставить некоторое другое значение (температуры окружающей среды), а верхнее поднять до опорного напряжения микроконтроллера.
Последний раз редактировалось volw Ср мар 21, 2018 14:28:02, всего редактировалось 2 раза.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

на меге 16 можно для этого использовать диф входы, а для 8 только внешним ОУ.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

volw писал(а):вот одинаково рабочие варианты
да не одинаковые по объему и быстродействию
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

volw писал(а):а как мне из некоторого нижнего уровня получить ноль, ведь терморезистор не может иметь нулевое сопротивление
При некотором уровне АЦП, допустим 100, вы хотите получить ноль: Результат = -100+АЦП.
Родился
Сообщения: 3
Зарегистрирован: Пт мар 16, 2018 10:18:19

Сообщение volw »

[uquote="volw",url="/forum/viewtopic.php?p=3335828#p3335828"]чтобы можно было подстроечниками выставить нижний и верхний предел, нижний сделать нулевой или допустим выставить некоторое другое значение (температуры окружающей среды), а верхнее поднять до опорного напряжения микроконтроллера.[/uquote]
Все, я сам додумал до такой схемы, вернее схема уже была а я определил какие резюки нужно подбирать или поставить вместо них подстроечники.

Итак имеем:
терморезистор R2 с пределами низ 57Ом (комн.темп.24С) и верх 135Ом-420С
резистор R3 регулируем верхний предел
резистор R7 регулируем нижний предел

R7=50Ом, R3=1.090k (низ 97С верх 420С)
R7=57Ом, R3=1.216k (низ 74С верх 420С)
R7=59Ом, R3=1.255k (низ 67С верх 420С)
R7=62Ом, R3=1.317k (низ 56С верх 420С)
R7=69Ом, R3=1.485k (низ 24С верх 420С)
R7=71Ом, R3=1.540k (низ 14С верх 420С)

ориентировочно установил R7 затем подобрал R3 чтобы верх показал 420 град. посмотрел низ 97, много
немного увеличил R7, опять выставил R3 верх 420 град., посмотрел низ 74, пошло на убыль уже хорошо

таким образом постепенно увеличивая R7 и подбирая R3 мне удалось добиться нужных показаний АЦП 24C-420C

PS: Все значения условны, подбирал в Протеусе, делалось это для паяльника HAKKO 907 с терморезистором.
Теперь можно программно не рассчитывать, а использовать уже готовые значения АЦП
Вложения
2018-03-21_215158.jpg
(211.05 КБ) 483 скачивания
Ответить

Вернуться в «AVR»