Stm32f4 считает импульсы (как отрегулировать напряжение переднего фронта?)

На данный момент я использую TIM2 на stm32f4 - Discovery Board для подсчета импульсов (нарастающих фронтов). Как я могу настроить пороги для нарастающих фронтов? Я хочу подсчитать импульсы 1 В. На данный момент можно просто считать импульсы 2В. Я не могу найти что-то об этом в документации.

Вот код моей функции таймера.

void timer_2_pulse_counter_gpioa1_Init(){
    RCC->AHB1ENR |= 0x01; // 1: IO port A clock enabled
    //RCC->AHB1ENR |= 0x10; // 1: IO port E clock enabled

    // APB1 peripheral reset register
    RCC->APB1ENR |= 0x01; // 1: enable TIM2

    // GPIO port mode register (GPIOx_MODER)
    GPIOA->MODER |= 0x00000008; // 10: Alternate function mode PA1 => AF mode
    GPIOA->AFR[0] |= 0x00000010; // 1000: Must refer to AF1 (alternate function for TIM1/ TIm2)
    GPIOA->PUPDR |= 0x00000008; // Sets pull down resistor for PA1

    // CCMR!: capture/compare mode register 1
    TIM2->CCMR1 |= 0x0100; // CC2 channel is configured as input, IC2 is mapped on TI2

    // SMCR: Slave Mode control register
    TIM2->SMCR |= 0x0007; // Bits[2:0]  111: External Clock Mode 1 - Rising edges of the selected trigger clock the counter.
    TIM2->SMCR |= 0x0060; // Bits[6:4] 110: selected Trigger: Filtered Timer Input 2 (TI2FP2)

    TIM2->ARR = 0xFFFF; // Set the timer reset on the highest possible value

    TIM2->CR1 |= 0x0001; //0001 Enable Timer
}

Заранее большое спасибо за вашу поддержку!


person max_keller    schedule 18.04.2020    source источник
comment
Эта проблема больше похожа на электронную, чем на программную, поэтому я считаю ее не по теме Stack Overflow. И вопрос, и настоящий ответ выглядят хорошо структурированными, поэтому я голосую за то, чтобы не закрывать его, а перенести на обмен стеками для электротехники.   -  person HelpingHand    schedule 25.04.2020


Ответы (1)


Цифровой вход не может «срабатывать» при определенном напряжении, установленном на уровне программиста. Но вы можете использовать его в аналоговом режиме, используя ADC режим «аналогового сторожевого таймера».

Если у вашего микроконтроллера есть встроенный компаратор (он есть у многих STM32Fxxxx), вы можете использовать его для установки «пускового» напряжения.

person 0___________    schedule 18.04.2020
comment
Спасибо за Ваш ответ. В плате smt32f4-discovery нет встроенного компаратора. Является ли АЦП обычно не слишком чувствительным для подсчета одиночных импульсов. В моем сигнале также иногда бывают пики 0,5 В, которые не следует учитывать?. (Я действительно новичок во встроенном программировании, извините, если некоторые вопросы действительно тривиальны) - person max_keller; 19.04.2020
comment
если ваш микро не имеет cmplarators и ваш сигнал является мусором, вам нужна внешняя схема (ФНЧ + компаратор) для этой задачи. Вы также можете читать конгнопусно АЦП и выполнять фильтрацию в программном обеспечении, но, конечно, это будет намного медленнее. - person 0___________; 19.04.2020
comment
Хорошо, спасибо за помощь. Даже если это не работает, ваши ответы сэкономили мне много времени. - person max_keller; 19.04.2020