Перейти к содержанию
    

Как измерить сопротивление?

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

Я предполагаю, что дело в потенциометре, которым, как я понял, автор имитирует термодатчик. Механический контакт потенциомера может давать описанное явление, если через него пропускать ток делителя. Для проверки АЦП, переменник нужно включать между землей и питанием, а с "бегунка" снимать выходное напряжение. Тогда будет все нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я предполагаю, что дело в потенциометре, которым, как я понял, автор имитирует термодатчик.

так у него и с термодатчиком до 150мВ шума было... осциллографом надо конечно посмотреть в первую очередь - реальный это шум или "глюки" АЦП

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

... Потому и посоветовал, поставить делитель на постоянных резисторах с большим кондером. И подключить непосредственно к питанию и земле МК, мимо всех лишних проводов. Тогда будет понятно, откуда шум.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Со всеми каналами работаю одинаково:

 

void ADC_Init(void)
{
    //set prescaller and enable ADC

    ADCSRA |= (1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);

    //select reference voltage

    //AVCC Voltage Reference with external capacitor at AREF pin

    ADMUX |= (1<<REFS0);
}

//*****************************************************************************
//  ADC single conversion routine  
//*****************************************************************************
static uint16_t adc_value;
unsigned short adc_conv(uint8_t channel)
{
    //set ADC channel

    ADMUX = (ADMUX&0xE0) + channel;

    //Start conversion

    ADCSRA |= (1<<ADSC);    

    while (ADCSRA & (1<<ADSC));
    
    adc_value = ADCW;   

    return adc_value;
}

 

перекидывал потенциометр на другой канал АЦП - та же петрушка получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark

Ну и замечательно, что одинаково работаете со всеми каналами АЦП. Поставьте делитель на вход, как я рекомендовал, тогда по результату можно о чем-то говорить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Со всеми каналами работаю одинаково:

void ADC_Init(void)

...

Я там криминала не обнаружил, все ОК.

 

если я подсоединяю делитель, запитанный от напряжения питания МК, постоянный резистор 1% и потенциометр, то наблюдается дрожание по 4-5 младшим разрядам.

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

 

В вашем случае (на автомобиле) помеха между землей датчика и землей проца может быть огромной. Корректно организовать измерения следовало бы так:

 

post-2483-1246411296_thumb.png

 

Разбаланс между "левой" и "правой" землями может достигать нескольких вольт в импульсе или десятков милливольт DC. Фильтр R1C1 убивает импульсные помехи. Для того, чтобы убрать DC помехи, надо их вычесть из результата измерения. Для этого вторым каналом АЦП можно померять напряжение на земляном конце датчика и вычесть его из результата, померянного первым каналом АЦП. Резистор R3 нужен для того, чтобы измерять не только положительные, но и отрицательные смещения земляного напряжения датчика.

 

Все показанные на схеме кондеры должны быть присоеденены к земле как можно ближе к земляному пину проца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот R3 совсем не нужен.

Пример. Предположим, что на "земляном" конце Rx присутствует постоянное смещение -100 мВ относительно земли микроконтроллера. Без R3 на входе ADCin2 будет -100 мВ, и микроконтроллер, измеряя канал ADCin2, выдаст результат 0x0000. А с R3, если Vcc=5 B, на входе ADCin2 будет +50 мВ, и АЦП выдаст вменяемый результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В вашем случае (на автомобиле) помеха между землей датчика и землей проца может быть огромной. Корректно организовать измерения следовало бы так:

мне кажется постоянное напряжение смещения (если оно действительно есть) можно просто один раз измерить и учесть программно, чем тратить на это целый порт АЦП. а если у автора несколько датчиков в разных точках кузова (шасси)? под каждый датчик выделять отдельный порт для измерения потенциала земли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример. Предположим, что на "земляном" конце Rx присутствует постоянное смещение -100 мВ относительно земли микроконтроллера. Без R3 на входе ADCin2 будет -100 мВ....

 

Теперь ясно.

Недоглядел :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне кажется постоянное напряжение смещения (если оно действительно есть) можно просто один раз измерить и учесть программно, чем тратить на это целый порт АЦП. а если у автора несколько датчиков в разных точках кузова (шасси)? под каждый датчик выделять отдельный порт для измерения потенциала земли?

Один раз не получится. Оно "постоянное" в том смысле, что неизвестно, сколько оно там торчит, прежде чем исчезнуть или изменить значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример. Предположим, что на "земляном" конце Rx присутствует постоянное смещение -100 мВ относительно земли микроконтроллера. Без R3 на входе ADCin2 будет -100 мВ, и микроконтроллер, измеряя канал ADCin2, выдаст результат 0x0000. А с R3, если Vcc=5 B, на входе ADCin2 будет +50 мВ, и АЦП выдаст вменяемый результат.

Хорошее предположение, а если наоборот +100 мВ, тогда ошибка уже будет 250 мВ. Вы этим резистором просто добавили ошибку в 150 мВ.

Прошу прощения невнимательно посмотрел ртсунок. Если в расчетах компенсировать смещение +150 мВ, тогда все правильно.

Изменено пользователем Tolyaha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошее предположение, а если наоборот +100 мВ, тогда ошибка уже будет 250 мВ. Вы этим резистором просто добавили ошибку в 150 мВ.

почему? приглядитесь, это обычный мост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...