|
AVR и фазовращатель |
|
|
|
Apr 5 2006, 09:21
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Цитата(&-rey @ Apr 5 2006, 12:43)  ... и еще одну которая уже будет крутиться относительно этой опорной подойдет ? А мне показалось, что фаза должна изменяться дискретно, с шагом 1-5 град. О каком "вращении" может идти речь?! Я с самого начала обратил внимание на отсутствие закона изменения фазы.
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
Apr 5 2006, 09:27
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728

|
Цитата(bzx @ Apr 5 2006, 12:12)  Вот чудак-человек! А сразу нельзя было сказать, что твоя частота формируется самим контроллером. Я же в пункте 1. предполагал, что частота подаётся извне. Это всё значительно упрощает. Насколько я понимаю, то что предложил &-rey тебе должно подойти. Если же ты говоришь, что это тебе не подходит, то значит, что то ты чего то не договариваешь в задаче. Я подозреваю, что есть желание, что бы задержка (сдвиг фаз, в прочем это одно и тоже) была не фиксированная, а изменялась во времени. Тогда требуется ещё и скорость изменения фазы и направление изменения. Поясни. Народ, не ужели задача так и не понята вами. Есть меандр, частота его выбирается в момент настройки прибора и дальше в работе остаётся неизменной, этот меандр генерит микроконтроллер. Частота выбирается из диапазона 1-2кГц. Далее эта частота возбуждает катушку индуктивности. С катушки снимается ток и снятый сигнал является так же меандром, он приходит на микроконтроллер. Вот этот самый меандр что приходит с катушки нужно сдвигать по фазе в обоих направлениях от 0 до 180 градусов. Шаг сдвига от 1 до 5 градусов(если смущает диапазон шага тогда пусть будет шаг 1 градус) меняем значение сдвига не во времени, например поменяли угол и смотрим что происходит. Сдвинутый по фазе меандр уже идёт на синхронный детектор который так же находиться в микроконтроллере. Не знаю ещё как объяснить. Может тогда структурную схему выложить? Цитата(Валентиныч @ Apr 5 2006, 15:21)  А мне показалось, что фаза должна изменяться дискретно, с шагом 1-5 град. О каком "вращении" может идти речь?! Я с самого начала обратил внимание на отсутствие закона изменения фазы.  Хорошо, может где то я и ошибся назвав это фазовращением. Сдвиг фазы будет правильно. Но устройство которое сдвигает фазу как называется - сдвигатель фазы?
|
|
|
|
|
Apr 6 2006, 03:41
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Цитата(kanzler @ Apr 5 2006, 15:27)  Хорошо, может где то я и ошибся назвав это фазовращением. Сдвиг фазы будет правильно. Но устройство которое сдвигает фазу как называется - сдвигатель фазы? Принципиальной ошибки разумеется нет. Скорее - терминологическая, которая и не позволила сразу понять вашу задачу. Под "фазовращением" обычно подразумевают процесс непрерывного изменения фазы во времени, обычно по какому-то определенному закону. В данном случае речь идет именно о фазовых (или временнЫх) задержках (именно сдвигах!), что сильно упрощает задачу. А устройство скорее будет называться - линия задержки.  Но, к сожалению, это не позволит менять фазу в обе стороны от реперной. Только в минус... Но - на любое значение, хоть на 3600 град (10 периодов). Формулу, по которой вычисляется фазовая задержка, я написал выше. Надеюсь, что переложить ее на программный код труда не составит? Встречные вопросы: интересно, а как вы собираетесь реализовать генерацию меандра с заданной точностью (1 Гц) в этом диапазоне? И какая, все таки, дискретность изменения фазы вам нужна - 1 или 5 град.?
Сообщение отредактировал Валентиныч - Apr 6 2006, 03:49
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
Apr 6 2006, 06:10
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(kanzler @ Apr 5 2006, 12:27)  Сдвинутый по фазе меандр уже идёт на синхронный детектор который так же находиться в микроконтроллере. ну вот, опять я запутался. А зачем сдвигать фазу для того чтобы подать её на детектор в том же контроллере ? а может просто к результату детектора добавить данную фазу ? Если все таки нужно один из сигналов сдвинуть по фазе, или, что тоже самое, ввести задержку то можно наверное так: Этот сигнал заводим на внешнее INT0 и настраиваем прерывание по изменению. в обработчике INT0 перезапускаем таймер1 а фазу записывем в OCR1A регистр. когда прерывание по OCR1A произойдет меняем состояние выходного сигнала ноги на обратный. (а еще лучьше сразу аппаратно настроить режим перключения спец. ноги OCRA) проблема состоит только в синхронизации входной частоты но это тоже можно сделать либо при старте процессора, либо в его софте когда вы подаете частоту на катушку. PS: Это все только идеи которые нужно проверять ...
|
|
|
|
|
Apr 6 2006, 06:23
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728

