Я использую плату для дисков 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);
}
}
Выходные данные должны обновляться после завершения текущего периода, а не мгновенно.
Ошибка, которую я получаю
![](https://i.stack.imgur.com/yjlJA.jpg)