Доброе время суток!
Столкнулся с такой проблемой: Имеется отладочная плата STM32-DISCOVERY с установленным STM32F100RB. Задача состоит в постоянном чтении АЦП и одновременном измерении периода/фазы сигнала с помощью модуля захвата сравнения таймера. Реализовать их в отдельности не составило большого труда. Но проблемы начались после соеденения.
Значит так: На вход TIM15 CC1 подается прямоугольник с частотой 50Гц, имеется прерывание по захвату на фронте, в нем считываю значение, вычитаю предыдущее, получаю так период, принимаю нужное решение. Все работает до тех пор, пока на вход АЦП IN14 не подаю "выпрямленную" синусоиду. (На один период приходится два горба от нуля до 2,2 вольта. Опорное напряжение - 3 вольта. Выбросов и осцилляций сигнал не имеет). Измеренный модулем захвата период тут же уменьшается в два раза. Стоит отсоединить входной сигнал - все возвращается в норму. Сигналы своей формы и тем более частоты не меняют в зависимости от состояния подключений.
Если програмно выключить модуль АЦП, но подавать на вход сигнал - так же все работает нормально. Другой таймер, другие выводы я уже попробовал. Вывод захвата притянут к 3,3 вольта резистором на 1кОм, замыкается на землю через транзистор. На АЦП сигнал приходит с ОУ. Оба сигнала синфазны. Фронт приходится на возрастающее пересечение нуля синусоидой.
Уж не знаю что и поделать. Может кто сталкивался с таким?
STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Реклама
- DrGandalf
- Встал на лапы
- Сообщения: 110
- Зарегистрирован: Пн дек 03, 2012 19:31:53
- Откуда: Санкт-Петербург
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
А можно немного подробнее, как вы период так получаете? Не понял это. Что измеряет ваш модуль захвата, когда АЦП программно отключен?
Или вы утверждаете, что выпрямленная синусоида должна иметь тот же период, что и ее исходный сигнал?
Или вы утверждаете, что выпрямленная синусоида должна иметь тот же период, что и ее исходный сигнал?
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
Ладно, я хотел избежать рисования картинок, но прийдется это делать.

Тут красная линия - входной сигнал 50 Гц.
Зеленая пунктирная линия - Сигнал после "выпрямителя". Подается на вход АЦП.
Синяя точечная линия - сигнал после компаратора, который подается на вход модуля захвата.
Из модуля захвата по прерыванию берем текущее значение таймера, вычитаем из него предыдущее значение (конечно же, с учетом переполнения таймера) и получаем период в попугаях. (В системных тактах в моем случае, так настроен источник тактирования для таймера).
Проблема заключается в том, что при выключенном АЦП и подключенном сигнале или отсоединенном входном сигнале и включенном АЦП получаем правильное значение периода. При включенном АЦП и подключенном сигнале - многие события захвата происходят раньше в два раза, чем получаем истинное событие.
Захват на возрастающий фронт настроен. Это точно.
Тут красная линия - входной сигнал 50 Гц.
Зеленая пунктирная линия - Сигнал после "выпрямителя". Подается на вход АЦП.
Синяя точечная линия - сигнал после компаратора, который подается на вход модуля захвата.
Из модуля захвата по прерыванию берем текущее значение таймера, вычитаем из него предыдущее значение (конечно же, с учетом переполнения таймера) и получаем период в попугаях. (В системных тактах в моем случае, так настроен источник тактирования для таймера).
Проблема заключается в том, что при выключенном АЦП и подключенном сигнале или отсоединенном входном сигнале и включенном АЦП получаем правильное значение периода. При включенном АЦП и подключенном сигнале - многие события захвата происходят раньше в два раза, чем получаем истинное событие.
Захват на возрастающий фронт настроен. Это точно.
- Вложения
-
- 1.gif
- (5.63 КБ) 1113 скачиваний
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
Все. Проблема решена.
Последовательно входу АЦП необходимо добавить резистор на 50кОм. Странно это все.
Последовательно входу АЦП необходимо добавить резистор на 50кОм. Странно это все.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- _AHTOXA_
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт янв 21, 2011 14:16:36
- Откуда: Уфа
- Контактная информация:
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
А вы в обработчике прерывания проверяете источник?
Ну, типа
?
Ну, типа
Код: Выделить всё
if (TIM15->SR & TIM_SR_CC1IF)
{
TIM15->SR = ~TIM_SR_CC1IF;
...
}- Реклама
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
Конечно же я проверяю источник. И флажок сбрасываю. И проверяю переполнение. Программа сейчас сведена до абсурдно простой. Куски инициализации взяты из примеров, тактирование модулей и портов включено, одно прерывание и запущенное АЦП по сравнению таймера._AHTOXA_ писал(а):А вы в обработчике прерывания проверяете источник?
После установки резистора напряжение на входе АЦП стало "не доставать " до земли на целый вольт. Вход точно переведен программно в состояние Analog_IN.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
Можно предположить отсутвие соединения аналоговой и цифровой земель.
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: STM32F1xx: АЦП и ложные срабатывания TIM15 CC1
Спасибо человеку, коорый не полез в мою программу копаться. Проблема с землей тоже имела место быть, но после устранения странный эффект не исчез.Galizin писал(а):Можно предположить отсутвие соединения аналоговой и цифровой земель.
Но вторая проблема оказалась в возбуждении операционного усилителя. При чем он сразу начинал работать нормально, если к его выходу подключить осциллограф. А контролировать состояние выходного сигнала на процессоре в это время мне было нечем. Осциллограф то одноканальный. Дело решилось небольшим конденсатором (200 пф) на выходе ОУ.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...