|
Цитата(Валентиныч @ Apr 6 2006, 09:41)  Принципиальной ошибки разумеется нет. Скорее - терминологическая, которая и не позволила сразу понять вашу задачу. Под "фазовращением" обычно подразумевают процесс непрерывного изменения фазы во времени, обычно по какому-то определенному закону. В данном случае речь идет именно о фазовых (или временнЫх) задержках (именно сдвигах!), что сильно упрощает задачу. А устройство скорее будет называться - линия задержки.  Но, к сожалению, это не позволит менять фазу в обе стороны от реперной. Только в минус... Но - на любое значение, хоть на 3600 град (10 периодов). Формулу, по которой вычисляется фазовая задержка, я написал выше. Надеюсь, что переложить ее на программный код труда не составит? Встречные вопросы: интересно, а как вы собираетесь реализовать генерацию меандра с заданной точностью (1 Гц) в этом диапазоне? И какая, все таки, дискретность изменения фазы вам нужна - 1 или 5 град.? Я не собираюсь ... я уже реализовал такую генерацию. Всё просто - таймер микроконтроллера это умеет делать без всяких проблем. Дискретность нужна точная, то есть 1 градус, но я понимаю что возможно такой точности не добиться и поэтому задача упрощается до точности 5 градусов Цитата(&-rey @ Apr 6 2006, 12:10)  ну вот, опять я запутался. А зачем сдвигать фазу для того чтобы подать её на детектор в том же контроллере ? а может просто к результату детектора добавить данную фазу ? Если все таки нужно один из сигналов сдвинуть по фазе, или, что тоже самое, ввести задержку то можно наверное так: Этот сигнал заводим на внешнее INT0 и настраиваем прерывание по изменению. в обработчике INT0 перезапускаем таймер1 а фазу записывем в OCR1A регистр. когда прерывание по OCR1A произойдет меняем состояние выходного сигнала ноги на обратный. (а еще лучьше сразу аппаратно настроить режим перключения спец. ноги OCRA)
проблема состоит только в синхронизации входной частоты но это тоже можно сделать либо при старте процессора, либо в его софте когда вы подаете частоту на катушку.
PS: Это все только идеи которые нужно проверять ... Сдвиг фазы нужен для того чтобы было возможно обнаружить металлический предмет из определённого металла. Это связано стеорией ... и думаю вы меня поймёте. На данный момент так и реализованна работа синхронного детектора, по прерыванию INT2 микроконтроллера и работает синхронный детектор. Теперь осталось реализовать сдвиг фазы меандра. Мысль, изложенная вами, очень даже привлекательна. Вы правы её надо проверить.
Сообщение отредактировал kanzler - Apr 6 2006, 06:29
|
|
|
|
|
Apr 7 2006, 06:06
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
В симуляторе прошелся, вроде работает. для примера взял 2-й таймер, т.к. первый наверняка занят под генерацию меандра. фаза утанавливается в OCR2. Длительность периода таймера 2 должна быть больше чем длительность периода формируемого сигнала на катушку. вы писали что он устанавливается при старте, значит посчитать не проблема. HalfPeriod - длительность в тактах 2-го таймера полупериода выдаваемого сигнала соответственно не должна превышать мах число таймера 2 деленное на 2. Точность данного решения не велика, по отношению к выдаваемому сигналу поэтому для этого нужен 16 разрядный таймер, но главное чтоб это было то что необходимо. Тогда возможно сделаем все на одном 16 разрядном и 2-х регистрах сравнения. Например OCR1A делает выходной меандр, на ICR приходит прерывание от входного сигнала (тот который будем сдвигать) а по результату захвата будем писать OCR1B чтобы формировать уже сдвинутый сигнал. Теперь к вопросу о теории. Что понимаем под синхронным детектором. В чем смысел ? Вопрос в том, что если например Вы сдвигаете фазу назад чтобы сигналы наложились и тогда эта фаза и есть результат то тогда можно предложить измерять разность фаз непосредственно. Если проблема в том что нельзя определить знак фазы, то это тоже решаемо. Внесите ясность если эта теория не является закрытой информацией  Тогда возможно предложат больше вариантов решения. PS: В архивчике также дока на линии задержки, ссылок не помню, попробуй Googl-ом по ключевым словам
|
|
|
|
|
Apr 7 2006, 07:00
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728

|
Цитата(&-rey @ Apr 7 2006, 12:06)  В симуляторе прошелся, вроде работает. для примера взял 2-й таймер, т.к. первый наверняка занят под генерацию меандра. так оно и есть. Один таймер у меня генерирует меандр (timer 1), другой запускает внешнее АЦП (timer 3). Цитата(&-rey @ Apr 7 2006, 12:06)  Тогда возможно сделаем все на одном 16 разрядном и 2-х регистрах сравнения. Например OCR1A делает выходной меандр, на ICR приходит прерывание от входного сигнала (тот который будем сдвигать) а по результату захвата будем писать OCR1B чтобы формировать уже сдвинутый сигнал. Вот тут пожайлуста поподробнее. Цитата(&-rey @ Apr 7 2006, 12:06)  Теперь к вопросу о теории. Что понимаем под синхронным детектором. В чем смысел ? Смысл синхронного детектора - определение синфазной или квадратурной составляющей сигнала. То есть мы им определяем, в зависимости от фазы, из какого материала находиться в рабочей области металлический предмет. Например: фаза сигнала от медного металла сдвигается на одно значение, а от аллюминевого металла совсем на другое значение. Таким образом зная величины сдвига фазы можно отстраивать металлодектор от аллюминия и искать только медесодержащий металл. Цитата(&-rey @ Apr 7 2006, 12:06)  PS: В архивчике также дока на линии задержки, ссылок не помню, попробуй Googl-ом по ключевым словам  Спасибо!
|
|
|
|
|
Apr 7 2006, 07:34
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(kanzler @ Apr 7 2006, 10:00)  Вот тут пожайлуста поподробнее. а Вы сначала этот проверьте, если подойдет, тогда можно подумать пополробнее. Цитата Смысл синхронного детектора - определение синфазной или квадратурной составляющей сигнала. То есть мы им определяем, в зависимости от фазы, из какого материала находиться в рабочей области металлический предмет. Например: фаза сигнала от медного металла сдвигается на одно значение, а от аллюминевого металла совсем на другое значение. Таким образом зная величины сдвига фазы можно отстраивать металлодектор от аллюминия и искать только медесодержащий металл. вот и я об этом, зачем сдвигать полученную частоту, если можно просто измерять сдвиг фаз ? А настраивать соответственно коридором изменения фазы. Тут как раз и не понятно, зачем полученную частоту еще двилать, почему не измерять сдвиг сразу ?
|
|
|
|
|
Apr 7 2006, 12:55
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Для задержки сигнала, который УЖЕ имеется в камне (генерится внутри или заводится извне) не требуется внешней линии задержки - все можно организовать программно. Если же требуется "крутнуть" фазу внешнего сигнала (условно - аналогового, т.к. принятый сигнал от датчика металлоискателя с натяжкой можно назвать цифровым), то отлично подойдет отечественная мс 528БР1 - сдвоенная аналоговая ЛЗ на 128 бит (ПЗС). Есть еще 528БР3, длиной 1К, если память не изменяет. Для управления первой требуется двухфазный тактовый сигнал (прямой и инверсный выход любого триггера), для второй достаточно одной фазы (меандр). Тактовые частоты - примерно до 500 кГц, задержку можете посчитать сами.
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
Apr 10 2006, 04:03
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728

|
Цитата(Валентиныч @ Apr 7 2006, 18:55)  Для задержки сигнала, который УЖЕ имеется в камне (генерится внутри или заводится извне) не требуется внешней линии задержки - все можно организовать программно. Если же требуется "крутнуть" фазу внешнего сигнала (условно - аналогового, т.к. принятый сигнал от датчика металлоискателя с натяжкой можно назвать цифровым), то отлично подойдет отечественная мс 528БР1 - сдвоенная аналоговая ЛЗ на 128 бит (ПЗС). Есть еще 528БР3, длиной 1К, если память не изменяет. Для управления первой требуется двухфазный тактовый сигнал (прямой и инверсный выход любого триггера), для второй достаточно одной фазы (меандр). Тактовые частоты - примерно до 500 кГц, задержку можете посчитать сами. Спасибо за предложение, проверю подходит она мне или нет.
|
|
|
|
|
Apr 10 2006, 10:27
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Насколько понимаю кристалл у нас mega128, что не может не радовать  Тогда, раз такой вариант устраивает, делаем следущее: Берем Timer 1 в режиме CTC (ограничение максимума по OCR1A) где число в OCR1A - период выдаваемого меандра. для CK/64 и 8 MHz это как раз 2 кГц и OCR1A=$FFFF Генерацию выходного меандра делаем по OCR1B так: изначально Код OCR1B=0; настраиваем его выход на переключение по сравнению, а в самом обработчике прерывания по сравнению делаем такую штуку Код OCR1B += (OCR1A/2)+1; //+1 нужен для коррекции, чтобы (OCR1A/2)+(OCR1A/2) было = OCR1A+1 if (OCR1B > OCR1A) OCR1B=0; Настраиваем обработчик прерывания по захвату данных Timer 1 в регистр ICR1 Собственно на вход ICR и будет поступать сигнал от катушки. Когда прерывание сработает в ICR уже будет лежать значение фазового сдвига. НО, мы на этом не останавливаемся, хотя мне до сих пор не ясно почему ... Для формирования сигнала сдвинутого по фазе от входного будем использовать OCR1С. изначально Код OCR1С=alpha; // фаза на которую сдвигаем входной сигнал настраиваем его выход на переключение по сравнению, а в самом обработчике прерывания по сравнению делаем так: Код long Comp = (long)OCR1С + (long)(OCR1A/2)+1L; while (Comp > (long)OCR1A) Comp -= (long)OCR1A; OCR1С = (int)Comp; а обработчик прерывания по захвату (ICR) делаем так: Код long Comp = (long)alpha + (long)TCNT1; while (Comp > (long)OCR1A) Comp -= (long)OCR1A; OCR1С = (int)Comp; В последних обработчиках необходима промежуточная переменная Comp для того чтобы не потерять результат при переполнении. В принципе работа аналогично тому, что я приводил ранее с timer 2, только в этом случае мы отталкиваемся не от нуля, а от значения в TCNT1. PS: Ухожу из обсуждения в отпуск, Удачи.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|