Просмотр полной версии : Вопрос про ШИМ
Dmitry Dedkov
25.06.2024, 14:09
День добрый, возникла необходимость использования ШИМ в обычных DO на ПЛК210-03 тк не хватает быстрых выходов в проекте. Используются для управления пропорциональных клапанов (I=0.3...0.75A, R=13.4Ом и I=0.3...0.5A, R=20,8Ом). МУ210-412 не подходит, поэтому и хочется использовать обычные DO (ну и из-за того что там тоже транзисторные ключи). Написал простой вариант ШИМа для этих выходов, но при включении получаются сильные мерцания. Частота шим должна быть 50 ГЦ. Так вот вопрос: возможно ли избавиться от мерцаний пограммным способом (ошибки в коде, либо же другой варинт исполнения ШИМ), либо же получится только аппаратным
FUNCTION_BLOCK PWM6
VAR_INPUT
pwm_coef: UDINT;
END_VAR
VAR_OUTPUT
out_value: BOOL;
END_VAR
VAR
x: UINT := 0;
COEF17: ARRAY [0..5] OF BOOL := [1,0,0,0,0,0];
COEF34: ARRAY [0..5] OF BOOL := [1,1,0,0,0,0];
COEF50: ARRAY [0..5] OF BOOL := [1,1,1,0,0,0];
COEF67: ARRAY [0..5] OF BOOL := [1,1,1,1,0,0];
COEF84: ARRAY [0..5] OF BOOL := [1,1,1,1,1,0];
END_VAR
CASE pwm_coef OF
0:
out_value := FALSE;
1:
out_value := COEF17[x];
2:
out_value := COEF34[x];
3:
out_value := COEF50[x];
4:
out_value := COEF67[x];
5:
out_value := COEF84[x];
6:
out_value := TRUE;
END_CASE
x := x+1;
IF x > 6 THEN
x := 0;
END_IF
tm_TON(IN:=NOT tm_TON.Q, PT:= UDINT_TO_TIME(REAL_TO_UDINT(1000 * (1.0/50.0)/2.0)));
IF tm_TON.Q THEN
out_value := NOT out_value;
END_IF;
а если так написать, будет мерцание?
Dmitry Dedkov
25.06.2024, 15:17
так вообще ничего не происходит
Dmitry Dedkov
25.06.2024, 15:59
А, я то пытался внутри ФБ использовать код. Но все-равно попробовал и лампочка мерцает + как задать коэффициент заполнения при данном подходе
А, я то пытался внутри ФБ использовать код. Но все-равно попробовал и лампочка мерцает + как задать коэффициент заполнения при данном подходе
желтым выделена требуемая частота
Dmitry Dedkov
25.06.2024, 16:51
Так это частота, а не коэффициент заполнения
Зачем такой маленький период ШИМ при управлении пропорциональным клапаном ?
Dmitry Dedkov
25.06.2024, 16:57
У "недружественной" компании на аналогичной машине частота ШИМ на клапанах 200 Гц, нам бы хотя бы 50-40
Dmitry Dedkov
25.06.2024, 16:57
нет, это про сообщение выше
Dmitry Dedkov
25.06.2024, 16:59
Частоту понятно как задать, а как теперь задать коэффициент заполнения (ширна сигнала/период ШИМ) в этом случае?
Так это частота, а не коэффициент заполнения
Библиотека оскат блок tpx
//50Гц
клапан := заполнение >= time_to_dword(time()) mod 20;
заполнение 0..20 (шаг 1), что есть 0.00..1.00 (шаг 0.05)
Вопрос только в цикле ПЛК.
Точней только железные
Только что узнал о существовании подобных устройств...
Первый вопрос, который возник - увидел в брошюре, что эти клапаны могут дооснащаться преобразователями 4-20 мА -> ШИМ (2 А) - может быть дооснастить штатным устройством?
Dmitry Dedkov
27.06.2024, 16:41
Получилось реализовать ШИМ на основе двух таймеров, только вот мерцания все так же сохранились. Скорее всего это из-за того, что эти выходы работают с максимальной частотой 300 Гц в зависимости от цикла ПЛК
PROGRAM PWM
VAR_INPUT
pwm_coef: UDINT := 0; //1%=10
pwm_freq: UDINT := 20; //в UW
time_set: TIME;
END_VAR
VAR_OUTPUT
out_value: BOOL;
END_VAR
VAR
freqTimer: OSCAT_BUILDING.OSCAT_BASIC.CLK_PRG; //таймер, выводящий сигнал с потоянной частотой
pwmTimer: OSCAT_BUILDING.OSCAT_BASIC.TP_X; //таймер ШИМ
END_VAR
//time_set := REAL_TO_TIME(1000*REAL_TO_UDINT(1.0/TO_REAL(pwm_freq)));
freqTimer(PT := time_set);
//time_set := REAL_TO_TIME(REAL_TO_UDINT((1.0/TO_REAL(pwm_freq))*TO_REAL(pwm_coef)));
time_set := TO_TIME(TO_REAL(T#20ms) * TO_REAL(pwm_coef)/1000);
pwmTimer(IN := freqTimer.Q, PT := time_set);
out_value := pwmTimer.Q;
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot