Найти тему

Генератор линейно-изменяющегося и "треугольного" напряжения в Proteus

При всей моей нелюбви к Proteus все равно часто приходится им пользоваться.

Иногда нужно генерировать треугольники или пилу, а готового генератора нет, тут может помочь только встроенный в ПО программируемый (Scriptable) генератор на Easy HDL.

Язык тут какой-то Паскале-Верилого-образный, справка есть в самой программе. За основу моих генераторов взяты примеры из Help Proteus.

Почему-то Proteus иногда ругается на генератор, пока тот не будет переименован.

А теперь сами генераторы.

1) Генератор пилы

Как-то так
Как-то так

Можно настроить частоту FREQ, амплитуду AMP и смещение от нуля V_OFFSET.

Тут все просто - линейная функция от времени. Чем больше разность между текущим временем REALTIME и запрошенным в таймере t = EVTTIME (EVENT TIME), тем "выше" треугольник, потом они становятся одинаковыми и счет начинается сначала.

Вот такая суперпрограмма:

FLOAT FREQ = 500, AMP = 1.5, V_OFFSET = 0

FLOAT PERIOD = 1/FREQ

FLOAT t = 0

ON TIMER AT PERIOD EVERY PERIOD

t = EVTTIME

ENDON

OUT = V_OFFSET + AMP*(REALTIME-t)/PERIOD

2) Генератор напряжения треугольной формы

Пример с двумя генераторами
Пример с двумя генераторами

Не сильно сложнее предыдущего, только таймера два - первый включает положительный фронт (SLOPE = 1), второй - отрицательный (SLOPE = -1).

Формула OUT найдена исходя из уравнения прямой по двум точкам :)

Текст программы:

FLOAT FREQ = 500, AMP = 1.5, V_OFFSET = 8

FLOAT PERIOD = 1/FREQ

FLOAT SLOPE = 1, t = 0

ON TIMER AT PERIOD EVERY PERIOD

t = EVTTIME

SLOPE = 1

ENDON

ON TIMER AT PERIOD/2 EVERY PERIOD

t = EVTTIME

SLOPE = -1

ENDON

OUT = V_OFFSET + AMP*SLOPE*(4*(REALTIME-t)/PERIOD - 1)

Вот такие пироги, треугольные (эчпочмаки?), может, кому пригодятся