Проблема с выходом ШИМ STM32F769 при обновлении в соответствии с условием - PullRequest
0 голосов
/ 29 мая 2019

Я использую плату для дисков STM32F769 с онлайн-компилятором Mbed. Моя задача - изменить частоту ШИМ и коэффициент заполнения в соответствии с входом.

Я создал простой алгоритм в соответствии с моими потребностями, программа работает хорошо, но всякий раз, когда контроллер обновляет частоту ШИМ, возникает странное поведение (возможно, с наложением, мне сложно объяснить устно), частота изменяется мгновенно, и вывод в этот момент неверен . Для других контроллеров (например, arduino) этого никогда не происходит, контроллер обновляет значение по истечении периода времени ШИМ. Но не в этом случае. Что может быть не так?

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

#include "mbed.h"

AnalogIn analog_value(A0);

PwmOut pulse(D11);

int main() {

  double meas_v = 0;
  double out_freq, out_duty, s_time;
  while (1) {

    meas_v = analog_value.read() * 3300;
    if (meas_v < 1) {
      out_freq = 50000;
      out_duty = 40;
    } else if (meas_v >= 1000) {
      out_freq = 100000;
      out_duty = 80;
    } else {
      out_freq = 50000 + (meas_v * 50);
      out_duty = 40 + (meas_v * 0.04);
    }

    pulse.period(1.0 / out_freq);
    pulse = out_duty / 100;
    s_time = 0.0001;
    wait(s_time);
  }
}

Выходные данные должны обновляться после завершения текущего периода, а не мгновенно.

Ошибка, которую я получаю

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Вам необходимо обновить значение в прерывании обновления или использовать режим серийной съемки DMA

0 голосов
/ 29 мая 2019

Базовый код HAL, вероятно, сбрасывает текущее значение счетчика таймера, когда вы устанавливаете новый период.Вам нужно будет прочитать текущее значение cnt таймера и дождаться, пока оно достигнет 0.Вы можете установить новый период, когда значение таймера cnt достигает значения 0.

...