Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Система управления синхронным многофазным электрод

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5108

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Ок, это усвоил твердо. Подобного больше не повторю.

Можно еще вопрос?
Рассмотренной схемой я анализирую временной интервал между фронтами двух импульсов.
Теперь мне нужно выполнить одну из трех операций:
1) Если измеренный интервал находится в диапазоне между двумя константами на входе мультиплексоров, ничего не делаем.
2) Если интервал короче меньшей константы, нужно уменьшить состояние счетчика (на схеме его нет), в котором уже что-то есть, на определенную константу.
3) Если интервал длиннее большей константы, нужно увеличить состояние счетчика на другую константу.

Счетчик формирует ШИМ, и мне нужно изменять скважность импульсов. У него есть шина параллельной загрузки, и все необходимые входы (clk, sload, и т.д.) У меня получается очередной многоэтажный огород...
Как это сделать оптимальным образом?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5109

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Еще вопрос. Компаратор может иметь полдюжины выходов (le, lt, eq, ne, и т. д.).
Можно ли на Верилоге заставить один и тот же компаратор сравнивать operandA (сигнал на входе А) с двумя разными константами, подключаемыми по очереди ко входу В (operandB), а результаты сравнений присваивать разным выходам?
Предполагаю, что здесь возможна конструкция с использованием двухуровневых (вложенных) if/else. Так ли это?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5110

Если я правильно понял, у вас уже все есть. Не хватает только одного компонента "LPM_ADD_SUB".
На его вход "а" подаете выход счетчика, на вход "в" выход мультиплексора, переключающего константы, на вход "add_sub" и селектор мультиплексора выход какого-то из
компараторов, нужно только сообразить какого. Выход "LPM_ADD_SUB" и выход от "OR" на паралельную загрузку счетчика.
Непонятно только с моментом совершения этого действа, здесь нужно подумать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от umarsohod.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5111

KIV пишет: Еще вопрос. Компаратор может иметь полдюжины выходов (le, lt, eq, ne, и т. д.).
Можно ли на Верилоге заставить один и тот же компаратор сравнивать operandA (сигнал на входе А) с двумя разными константами, подключаемыми по очереди ко входу В (operandB), а результаты сравнений присваивать разным выходам?
Предполагаю, что здесь возможна конструкция с использованием двухуровневых (вложенных) if/else. Так ли это?

Давайте, чтобы не было "каши в голове", схемы, так схемы.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5112

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Эту операцию нужно выполнять в цикле, постоянно.
При старте системы, в счетчик, генерирующий ШИМ импульсы, записывается начальный параметр скважности выходных импульсов (допустим, для 8 разрядного ШИМ, стартовая константа - 100). Затем, в зависимости от внешних условий, требуется увеличивать или уменьшать скважность импульсов, при этом величина "шагов" увеличения и уменьшения скважности разная, допустим - "шире" на 5, а "уже" - на 3. Т.е. записанная в счетчик ШИМ константа будет изменяться после каждого измерения интервала так (пример из пальца): 100+5, 105+5, 110-3, 107-3, 104+5, и т.д.
Как сюда привязать предлагаемый Вами сумматор, пока не понимаю. Я бы просто загружал каждый раз новую константу, с учетом текущих изменений.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5113

Как раз сумматором можно к текущему значению сначала +5 зетем опять +5 затем -3 и т.д.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5114

Еще один момент, мне кажется вы ШИМ не совсем правильно делаете.
Насколько я понимаю , счетчик должен быть циклический с компаратором на выходе, который сравнивает значение счетчика с
с регистром хранения величины ШИМ.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5115

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Вот эту конкретную ситуацию мне было бы проще обсуждать не на схемном, а на программном языке. Знаю, как это реализовать на АСМе для Атмеловского камня, но не представляю, как это сделать на логической "рассыпухе".

Вот как сделан ШИМ:
// Модуль формирования ШИМ сигнала
module PWM (clk, clk_p, dat, out_pwm);

	input wire clk; 	// Клок
	input wire clk_p;  	// Частота импульсов ШИМ
	input wire [7:0] dat;  	// Дата, задающая скважность импульса ШИМ
	output reg out_pwm; 	// Выход импульсов ШИМ
	reg[7:0] counter;  	// 8-разрядный счетчик

always@(posedge clk)

begin
if(counter <= dat) 		// Если состояние счетчика меньше или равно dat,
   out_pwm <= 1'b1; 		// на выходе "1",
else                 		// иначе
   out_pwm <= 1'b0; 		// на выходе "0".
counter <= counter + 8'b1;    // Инкремент счетчика
end

endmodule

Не вижу проблемы в том, чтобы периодически модифицировать и обновлять dat. Или что-то не так?

Понимаю, что компаратор присутствует здесь в неявном виде: if(counter <= dat) . Но я его ГЛАЗАМИ не вижу, и поэтому не думаю, как его реализовать. :lol:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от KIV.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5116

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Пример, как делать на мелких модулях. Потом, по мере набора опыта, можно сразу писать большие модули.
module top(clk,p1,p2,out_pwm);
 input clk;
 input p1,p2;
 output out_pwm;
 wire[7:0]dat;
 wire[9:0]t12;
 wire en1,en2;
 det m1(clk,p1,en1); //выделение фронта импульса p1	
 det m2(clk,p2,en2); //выделение фронта импульса p2	
 tdc m3(clk,en1,en2,t12); //измерение интервала t12 между фронтами p1 p2
 upd m4(clk,t12,dat); //сравнение t12 и обновление параметра dat
 pwm m5(clk,dat,out_pwm);
endmodule

module det(clk,p,en);
 input clk,p;
 output reg en;
 reg old;
 always@(posedge clk)old<=p;
 always@(posedge clk)begin
  if((old==0)&&(p==1))en<=1;
  else en<=0;
 end
endmodule

module tdc(clk,en1,en2,t12);
 input clk,en1,en2;
 output reg[9:0]t12;
 reg[9:0]cnt; 
 always@(posedge clk)begin
  if(en1)cnt<=0;
  else cnt<=cnt+1;
  if(en2)t12<=cnt; 
 end
endmodule

module upd(clk,t,dat);
 input clk;
 input[9:0]t;
 output reg[7:0]dat=100;
 always@(posedge clk)begin
  if(t<620) dat<=dat-3;
  if(t>837) dat<=dat+5;
 end
endmodule

module pwm(...
...
endmodule

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Система управления синхронным многофазным электрод 5 года 3 мес. назад #5117

  • KIV
  • KIV аватар Автор темы
  • Не в сети
  • Давно я тут
  • Давно я тут
  • Сообщений: 121
  • Спасибо получено: 5
Еще бы комментарии добавить к Вашему примеру. Цены бы не было...
Вы в очередной раз забываете, что я не программер, и не умею читать с листа даже такие "простые" коды.

Но попробую разобраться. Что хоть искать там? :oops:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.238 секунд
Работает на Kunena форум