Обсуждаем контроллеры компании Atmel.
Ответить

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

Пт мар 16, 2018 10:35:20

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

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

Пт мар 16, 2018 11:05:58

Два способа есть
Код:
N= (long)(ADCW - 117)*420/261;
и
Код:
N= (ADCW - 117)*1.6092;
последний увеличивает объем кода.

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

Пт мар 16, 2018 13:04:21

Имеется такая формула N= (ADCW - 117)*420/261, но при умножении получается.


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

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

PS. лучше, конечно сделать такое масштабирование аналоговым способом. Сейчас, насколько я понимаю, Вы используете только четверть диапазона АЦП.

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

Ср мар 21, 2018 13:59:55

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

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:
PS. лучше, конечно сделать такое масштабирование аналоговым способом. Сейчас, насколько я понимаю, Вы используете только четверть диапазона АЦП.

Напряжение с делителя я смогу поднять до уровня опорного допустим с помощью операционного усилителя, а как мне из некоторого нижнего уровня получить ноль, ведь терморезистор не может иметь нулевое сопротивление

PS: Догадываюсь что это можно сделать с помощью того-же операционного усилителя смещением нуля какого-нибудь например. Может кто знает такую схему чтобы можно было подстроечниками выставить нижний и верхний предел, нижний сделать нулевой или допустим выставить некоторое другое значение (температуры окружающей среды), а верхнее поднять до опорного напряжения микроконтроллера.
Последний раз редактировалось volw Ср мар 21, 2018 14:28:02, всего редактировалось 2 раз(а).

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

Ср мар 21, 2018 14:10:46

на меге 16 можно для этого использовать диф входы, а для 8 только внешним ОУ.

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

Ср мар 21, 2018 14:20:49

volw писал(а):вот одинаково рабочие варианты
да не одинаковые по объему и быстродействию

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

Ср мар 21, 2018 14:23:14

volw писал(а):а как мне из некоторого нижнего уровня получить ноль, ведь терморезистор не может иметь нулевое сопротивление
При некотором уровне АЦП, допустим 100, вы хотите получить ноль: Результат = -100+АЦП.

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

Ср мар 21, 2018 18:52:50

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

Все, я сам додумал до такой схемы, вернее схема уже была а я определил какие резюки нужно подбирать или поставить вместо них подстроечники.

Итак имеем:
терморезистор 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 KiB) Скачиваний: 463
Ответить