Jump to content

    

Атмега 88 АЦП и мутиплексор

Задача с двух выходов нужно снимать значения. Раньше с этим успешно справлялись 2 канала АЦП на Атмеге 88.

Сейчас на эти выходы нужно поставить более дорогие усилители. И чтобы сэкономить я хочу поставить один на два канала и перед ним простенький мультиплексор на 2 канала.

 

Код был вот такой:

$this_var = while (adc_accum_cnt < ADC_ACCUM_TIME)
    {
    ADC_ch1_temp = Get_ADC(ADC_CH1);
    if (ADC_ch1_temp > ADC_ch1_max) ADC_ch1_max = ADC_ch1_temp;
    if (ADC_ch1_temp < ADC_ch1_min) ADC_ch1_min = ADC_ch1_temp;
            
    ADC_ch2_temp = Get_ADC(ADC_CH2);
    if (ADC_ch2_temp > ADC_ch2_max) ADC_ch2_max = ADC_ch2_temp;
    if (ADC_ch2_temp < ADC_ch2_min) ADC_ch2_min = ADC_ch2_temp; 
    };

 

Теперь мне для того чтобы перещёлкивать мультиплексором, как я понимаю, нужно поставить в код между каналами АЦП команду, которая будет дергать ножкой "0" и"1". А входы АЦП обоих каналов просто соединить. Для этого не придется переписывать остальной код. Соответственно, когда я получу значения для ch1 я перешелкну и буду считывать значения для канала ch2.

Или второй вариант (более логичный с точки зрения кода): я использую один канал АЦП, и просто в коде определю переменную ADC_ch2_temp = Get_ADC(ADC_CH1).

Но главный вопрос как вывести наружу этот внешний такт, с учётом, что необходимо скорее всего после перехода на этой ноге с "0" на "1" делать задержки, чтобы АЦП не считывал данные пока мультиплексор окончательно не переключится?

Share this post


Link to post
Share on other sites

В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор?

Share this post


Link to post
Share on other sites
В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор?

Как бы вам так ответить, чтобы понятно было?

Ну попробую:

В самом начале поста я написал, что хочу с экономить на одном из усилителей. Т.к. раньше на каждый канал АЦП стояли lm358 по 15р штука, а теперь логарифмический по 1т.р.

 

А проблема в том, что надо написать типа

$this_var =

mult_state_on (); // перевод ножки управления мультиплексором в "1"
...

{
    ADC_ch1_temp = Get_ADC(ADC_CH1);                                                   //считывание АЦП первого канала
    if (ADC_ch1_temp > ADC_ch1_max) ADC_ch1_max = ADC_ch1_temp;
    if (ADC_ch1_temp < ADC_ch1_min) ADC_ch1_min = ADC_ch1_temp;

    mult_state_off ();                                                                                // перевод ножки управления мультиплексором в "0"
            
    ADC_ch2_temp = Get_ADC(ADC_CH2);                                                 //считывание АЦП второго канала
    if (ADC_ch2_temp > ADC_ch2_max) ADC_ch2_max = ADC_ch2_temp;
    if (ADC_ch2_temp < ADC_ch2_min) ADC_ch2_min = ADC_ch2_temp; 
    }
;

 

Но мне кажется должна быть еще задержка чтобы АЦП не считывали пока ключ не переключился.

И не уверен, что можно включать эту команду внутри цикла.

Share this post


Link to post
Share on other sites

Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.

я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?

Share this post


Link to post
Share on other sites
Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.

я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?

 

Не АЦП даже с излишком.

Просто я не вижу другой схемы если у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.

Так понятнее?

Share this post


Link to post
Share on other sites
Не АЦП даже с излишком.

...у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.

Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?

Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.

Share this post


Link to post
Share on other sites
Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?

Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.

 

Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf). Поэтому я пока хочу устранить шумы от переключения программной задержкой. Но может и от них не надо будет ничего придумывать. Т.к. мне нужны среднее значение изменения напряжения, просто на очень большом диапазоне от десятых мВ до десятых В.

И раньше в коде приходилось писать таблицу для каждого под диапазона значений, как раз для обработки. Поэтому проще поставить логарифмический (при чем у меня два вида на макет куплено обычный и trueRMS) и уже смотреть что с ними будет получаться. Так что пички при переключениях могут исчезнуть при переходе в RMS.

Share this post


Link to post
Share on other sites
Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf).S.

В ключах обратите внимание на следующий параметр Charge Injection.

По сути это можно описать как "впрыскивание" заряда во время коммутации, в вашем случае значение этого заряда достаточно мало, и если вам не важна частота сбора данных, то вы можете после коммутации скажем сделать 10 опросов АЦП и 5 из них откинуть.

 

Ещё многое может зависеть от выходного сопротивления датчика и длины кабеля до датчика.

Edited by moon333

Share this post


Link to post
Share on other sites

Добрый день,

вопрос по питанию АЦП Aref от VCC разделены? от другого источника подаю опорное напряжение и подаю напряжение на вход ADC0? при это не закоротит с питанием VCC?

Share this post


Link to post
Share on other sites
3 часа назад, Шнекоход сказал:

Добрый день,

вопрос по питанию АЦП Aref от VCC разделены?

Это управляется программно. Читайте внимательно описание битов REFS0, REFS0.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this