|
|
  |
Модель цифрового счетчика в Simulink, Как правильно? |
|
|
|
Mar 30 2006, 06:06
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Встала вот задачка смоделировать в Simulink'е цифровой многоразрядный счетчик с обратными связями (для нужного коэффициента деления). Нарисовал для тренировки 4-х разрядный двоичный на D-триггерах. Без обратных связей все делит как полагается. При попытке сделать его десятичным (обратная связь через 2И элемент) ругается. Ввожу задержку в обратной связи - ругаться перестает, но моделирует неправильно  . Подскажите плз, что не так? Модельку прилагаю. Там синим выделен "функциональный" счетчик, он работает ОК, но мне надо именно модель с выходами всех разрядов.
v1_2.rar ( 4.32 килобайт )
Кол-во скачиваний: 282
|
|
|
|
|
Mar 30 2006, 07:09
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593

|
Рассчитайте, каким будет состояние Вашего счётчика на Д-триггерах после прихода первого активного фронта тактового сигнала, если начальное состояние этого счётчика было - все нули. Потом проверьте, как из этого состояния формируется сигнал сброса. Получится весело  ) И учтите, что линия задержки, в Вашем случае задерживает не на период клока, а на период выборки. У Вас Sampling time = 0.1, а период клока - два периода выборки.
|
|
|
|
|
Mar 30 2006, 07:54
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(NickNich @ Mar 30 2006, 11:09)  Рассчитайте, каким будет состояние Вашего счётчика на Д-триггерах после прихода первого активного фронта тактового сигнала, если начальное состояние этого счётчика было - все нули. Потом проверьте, как из этого состояния формируется сигнал сброса. Получится весело  ) И учтите, что линия задержки, в Вашем случае задерживает не на период клока, а на период выборки. У Вас Sampling time = 0.1, а период клока - два периода выборки. Я понимаю, что идеализованное моделирование приводит к неопределенностям при расчетах. Однако в жизни если спаять такой счетчик он работать будет, реально! И делить на 10 будет! Что в Simulink'е сделать надо, чтобы похоже на реальность было?
|
|
|
|
|
Mar 30 2006, 11:19
|
Частый гость
 
Группа: Участник
Сообщений: 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-х разрядного двоичного счетчика?
|
|
|
|
|
Mar 30 2006, 12:37
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 8-11-05
Пользователь №: 10 593

|
На тех д-триггерах, которые Вы установили, и при той схеме счётчика, которую выбрали - сразу не сделаете. Придётся городить костыли.
1. Переставьте выходные разряды счётчика с прямых выходов триггеров на инверсные. В этом случае, счётчик будет считать в прямом направлении (сейчас он считает в инверсном, от 15 до 0).
2. Дешифратор выходного значения счётчика для формирования строба асинхронного сброса лучьше делать на полное состояние, т.е. чтобы он распознавал знавение 1010, а не два бита, как сейчас сделано.
3. При такой организации счёта, счётчик будет повторяться каждые 11 импульсов, т.к. после прихода строба сброса он сбрасывается в 15, и от 15 начинает считать до 10 с прокруткой через 0. Поэтому дешифратор надо настраивать на выходное значение, равное 9, т.е. 1001. Это - обещанный костыль.
А ещё лучше - посмотреть другие схемы организации счётчиков. Выбранная вами - не самая удачная, т.к. на практике имеет длинные просечки при переключении
|
|
|
|
|
Mar 30 2006, 13:05
|
Частый гость
 
Группа: Участник
Сообщений: 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-разрядного двоичного счетчика поискать и не мучиться. Предложенный Вами способ мне не подойдет, так как надо моделировать отталкиваясь от реально работающих логических схем, но все равно спасибо за совет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|