Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
sssema96
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 33
1

Захват сигнала

11.03.2018, 20:43. Просмотров 600. Ответов 9
Метки нет (Все метки)

Здравствуйте. Подскажите, есть сигнал с длительностью восходящего фронта(1) - 300 мкс,периодом в 10мс, и амплитудой 180мВ. Может ли контроллер STM32F429 захватить такой сигнал?
0
Миниатюры
Захват сигнала   Захват сигнала  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2018, 20:43
Ответы с готовыми решениями:

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

Захват и переполнение TIM2
STM8S003F3P6. IAR Stomdalone license 8K. ST-LINK V2. Измеряю длительность периода с помощью...

STM32F4+таймеры+захват
Всем привет! Продолжаю мучить таймеры и форумчан=)) Перешел к изучению режима захвата. В...

Захват шим с rc-приемника для квадрокоптера
Хочу написать радиоперехватчик под stm32f103 для коптера. Нужно принять 4 шим сигнала -газ, крен,...

STM32: Захват состояния порта в DMA
Вопрос возник: а можно ли при помощи DMA захватывать состояние 8 бит какого либо порта STM32...

9
_SayHello
656 / 380 / 120
Регистрация: 30.07.2015
Сообщений: 1,331
11.03.2018, 21:53 2
sssema96, может, режим таймеров Input Capture, только усилить бы надо
0
sssema96
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 33
12.03.2018, 21:15  [ТС] 3
_SayHello, Не могли бы вы помочь? Решил я значит с самого простого начать и попробовать элементарный захват сигнала сделать. Вот кое как есть такой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void capture (void)
{
    GPIO_InitTypeDef GPIO_Init_Led;
    TIM_TimeBaseInitTypeDef Tim_user_init;
    TIM_ICInitTypeDef TIM_ICInit_user;
 
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
 
    GPIO_Init_Led.GPIO_Mode=GPIO_Mode_AF;
    GPIO_Init_Led.GPIO_OType=GPIO_OType_PP;
    GPIO_Init_Led.GPIO_Pin=GPIO_Pin_2;
    GPIO_Init_Led.GPIO_PuPd=GPIO_PuPd_DOWN;
    GPIO_Init_Led.GPIO_Speed=GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_Init_Led);
 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
 
    Tim_user_init.TIM_ClockDivision=TIM_CKD_DIV1;
    Tim_user_init.TIM_CounterMode=TIM_CounterMode_Up;
    Tim_user_init.TIM_Period=0xFFFF;
    Tim_user_init.TIM_Prescaler=0;
 
    TIM_TimeBaseInit(TIM2, &Tim_user_init);
 
    TIM_ICInit_user.TIM_Channel=TIM_Channel_2;
    TIM_ICInit_user.TIM_ICFilter=0;
    TIM_ICInit_user.TIM_ICPolarity=TIM_ICPolarity_Rising;
    TIM_ICInit_user.TIM_ICPrescaler=TIM_ICPSC_DIV1;
    TIM_ICInit_user.TIM_ICSelection=TIM_ICSelection_DirectTI;
 
    TIM_ICInit(TIM2, &TIM_ICInit_user);
 
    NVIC_EnableIRQ(TIM2_IRQn);
 
    TIM_ITConfig(TIM2, TIM_IT_CC3, ENABLE);
    TIM_Cmd(TIM2, ENABLE);
    }
uint16_t capture_data=0;
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_CC3)==SET)
{
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
    capture_data=TIM_GetCapture3(TIM2);
    }
}
int main(void)
{
    capture();
    TIM2_IRQHandler();
    while(1)
    {
    }
}
Подаю на ножку PA2 опорное напряжение контроллера(через перемычку, тоже самое что и кнопку нацепить), но сигнал не захватывает, и значение переменной не меняется. В чем беда?
0
locm
2199 / 924 / 118
Регистрация: 28.10.2011
Сообщений: 3,069
Записей в блоге: 6
12.03.2018, 22:02 4
Настраиваете 2 канал таймера, а после разрешаете прерывания и обрабатываете их для третьего канала.
1
sssema96
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 33
12.03.2018, 22:54  [ТС] 5
locm, Спасибо, исправил. И я еще забыл подключить альтернативную функцию. GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM2);

