реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Модель цифрового счетчика в Simulink, Как правильно?
ksv198
сообщение Mar 30 2006, 06:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Встала вот задачка смоделировать в Simulink'е цифровой многоразрядный счетчик с обратными связями (для нужного коэффициента деления). Нарисовал для тренировки 4-х разрядный двоичный на D-триггерах. Без обратных связей все делит как полагается. При попытке сделать его десятичным (обратная связь через 2И элемент) ругается. Ввожу задержку в обратной связи - ругаться перестает, но моделирует неправильно sad.gif .
Подскажите плз, что не так? Модельку прилагаю. Там синим выделен "функциональный" счетчик, он работает ОК, но мне надо именно модель с выходами всех разрядов.
Прикрепленный файл  v1_2.rar ( 4.32 килобайт ) Кол-во скачиваний: 282
Go to the top of the page
 
+Quote Post
NickNich
сообщение Mar 30 2006, 07:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593



Рассчитайте, каким будет состояние Вашего счётчика на Д-триггерах после прихода первого активного фронта тактового сигнала, если начальное состояние этого счётчика было - все нули. Потом проверьте, как из этого состояния формируется сигнал сброса. Получится весело smile.gif)

И учтите, что линия задержки, в Вашем случае задерживает не на период клока, а на период выборки. У Вас Sampling time = 0.1, а период клока - два периода выборки.
Go to the top of the page
 
+Quote Post
ksv198
сообщение Mar 30 2006, 07:54
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(NickNich @ Mar 30 2006, 11:09) *
Рассчитайте, каким будет состояние Вашего счётчика на Д-триггерах после прихода первого активного фронта тактового сигнала, если начальное состояние этого счётчика было - все нули. Потом проверьте, как из этого состояния формируется сигнал сброса. Получится весело smile.gif)

И учтите, что линия задержки, в Вашем случае задерживает не на период клока, а на период выборки. У Вас Sampling time = 0.1, а период клока - два периода выборки.

Я понимаю, что идеализованное моделирование приводит к неопределенностям при расчетах. Однако в жизни если спаять такой счетчик он работать будет, реально! И делить на 10 будет! Что в Simulink'е сделать надо, чтобы похоже на реальность было?
Go to the top of the page
 
+Quote Post
NickNich
сообщение Mar 30 2006, 08:17
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593



Вы правда пробовали спаять счётчик именно по той схеме, которую нарисовали (т.е. четыре д-триггера, и линии Q1 и Q3 объединены по И и заведены на сигнал сброса)? И оно делит на 10?

Объясняю - если начальное состояние счётчиков все нули, то после прихода первого фронта выход Q0 переключится в 1, ето вызовет появление автивного фронта на тактовом входе второго триггера, т.е. Q1 переключится в 1 и т.д. Т.е. после первого фронта у вас на выходе счётчика будут все единицы. Далее, ваша схема формирует сигнал асинхронного сброса, который сбрасывает все счсётчики в нули. Что будет дальше - понятно?
Go to the top of the page
 
+Quote Post
ksv198
сообщение Mar 30 2006, 11:19
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(NickNich @ Mar 30 2006, 12:17) *
Вы правда пробовали спаять счётчик именно по той схеме, которую нарисовали (т.е. четыре д-триггера, и линии Q1 и Q3 объединены по И и заведены на сигнал сброса)? И оно делит на 10?

Объясняю - если начальное состояние счётчиков все нули, то после прихода первого фронта выход Q0 переключится в 1, ето вызовет появление автивного фронта на тактовом входе второго триггера, т.е. Q1 переключится в 1 и т.д. Т.е. после первого фронта у вас на выходе счётчика будут все единицы. Далее, ваша схема формирует сигнал асинхронного сброса, который сбрасывает все счсётчики в нули. Что будет дальше - понятно?

Поверьте, счетчики с отличным от степени 2 коэффициентом деления паял и не раз. Конечно не на D-триггерах, а на интегральных счетчиках. И то, что в приведенной мной модели не верно работает схема на триггерах я тоже понимаю. Как сделать-то чтобы работало? Введение задержек после каждого триггера (на 2-4-8-16 тактов) не помогает. Как построить реально работающую модель 4-х разрядного двоичного счетчика?
Go to the top of the page
 
+Quote Post
NickNich
сообщение Mar 30 2006, 12:37
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593



На тех д-триггерах, которые Вы установили, и при той схеме счётчика, которую выбрали - сразу не сделаете. Придётся городить костыли.

1. Переставьте выходные разряды счётчика с прямых выходов триггеров на инверсные. В этом случае, счётчик будет считать в прямом направлении (сейчас он считает в инверсном, от 15 до 0).

2. Дешифратор выходного значения счётчика для формирования строба асинхронного сброса лучьше делать на полное состояние, т.е. чтобы он распознавал знавение 1010, а не два бита, как сейчас сделано.

3. При такой организации счёта, счётчик будет повторяться каждые 11 импульсов, т.к. после прихода строба сброса он сбрасывается в 15, и от 15 начинает считать до 10 с прокруткой через 0. Поэтому дешифратор надо настраивать на выходное значение, равное 9, т.е. 1001. Это - обещанный костыль.

А ещё лучше - посмотреть другие схемы организации счётчиков. Выбранная вами - не самая удачная, т.к. на практике имеет длинные просечки при переключении
Go to the top of the page
 
+Quote Post
ksv198
сообщение Mar 30 2006, 13:05
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(NickNich @ Mar 30 2006, 16:37) *
На тех д-триггерах, которые Вы установили, и при той схеме счётчика, которую выбрали - сразу не сделаете. Придётся городить костыли.

1. Переставьте выходные разряды счётчика с прямых выходов триггеров на инверсные. В этом случае, счётчик будет считать в прямом направлении (сейчас он считает в инверсном, от 15 до 0).

2. Дешифратор выходного значения счётчика для формирования строба асинхронного сброса лучьше делать на полное состояние, т.е. чтобы он распознавал знавение 1010, а не два бита, как сейчас сделано.

3. При такой организации счёта, счётчик будет повторяться каждые 11 импульсов, т.к. после прихода строба сброса он сбрасывается в 15, и от 15 начинает считать до 10 с прокруткой через 0. Поэтому дешифратор надо настраивать на выходное значение, равное 9, т.е. 1001. Это - обещанный костыль.

А ещё лучше - посмотреть другие схемы организации счётчиков. Выбранная вами - не самая удачная, т.к. на практике имеет длинные просечки при переключении

Спасибо! Я так понял, что надо модель готовую n-разрядного двоичного счетчика поискать и не мучиться. Предложенный Вами способ мне не подойдет, так как надо моделировать отталкиваясь от реально работающих логических схем, но все равно спасибо за совет.
Go to the top of the page
 
+Quote Post
NickNich
сообщение Mar 30 2006, 13:19
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593



Если необходимо сделать делитель на том счётчике, который нарисован ( обратной счётчике), то логика работы схемы остаётся та же самая. Только значение счётчика, при котором вырабатывается строб асинхронного сброса будет 5 или 6 (т.к. счётчик считает от 15 до нуля, в обратном направлении). В момент сброса он будет сбрасываться в 0, и через него прокручивается в 15 и т.д. Тут надо дешифратор правильно подобрать, будет 4, 5 или 6.

Если настроить дешифратор на 6, согласно логическому уравнению (not(Q(0)|Q(3))) & (Q(1)&Q(2)) сигнал сброса от верхней схемы совпадает с сигналом сброса от нижней (синей) схемы.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016