dac 0 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба а еще попробуйте померить осциллографом, что реально на входах ацп, а то может он совсем не причем. и не путайте время выборки (sample time, hold time) со временем преобразования (convertion time), с авр не работал, у мсп430, пик, стм32 и стм8 эти вещи задаются раздельно. ну и увеличить паузу, как советовали выше, тоже может помочь. если другие шоттки не помогли, BAS70 не помогут тоже, можете не искать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 сентября, 2011 Опубликовано 27 сентября, 2011 · Жалоба Осциллографом глядел миллион раз. Когда нагрузки нет - на ADC2 идеально ровная полоса 2.5в. Переделал алгоритм, теперь использует прерывания АЦП и ждёт 50 нс после переключения мультиплексора - ещё хуже стало. Теперь при полном отсутствии сигнала и по напряжению и по току показывает 0.1в и 0.4-0.5в соответственно. Я иссяк :( . Пошёл менять АЦП на MCP3202.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 89 27 сентября, 2011 Опубликовано 27 сентября, 2011 · Жалоба Как-то натыкался на взаимовлияние каналов. Лечилось или полным отказом от sleep-режима или холостым преобразованием при переключении канала. Последнее как по мне проще всего делать выключением АЦП в начале прерывания, а затем включением при запуске. Тогда АЦП делает полный цикл в 25 тактов, что эквивалентно первому выброшенному. Что-то типа такого: #define ADCSRA_ON (1 << ADEN)|(1 << ADIF)|(1 << ADIE)|(1<<ADSC)|(1<<ADPS1) #define ADCSRA_OFF (1 << ADIF) // выключение АЦП __interrupt void ADC_INT (void) { unsigned int adc = ADC; // Считываем значение //..... ADCSRA = ADCSRA_OFF; //полное отключение АЦП //..... { //..... ADMUX = MUX_12V_IN; //..... } //..... ADCSRA=ADCSRA_ON; return; }; // Read the AD conversion result word read_adc(byte adc_input) { ADMUX=adc_input; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion (ADSC) ADCSRA|=0x40; // Wait for the AD conversion to complete (ADIF) while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; // Обнуляем мл. бит return ADCW&0xFFFE; } // read_adc Функция read_adc сгенерирована генератором кода CvAVR. Я её не менял. Зря не меняли. Она оставляет работать АЦП после преобразования и при этом не стирает бит флага прерывания при запуске нового преобразования. Откуда уверенность, что это: // Wait for the AD conversion to complete (ADIF) while ((ADCSRA & 0x10)==0); ловит результат этого преобразования, а не предыдущего - уже готового на момент входа в процедуру??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 · Жалоба Осциллографом глядел миллион раз. Когда нагрузки нет - на ADC2 идеально ровная полоса 2.5в. Ровная... не ровная... Что на ADC2 относительно ADC0 ? Что именно выдает АЦП? (не в вольтах) Какая опора, все таки, AVCC или AREF? Если AREF, то какое там напряжение? И вообще, схема подключения? А то "все стандартно", в моем понимании - это использование внутренней опоры с кондесатором на AREF. Переделал алгоритм, теперь использует прерывания АЦП и ждёт 50 нс после переключения мультиплексора - ещё хуже стало. Теперь при полном отсутствии сигнала и по напряжению и по току показывает 0.1в и 0.4-0.5в соответственно. Т.е. после программных изменений "влияние каналов друг на друга" стало еще больше" ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*ZEVS* 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 · Жалоба Сначала не обратил внимание но когда присмотрелся то увидел что Вы измеряете сигнал через 100к резистор. Если это так то АЦП и будет плясать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 · Жалоба Сначала не обратил внимание но когда присмотрелся то увидел что Вы измеряете сигнал через 100к резистор. Если это так то АЦП и будет плясать. Ну он уже написал, что эти резисторы убрал. Мне больше неясно, почему напряжение средней точки меряется на входе ОУ, а не на выходе. назначение резистора в 1М мне тоже непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 (изменено) · Жалоба назначение резистора в 1М мне тоже непонятно. Это я притягивал вход АЦП к земле. Думал, там какие-то наводки в отсутствии сигнала. Видел такое решение с промышленно выпускаемых приборах. Не помогло оно ... Резисторов в 100кил на входах уже нет. Одни диоды остались. Опора - AREF=VCC=5в со стабилизатора. Кондёр, там как в ДШ есть. Только дросселя нету. Остальное, думаю до вечера проверю, отпишусь. Изменено 28 сентября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lexdaw 0 29 сентября, 2011 Опубликовано 29 сентября, 2011 · Жалоба Вы будете смеятся ,но в одном из приборов взаимовлияние устранил увеличением частоты преобразования.Т.е. был делитель 1/128 после смены на 1/32 всё заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SAWushka 0 29 сентября, 2011 Опубликовано 29 сентября, 2011 (изменено) · Жалоба Не по делу, так как все что мог придумть уже посоветовали. Какой трансформатор используете в качестве датчика напряжения (T3)? Решаю похожую задачу. Описываемые вами эфекты встречал, но все они лечились двойным опросом, причем запускаем первое преобразование сразу после переключения канала. Как предположение - возможно компилятор "оптимизировал" это дейтсвие в вашем случае? Изменено 29 сентября, 2011 пользователем SAWushka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 29 сентября, 2011 Опубликовано 29 сентября, 2011 · Жалоба Какой трансформатор используете в качестве датчика напряжения (T3)? Обычный, как в БП. Использовал сперва 2 транса (один на питание, 2-й для измерения), потом купил какую-то китайчатину с 2-мя независимыми вторичками. На нём написано T08339A. 2 вторички по 15в. Никакой разницы не заметил. Только R2 подкрутил, чтобы синусоида была в границах где-то 0.5-4.5в и всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 29 сентября, 2011 Опубликовано 29 сентября, 2011 (изменено) · Жалоба Вот изобразил текущую схему. Может уже оффтоп в данной теме. Выдернул из колодки контроллер и снял осциллограмму на ADC2 oтносительно ADC0 - рис 1. Рис 2 - просто увеличенный кусок. Вольтметр AC показывает 0.03-0.04в. При подключении T3 становится 0.06-0.07в. Откуда лезут эти 50 Гц, не могу понять... Питание смотрел, оно чистое. Осциллограф - цифровой UNI-T UT-81B. Всё ничего, но в программе, на скриншотах размерности по осям хрен знает какие ... Изменено 29 сентября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 1 октября, 2011 Опубликовано 1 октября, 2011 · Жалоба Пропускайте первое измерение после смены канала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 9 октября, 2011 Опубликовано 9 октября, 2011 · Жалоба Всё работает. Сделал 50 нс ожидания после переключения канала и 3 холостых выборки. АЦП без прерываний, по опросу. Пока нормально. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться