|
|
  |
Синхронизируем таймеры. Идеи. |
|
|
|
Mar 22 2016, 09:42
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105

|
Всем доброго времени суток. Никак не могу додумать алгоритм синхронизации с резервированием. Подкиньте идеек по реализации) Как сделал я: есть два таймера, тикающие с частотами 4кГц и 12.8кГц... На ногу мк получаю импульс раз в секунду в качестве внешней синхронизации... От этого импульса тактирую третий таймер, он генерит триггер и сбрасывает два вышеуказанных таймера что обеспечивает их одновременный старт... Грубо говоря, действия начинаются в момент прихода синхросигнала(в нулевой момент времени) => последний тик таймеров 4 и 12.8кГц должен быть (n-1)'й, где n - 4к и 12.8к соответственно... А при отсутствии синхронизации n'й тик этих таймеров является нулевым для следующей секунды и т.д. А теперь о проблемах: Сделал то что выше указал, но из-за того что синхросигнал внешний, кварцы разные, таймеры 4 и 12.8кГц могут успеть добежать до n'го тика раньше чем придет синхросигнал и их сбросит. Можно сделать остановку таймеров после (n-1)'го тика, а синхросигналом их запускать, но тогда система будет зависть очень сильно от синхросигнала, а нужно чтобы и с синхросигналом работало и без него... Подкиньте идеек, как все это провернуть и можно ли вообще ?
п.с. надеюсь смог объяснить хоть как-то, извиняюсь, начинающий... мк: stm32f4vgt6....
|
|
|
|
|
Mar 22 2016, 10:43
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105

|
Цитата(scifi @ Mar 22 2016, 10:09)  Я правильно понял, что нужно "умножить" внешнюю частоту 1 Гц до 4 кГц и 12,8 кГц? Привязка по фазе нужна? Или фазе можно плыть? В каких пределах может плыть фаза (или частота)? Я бы измерял третьим таймером период синхроимпульсов и вычислял бы, на сколько надо скорректировать период таймеров 4 и 12,8 кГц. Если это делать аккуратно, можно и фазу держать. Можно и так сказать, но при потере синхроимпульсов система должна продолжать работать... Фаза +- 1мкС может плавать... А если синхросигнал придет на 1 такт позже, то получу лишнее срабатывание ведь ?
|
|
|
|
|
Mar 22 2016, 11:13
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(Fobes @ Mar 22 2016, 16:43)  Можно и так сказать, но при потере синхроимпульсов система должна продолжать работать... Фаза +- 1мкС может плавать... А если синхросигнал придет на 1 такт позже, то получу лишнее срабатывание ведь ? Лучше, наверное, не сбрасывать таймеры по синхроимпульсу, а фиксировать значения таймеров во время прихода синхроимпульсов, и по отклонению этих значений от требуемых, подстраиваить частоту таймеров. Т.е. сделать ФАПЧ.
|
|
|
|
|
Mar 22 2016, 12:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Две идеи
1. Как-то делал систему, которая должна была измерять время от одного источника частоты, но он мог пропадать и тогда в таких интервалах необходимо было подхватывать менее стабильным на часовом кварце. Я придумал неплохое рещение без проскальзывания.
Основной источник дает временной интервал с некоторым опережением по сравнению со вторичным. По достижению первичным источником конца временного интервала вторичный источник обнулялся и все начиналось сначала. Если вторичный источник пропадал, то с неболшим сдвигом подхватывал вторичный источник. Скажем так: Счетчик первичного сигнала считает миллисекунды до 1000 начиная с нуля, а вторичного начиная с минус двух. При достижении значения 1000 первичный счетчик перезаписывает в себя ноль, а во вторичный -2. Если до 1000 досчитал вторичный счетчик, то он себя обнулил и все. Секундные сигналы генерируются по достижению 1000 любым из счетчиков.
2. Как синхронизироваться по фазе к синусу. Самое нетривиальное -- измерить фазу синуса. Сунус в однобитном представлении позволит определить фазу с точностью до 180 градусов.
Удваиваем точность: Синус и косинус позволяют определить фазу с точностью до 90 градусов: первый квадрант 11, второй 10, третий 00 и четвертый 01
Синус из косинуса получается диференцированием, а проще говоря, вычитанием каждого последующего значения из каждого предыдущего.
Учетверяем точность: квадрат синуса без постоянной составляющей дает функцию удвоенной частоты, плюс ее производная. Добавляем еще один бит.
И так далее. Мне хватило точности в 90 градусов.
Итак расписываем последовательно числа, соответствующие фазам исходного сигнала. Строим машину состояний: Каждой фазе отдельное состояние. Переходы из любого состояния возможны: остаться в текущем состоянии перейти в следующее состояние перескочить через одно состояние вперед. Машина состояний получается достаточно консервативной, чтобы устоять перед некоторыми помехами.
Ну в общем понятно.
|
|
|
|
|
Mar 23 2016, 16:04
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105

|
Всем большое спасибо за варианты) Хотел сделать что-то на вроде фапч, но подумал может есть что-то аппаратное, о чем я не знаю просто ^_^
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|