Добавлено через 35 минут
locm, А могу ли я например с помощью функции Input Capture захватить свой же ШИМ сигнал выдаваемый с другой ножки моего МК?
0
_SayHello
656 / 380 / 120
Регистрация: 30.07.2015
Сообщений: 1,331
12.03.2018, 22:55 6
sssema96, можете
0
sssema96
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 33
12.03.2018, 23:01  [ТС] 7
_SayHello, Не могли бы вы натолкнуть что и где нужно почитать что бы разобраться?
0
_SayHello
656 / 380 / 120
Регистрация: 30.07.2015
Сообщений: 1,331
12.03.2018, 23:04 8
sssema96, смотрите даташит, режим Output compare, ну либо в гугле Stm32 PWM
0
locm
2199 / 924 / 118
Регистрация: 28.10.2011
Сообщений: 3,069
Записей в блоге: 6
12.03.2018, 23:40 9
Цитата Сообщение от sssema96 Посмотреть сообщение
могу ли я например с помощью функции Input Capture захватить свой же ШИМ сигнал
http://we.easy electronics.ru/STM32/...a-chast-1.html (уберите пробел в ссылке, потому что форум блокирует этот сайт).
http://robocraft.ru/blog/ARM/739.html
0
sssema96
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 33
14.03.2018, 20:50  [ТС] 10
locm, Спасибо. Я посмотрел код и немного не понял. Для захвата сигнала таймером в режиме ШИМ, какому значению должно соответствовать напряжения что бы контроллер смог понять где лог 1, а где лог 0? Мили вольты он же не увидит?

Добавлено через 4 часа 59 минут
Подскажите пожалуйста, как правильно настроить обработчик захвата сигнала что бы он моментально реагировал на изменение логического состояния(период и другие вещи измерять не нужно). Вот настройка самого таймера:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void capture (void)
{
    GPIO_InitTypeDef GPIO_Init_Led;
    TIM_TimeBaseInitTypeDef Tim_user_init;
    TIM_ICInitTypeDef TIM_ICInit_user;
 
    //***********************НАСТРОЙКА КОНФИГУРАЦИИ НОЖКИ*********************************
 
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    GPIO_Init_Led.GPIO_Mode=GPIO_Mode_AF;
    GPIO_Init_Led.GPIO_OType=GPIO_OType_PP;
    GPIO_Init_Led.GPIO_Pin=GPIO_Pin_1;
    GPIO_Init_Led.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_Init_Led.GPIO_Speed=GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_Init_Led);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
        GPIO_Init_Led.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_Init_Led.GPIO_OType=GPIO_OType_PP;
        GPIO_Init_Led.GPIO_Pin=GPIO_Pin_3;
        GPIO_Init_Led.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_Init_Led.GPIO_Speed=GPIO_Speed_2MHz;
        GPIO_Init(GPIOC, &GPIO_Init_Led);
 
    //************************НАСТРОЙКА ТАЙМЕРА**************************
 
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //Подаём такты на TIM2
    Tim_user_init.TIM_ClockDivision=TIM_CKD_DIV1;
    Tim_user_init.TIM_CounterMode=TIM_CounterMode_Up;
    Tim_user_init.TIM_Period=0xFFFF;
    Tim_user_init.TIM_Prescaler=84-1;           //частота 84МГц, один тик таймера - 1мкс
    Tim_user_init.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM2, &Tim_user_init);
 
    //************************НАСТРОЙКА РЕЖИМОВ ТАЙМЕРА**************************
 
    TIM_ICInit_user.TIM_Channel=TIM_Channel_2;                  // Второй канал
    TIM_ICInit_user.TIM_ICFilter=0;                             // Без фильтра
    TIM_ICInit_user.TIM_ICPolarity=TIM_ICPolarity_Rising;       // счёт: по нарастанию
    TIM_ICInit_user.TIM_ICPrescaler=TIM_ICPSC_DIV1;             // без делителя
    TIM_ICInit_user.TIM_ICSelection=TIM_ICSelection_DirectTI;   // источник: прямо с ножки
    TIM_ICInit(TIM2, &TIM_ICInit_user);
 
      TIM_PWMIConfig(TIM2, &TIM_ICInit_user);
      TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); //источник для триггера: вход 2 (PA1)
      TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);// По событию от триггера счётчик будет сбрасываться.
      TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);//Включаем события от триггера
 
    NVIC_EnableIRQ(TIM2_IRQn);              //Разрешаем прерывания таймера TIM2
    TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); //Разрешаем таймеру генерировать прерывание по захвату
    TIM_Cmd(TIM2, ENABLE);                  //Включаем таймер
    }
Добавлено через 19 часов 45 минут
И все таки интересно получается, таймер захвата срабатывает только на опорное напряжение. Если подавать с ножки ничего не происходит. Так и должно быть?
0
14.03.2018, 20:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2018, 20:50

Захват сигнала с осциллографа
Здравствуйте! У меня есть программа написанная в среде Matlab, которая выполняет захват сигнала с...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru