leoniv.diod.club

Блок управления ведущим двигателем ДБ-95

Двигатель ДБ-95

В магнитофоне «Электроника-004» применяется ведущий двигатель типа ДБ-95, изготовленный на новосибирском заводе «Точмаш» по лицензии японской фирмы Shinano Tokki.

В первое время вместе с двигателем шла плата управления японского производства.

Имеются слухи, что в первой партии магнитофонов не только плата, но и сам двигатель был японского производства. Но этим слухам нет никаких доказательств. Фирма Shinano Tokki выпускала похожие двигатели, например, для магнитофонов Otari. Но все они имели более длинный вал, чем ДБ-95.

Позже стали устанавливать плату советского производства, которая по размерам была ощутимо больше. В отличие от японской платы, которая поддерживала постоянной среднюю скорость вращения, здесь была реализована полноценная петля ФАПЧ. Правда, опорная частота формировалась обычным RC-генератором, выполненном на ОУ. Но благодаря применению термостабильных емкостей, стабильность скорости вопросов не вызывала. При желании можно очень просто заменить опорный генератор кварцевым. Штатная плата неплохо справляется со своими функциями, но сделана она на устаревшей элементной базе и поэтому очень громоздкая. Внутри магнитофона плата занимает много места и делает неудобным доступ ко всему остальному.

Для двигателей с электронным управлением обмотками само слово «двигатель» применяется ко всему узлу, включая электрическую машину и плату управления. Именно это подразумевается под названием ДБ-95. В паспорте двигателя указано, что это бесконтактный двигатель постоянного тока с напряжением питания 24 В.

В состав ДБ-95 входит синхронная электрическая машина, в которой частота вращения ротора совпадает с частотой вращения магнитного поля. На обмотки синхронной машины поступает переменный ток, который формируется платой управления, хотя сама плата питается постоянным током.

Для подобных двигателей обычно используют названия BLDC (BrushLess Direct Current motor) и PMSM (Permanent Magnet Synchronous Motor, синхронный двигатель с постоянными магнитами). По сути это одинаковые двигатели, есть лишь небольшие отличия в конструкции. Обычно считается, что BLDC имеют трапецеидальную форму ЭДС, а PMSM – синусоидальную. Эта разница получается за счет разной формы полюсных наконечников и способа намотки. У BLDC намотка сосредоточенная, т.е. каждая обмотка занимает один керн магнитопровода, а у PMSM обмотка распределенная, витки уложены в пазы так, что обмотки разных фаз перекрываются.

Двигатель ДБ-95 имеет распределенную обмотку.

Питаться такие двигатели тоже должны по-разному. Форма питающего напряжения у BLDC прямоугольная, для управления обычно используются транзисторные ключи. Такой режим управления называют вентильным, сам двигатель тоже иногда называют вентильным. У PMSM форма питающего напряжения синусоидальная, там тоже используются ключи, но они с помощью ШИМ формируют синус. Сокращение PMSM описывает особенности самой синхронной машины, а не двигателя в целом, как BLDC. Причем из сокращения явно не следует, какая именно там конструкция, поэтому можно сказать, что в том же BLDC используется машина PMSM.

Если запитать BLDC синусоидальным током, а PMSM прямоугольным, это тоже будет работать. Но каждый способ управления имеет свои особенности. Например, при прямоугольном питании у двигателя будет выше шум и больше пульсации крутящего момента. А также выше нагрев и ниже КПД – только первая гармоника тока создает крутящий момент, остальные лишь нагревают двигатель. В то же время при синусоидальном питании могут быть больше потери в инверторе (устройстве, которое формирует из постоянного тока переменный), и КПД в целом может оказаться ниже.

Иногда в названии мотора можно встретить обозначение BLDC/PMSM. В этом случае производитель намекает, что питать такой двигатель можно любым способом.

У ДБ-95 обмотка распределенная, а ЭДС очень близка к синусоидальной. Поэтому по принятой классификации это PMSM. Но в штатной схеме обмотки ДБ-95 питают через транзисторные ключи прямоугольным током, что характерно для BLDC.

Настоящей трапецеидальной ЭДС я никогда не видел, у всех моторов она ближе к синусоидальной с разной степенью кривизны. К примеру, у двигателя от жесткого диска обмотки сосредоточенные, но ЭДС – красивая синусоида. Плата управления двигателем делает из постоянного напряжения переменное, значит это инвертор. Или контроллер? Мне, как неспециалисту в области электропривода, сложно даже подобрать название. Не говоря уже про то, чтобы сделать новую электронику.

Датчик положения ротора

В коллекторных двигателях для коммутации обмоток служит специальное контактное устройство - коллектор. Он закреплен на валу двигателя, поэтому коммутация согласована с углом поворота ротора. В бесколлекторном двигателе коммутацию обмоток производят транзисторные ключи. Для нормальной работы им требуется управляющий сигнал, привязанный к углу поворота ротора. Такой сигнал обычно формирует датчик положения ротора.

В двигателе ДБ-95 используются индуктивные датчики положения. Двигатель трехфазный, значит и датчиков у него три. Сигнал датчиков логический, а не синусоидальный, что позволяет реализовать только вентильное управление двигателем. Каждый датчик представляет собой катушку с П-образным незамкнутым ферритовым сердечником.

Ротор двигателя изготовлен из ферромагнитного материала. Внутри он имеет многополюсный кольцевой магнит. Снаружи у ротора есть немагнитные вставки, расположенные напротив сердечников катушек датчиков положения.

При вращении ротора немагнитные вставки проходят одна за другой напротив сердечников катушек датчиков положения.

Когда напротив сердечника находится ферромагнитный материал, добротность катушки падает. Когда находится немагнитная вставка – добротность увеличивается. Это используется для работы датчиков положения. Катушки включены в схему генераторов Колпитца, или по-другому, емкостной трехточки. Когда напротив сердечника катушки оказывается материал ротора, генерация срывается. Когда проходит немагнитная вставка, генерация снова восстанавливается. Если сигнал генератора выпрямить, получим прямоугольные импульсы, которые можно использовать для коммутации фаз двигателя. Именно так реализована схема на японской плате.

Генератор собран на транзисторе V5. Частота колебаний составляет примерно 300 кГц. Диод VD2 служит для температурной компенсации рабочей точки транзистора. Сигнал генератора снимается с эмиттера транзистора и выпрямляется диодом V8. Пульсации сглаживаются конденсатором C13. Выпрямленное напряжение открывает транзисторный ключ V13, на коллекторе которого формируются импульсы с размахом 5 В, достаточные для работы TTL логики. Первый логический элемент, на который поступают эти импульсы – «исключающее ИЛИ». Он служит для управления инверсией сигналов датчиков: для реверсирования направления вращения двигателя необходимо инвертировать все сигналы датчиков положения.

На советской плате схема более простая внешне, но более непонятная. В ней нет детектора, сигнал на логику подается прямо с эмиттера транзистора генератора.

Чтобы разобраться в схеме, лучше всего использовать в симулятор. Изменение добротности катушки можно имитировать шунтированием ее резистором через ключ. Шунтирующая цепочка подключается к точкам COIL6, COIL7.

Моделирование показало, что генерация при шунтировании срывается, а затем возобновляется снова. И на самом деле, на эмиттере транзистора имеем постоянное напряжение, которое меняется. При наличии генерации на эмиттере напряжение около нуля, видны лишь пульсации с частотой генерации. Когда генерация срывается, напряжение на эмиттере поднимается выше 2.5 В, чего вполне достаточно для срабатывания TTL-логики.

Довольно необычно - на эмиттере имеем фактически продетектированный и сглаженный сигнал, хотя явно в этой схеме ни детектора, ни сглаживающего фильтра нет.

В генераторе Колпитца транзистор включен с общей базой, ее потенциал фиксирован. Следовательно, потенциал эмиттера тоже не может сильно меняться. Но в данной схеме это не так. Если посчитать базовый делитель, то он обеспечивает на базе напряжение примерно 4 В. С учетом тока базы получается немного меньше, т.е. то, что видим на эмиттере в режиме покоя – задано базовым делителем. Но как только начинается генерация, напряжение на базе становится значительно ниже, чем его задает делитель. Это может происходить только в результате увеличения тока базы. Действительно, во время генерации ток базы имеет вид коротких выбросов с частотой генерации и амплитудой до 4 мА.

В линейном режиме работы транзистора таких базовых токов быть не может. Но здесь транзистор входит в насыщение. При этом импульсный ток эмиттера оказывается меньше тока базы - импульсный ток базы проходит через коллекторный переход, который открывается в прямом направлении. Токи коллектора, эмиттера и базы транзистора показаны ниже. Можно видеть, что ток коллектора меняет направление.

Импульсный ток базы сглаживается конденсатром, который включен с базы на землю, в результате потенциал базы во время генерации оказывается постоянным. Именно базовый конденсатор играет роль сглаживающего фильтра в таком генераторе-детекторе на одном транзисторе.

На первый взгляд, схема изящная. Обошлись одним транзистором и вообще без диодов. Но за этой изящностью кроются недостатки. Если посмотреть потребляемый схемой ток, то в режиме покоя он составляет целых 13 мА! Учитывая, что таких генераторов надо три штуки, жалко терять напрасно такой ток.

Размах сигнала на выходе достаточен для работы TTL-логики, но его еле-еле хватает для логики КМОП. И даже такой размах достигнут ценой повышенного напряжения питания: специально для схемы датчика положения сделан стабилизатор с выходным напряжением около 9 В, который довольно сильно греется.

В результате японская схема, несмотря на большее количество деталей, выглядит более изящной. Все, что там происходит, просто и понятно. Тем не менее, я ее тоже промоделировал.

Питается схема от 5 В, на выходе обеспечивает размах практически равный напряжению питания.

Средний потребляемый ток не превышает 500 мкА, схема очень экономична.

В целом японская схема мне понравилась гораздо больше, поэтому ее и взял за основу. Эта схема и так хороша, но все равно можно попытаться ее улучшить. В первую очередь решил попробовать модифицировать детектор.

Вместо диода можно включить эмиттерный переход транзистора, будет то же самое (если не превышать обратное напряжение). Но если при этом на коллектор подать напряжение питания, детектор получит новые качества. Он практически перестанет шунтировать источник сигнала. Тут это весьма кстати, детектор перестанет мешать работать генератору. Одновременно увеличится выходное напряжение. Выходного напряжения такого детектора вполне хватит для работы логики даже без дополнительного ключевого каскада.

Еще одно место, где возможна модификация - это схема смещения на основе диода. Диод там тоже можно заменить транзистором, получив в качестве бонуса низкий выходной импеданс. Хоть схема получается сложнее, зато ее одну можно использовать для смещения всех трех генераторов.

Остатки пульсаций выпрямленного напряжения не должны превышать некоторого значения. Сигнал я планирую подавать не на дискретную логику, а на входы ATmega88, поэтому надо подстраиваться под их характеристики. Пульсации будут присутствовать и на фронтах сигнала, поэтому для предотвращения множественного переключения логики, размах пульсаций должен быть меньше гистерезиса. У ATmega88 при напряжении питания 5 В гистерезис входов составляет примерно 0.45 В. Такое значение можно принять предельным для пульсаций. Чтобы сильно не затягивать фронт, для фильтрации пульсаций можно применить двухзвенный фильтр. Выходное напряжение фильтра на графиках показано красным цветом.

Размах выходного напряжения такого детектора хоть и довольно большой, но уровень логической единицы обеспечивается на пределе (для ATmega88 порог составляет до 2.6 В). Можно добавить ключевой каскад, как в японской схеме, а можно включить транзистор детектора по-другому и воспользоваться его усилительными способностями.

Такая схема дает размах на выходе от 0.8 В до 5 В.

Последний штрих – можно перевернуть схему. Тогда и выходное напряжение будет формироваться от нуля, и катушка датчика будет заземлена одним выводом. Разницы в работе особой не будет, но так просто красивей.

В данном случае нельзя полагаться на результаты моделирования, так как использовалась весьма условная модель датчика. Схема требует проверки на макете совместно с реальным датчиком. Такая проверка показала, что улучшенная схема оказалась непригодной для использования. Колебания генератора не срывались, когда мимо катушки проходила ферромагнитная часть ротора. Изменением несколько номиналов можно добиться срыва колебаний, но при этом всплыла другая проблема. Выходной сигнал был нечеткий, фронт его завален, это выглядело намного хуже, чем в исходной схеме.

Добротность катушки меняется не очень резко: когда приближается ферромагнитная часть ротора, она начинает плавно оказывать влияние. В таких условиях переключения выходного уровня в исходной схеме были очень четкими. Оказалось, что эта схема обладает гистерезисом. При повороте ротора колебания генератора лавинообразно нарастали, а чтобы их погасить, требовалось повернуть ротор обратно на некоторый угол. Природа этого гистерезиса не очень понятна, но факт остается фактом - исходная схема работает гораздо лучше "модифицированной". В результате остановился на этой схеме без каких-либо изменений.

Силовые ключи

Датчик положения ротора формирует логические сигналы для каждой из трех фаз, которые можно использовать для управления силовыми ключами. Напрямую эти сигналы подавать на ключи нельзя, их надо сначала дешифрировать. Сигналы с датчиков положения перекрываются во времени, а надо получить следующие друг за другом три импульса, каждый из которых занимает 120° угла поворота ротора. Угол имеется в виду электрический, а механический в 4 раза меньше, так как двигатель имеет 4 пары полюсов для каждой фазы, и за один оборот на выходах датчиков положения формируются 4 полных периода сигнала.

В японской схеме применяется простой дешифратор на логике:

Элементы «исключающее ИЛИ» на входе служит для инвертирования всех сигналов датчиков положения для реверсирования двигателя.

Три верхних графика – выходные сигналы датчиков положения ротора. Ниже идут две группы по три сигнала. Это сигналы для управления фазами двигателя, показанные красным, желтым и синим цветом. Верхняя группа - для прямого вращения, нижняя – для реверсного. Видно, что при реверсе двигателя сигналы сдвигаются по времени. По этой причине нельзя было сделать сразу готовые сигналы для управления ключами – это работало бы только с вращением в одну сторону.

В советской схеме опять видны следы экономии. На входе те же элементы «исключающее ИЛИ», а дальше идет схема, похожая на многофазный триггер.

На самом деле это обычная комбинаторика, только более запутанная. Которая при некоторых значениях входных сигналов может превратиться в кольцевой генератор (ring generator).

В моем случае дешифрированием сигналов датчика положения занимается микроконтроллер. Весьма кстати пришлось прерывание по изменению состояния пинов, которого нет в ATmega8, но есть в ATmega88. Оно возникает по любому изменению сигналов датчиков положения.

//------------------ Прерывание датчика положения ротора: --------------------

#pragma vector = PCINT1_vect
__interrupt void ChangePhase(void)
{
  TMotor::SwitchPhases();
}

Декодирование сигналов датчиков положения и вывод результата в порты микроконтроллера оформил отдельным методом, так как вызов требуется не только в прерывании, но и после каждого включения двигателя. Иначе двигатель останется стоять на месте, изменений на портах происходить не будет, прерывание вызвано не будет. Чтобы сократить время выполнения обработчики прерывания, этот метод сделал inline.

//----------- Включение фазы двигателя по датчику положения ротора: ----------

#pragma inline=forced
inline void TMotor::SwitchPhases(void)
{
  uint8_t p = 0;
  if(Pin_PosA) p |= PH_A;
  if(Pin_PosB) p |= PH_B;
  if(Pin_PosC) p |= PH_C;
  if(Dir == DIR_FWD)
  {
    if((p & PH_AB) == PH_A) PhaseA();
      else if((p & PH_BC) == PH_B) PhaseB();
        else if((p & PH_CA) == PH_C) PhaseC();
  }
  else if(Dir == DIR_REV)
  {
    if((p & PH_AB) == PH_B) PhaseA();
      else if((p & PH_BC) == PH_C) PhaseB();
        else if((p & PH_CA) == PH_A) PhaseC();
  }
  else PhaseNone();
}

//----------------------- Функции управления фазами: -------------------------

inline void TMotor::PhaseA(void)
{
  Pin_PhB = 0; Pin_PhC = 0; Pin_PhA = 1;
}

inline void TMotor::PhaseB(void)
{
  Pin_PhA = 0; Pin_PhC = 0; Pin_PhB = 1;
}

inline void TMotor::PhaseC(void)
{
  Pin_PhA = 0; Pin_PhB = 0; Pin_PhC = 1;
}

inline void TMotor::PhaseNone(void)
{
  Pin_PhA = 0; Pin_PhB = 0; Pin_PhC = 0;
}

Следующий вопрос - выбор ключей. На первый взгляд, эффективней будет использование ключей на MOSFET-транзисторах. Сопротивление обмоток двигателя составляет 12 Ом, что при напряжении питания 24 В даст ток одной фазы не более 2 А. Больше одной фазы одновременно включаться не будет, это и есть максимальный потребляемый ток всего двигателя. Такой ток он может потреблять во время старта, когда скорость вращения ротора близка к нулю и обратная ЭДС маленькая. С ростом скорости растет ЭДС, которая компенсирует приложенное к обмоткам напряжение, вызывая уменьшение потребляемого тока. На некоторой скорости ЭДС машины станет равной напряжению питания, ток потребления упадет до нуля, двигатель дальше разгоняться не будет. В реальной жизни разгон прекратится немного раньше, когда потребляемая мощность будет равна мощности потерь (на трение и прочих). Но в данном случае важно знать максимальный ток, чтобы правильно выбрать транзисторы ключей. Надо отметить, что при реверсировании двигателя ток может быть еще больше, чем при старте, поэтому ключи надо выбирать с запасом, или делать ограничение тока.

В качестве ключей выбрал MOSFET-транзисторы типа IRLML0060. Они имеют низкое сопротивление канала (примерно 0.1 Ома), что обеспечит низкий нагрев. При суммарном токе потребления двигателя 2 А каждый транзистор будет рассеивать меньше 50 мВт, что позволяет использовать корпуса SOT-23 без радиатора. Потери при переключении тут можно не учитывать – это не высокочастотный ШИМ, а очень редкие переключения обмоток.

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

Вместе с треском на осциллограмме напряжения на обмотках видны большие короткие выбросы.

Пришлось обратиться к схемотехнике прототипов. В японской плате в качестве ключей используются p-n-p транзисторы типа 2SB596. Через эти ключи обмотки двигателя подключаются к питанию +24 В, а для регулировки скорости используется отдельный транзистор.

Транзисторы ключей установлены на радиаторе вместе с регулирующим транзистором.

В первую очередь обращает на себя внимание конденсатор 10 мкФ, подключенный параллельно переходу база-эмиттер транзисторов ключей. Реализовано что-то типа «мягкой» коммутации ключей. Конечно, это вызовет снижение КПД, но тут он нас мало интересует. Хотя необходимость установки ключей на радиатор несколько расстраивает, это ведь конструктивное неудобство.

В советской плате ключи выполнены похожим образом, видим все тот же конденсатор 10 мкФ. В схеме умудрились сделать ошибку – транзисторы ключей на самом деле p-n-p, их тип КТ816В.

На радиаторе видим всего три транзистора. Регулировка скорости осуществляется этими же транзисторами. Тут их и ключами называть неправильно, так как работают они в линейном режиме.

Основная идея понятна – переключение транзистора надо «затормозить», чтобы избавиться от выбросов. Для MOSFET это можно сделать с помощью последовательной RC-цепочки со стока на затвор. Попробовал несколько номиналов, чтобы выяснить зависимость. Выбросы размазываются, появляется видимая задержка открывания ключа, но полностью выбросы не пропадают. Стрекотание двигателя стало чуть тише, но все равно это далеко не та тишина, как у штатной платы.

Решил сделать макет ключа по схеме японской платы. В итоге получил намного более гладкую картину, но двигатель по-прежнему стрекочет!

Подключил штатную плату – двигатель вращается бесшумно. Причина этого различия не совсем понятна.

Бесконтактный двигатель, обмотки которого коммутируются по сигналам датчика положения ротора, способен самостоятельно вращаться, если подать на него постоянное напряжение питания. При этом он очень похож на коллекторный двигатель. Хотим, чтобы крутился быстрее – увеличиваем напряжение питания. И наоборот. По аналогии во время экспериментов я регулирую скорость двигателя изменением напряжением питания.

Но обратил внимание на то, что в японской схеме регулировкой скорости занимается биполярный транзистор, включенный по схеме с общим эмиттером. На базу ему приходит хорошо отфильтрованный сигнал ошибки с регулятора. Фактически, на базе постоянное напряжение. В таком режиме транзистор представляет собой почти генератор тока. В советской плате в линейном режиме работают сами транзисторы ключей, на них одновременно подаются импульсы коммутации, сигнал управления с фильтра частотно-фазового детектора, и сигнал обратной связи по току. С работой выходного каскада советской платы полностью разобраться довольно трудно. Ясно одно – обратная связь по току сделает выходной каскад похожим на генератор тока.

Чтобы проверить идею, запитал двигатель от простейшего генератора тока на составном транзисторе, на базу которого подал постоянное напряжение с переменного резистора. Картина стала совершенно другой. С ключами на биполярных транзисторах, как в японской плате, двигатель заработал совершенно бесшумно. Точно так же, как и со штатной платой. Форма напряжения на обмотках стала близкой к синусоидальной, за исключением небольшого промежутка, где открыт ключ. Там кусочек синусоиды сдвинут вниз на величину, зависящую от тока питания. Фактически, на величину падения напряжения на активном сопротивлении обмотки.

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

Попробовал добавить «тормозящиую» RC-цепочку. Выбросы размазались, но все равно они оставались гораздо больше, чем с биполярными ключами. Двигатель работал, можно сказать, приемлемо, но все же громче, чем с биполярными ключами.

Чтобы более подробно разобраться в работе ключей, решил сделать модель в PSpice. Модель двигателя в общем случае довольно сложна, но в данном частном случае ее можно сильно упростить. Качество работы ключей слабо зависит от скорости двигателя. К тому же, при эксплуатации он будет всегда работать на постоянной скорости. Поэтому вполне допустимо промоделировать его только для одной частоты коммутации. Для создания модели измерил сопротивление и индуктивность обмоток, обратную ЭДС (BEMF) при заданной частоте вращения, а также потребляемый при номинальной нагрузке ток. Каждую обмотку двигателя заменил последовательно включенной индуктивностью, резистором и источником синусоидальной ЭДС (BEMF). Фазы источников сдвинул на 120° друг относительно друга, затем привязал к ним по фазе управляющую последовательность ключей.

Полученные в результате симуляции графики очень хорошо совпадали с картинками на осциллографе.

Напряжение на обмотке двигателя:

Напряжение на ключе:

А это с MOSFET-ключом:

Напряжение на обмотке двигателя:

Напряжение на ключе:

Имея вполне адекватную модель, можно исследовать разные варианты ключей. Хотелось бы использовать MOSFET-ключи, чтобы минимизировать потери и обойтись без радиатора для них. Перепробовал массу вариантов снижения скорости переключения этих ключей. Разные RC-цепочки сток-затвор, снабберные цепочки, асимметричное время открывания и закрывания с диодом в затворе. Все это помогало слабо. Нашел номиналы RC-цепочки, когда выбросы на обмотках были минимальны. Даже собрал этот вариант в железе и проверил.

Напряжение на обмотке двигателя:

Напряжение на ключе:

Двигатель работал приемлемо, но все равно хуже, чем с биполярными ключами. Выбросы почти исчезли, но сама форма напряжения заметно исказилась.

Долгий путь вокруг да около снова вел прямо к биполярным ключам со штатной платы. В чем же секрет их хорошей работы? Решил подробнее исследовать их на модели.

Ток через ключи имеет довольно странную форму. Благодаря конденсатору Б-Э ток затухает по закону, похожему на экспоненциальный. При этом суммарный ток ключей остается почти постоянным. Для MOSFET такого добиться не получилось никак.

Похоже, что старания с MOSFET вообще были напрасны. Основная причина, для чего это делалось, это снижение мощности рассеяния. Но получается следующая картина: если «мягким» включением транзистора удается устранить выбросы, то при этом средняя рассеиваемая мощность получается намного выше, чем для открытого состояния. Rds_on перестает играть роль. На графике ниже показана мгновенная и средняя рассеиваемая мощность для ключа. Видно, что мощность максимальна после окончания управляющего импульса, когда ток ключа спадает, а напряжение на нем увеличивается. На графике ниже синяя линия – управляющие импульсы, розовая – ток, зеленая – мгновенная мощность, красная – средняя мощность.

Работают такие ключи хорошо, но вот их мощность рассеивания мне не нравится. На графике она не такая большая, но моделировался не самый тяжелый режим работы двигателя. Наверняка потребуются радиаторы. Немного спасает положение тот факт, что коллекторы транзисторов ключей заземлены. Их можно припаять к общему земляному полигону, который будет их охлаждать. Теоретически, можно даже сделать этот полигон поближе к крепежным отверстиям платы, тогда тепло сбрасывалось бы на шасси. Хотя пускать какие-то токи по шасси магнитофона безответственно, лучше транзисторы от него изолировать.

До этого все время экспериментировал с нижними биполярными ключами, чтобы было легче сравнивать их с MOSFET. Но регулируемый источник тока для питания двигателя проще сделать привязанным к земле, поэтому хорошо бы ключи перенести наверх. Именно так сделано в японской схеме. Но там используются одиночные транзисторы, которым требуется большой ток базы. Ведь он должен быть рассчитан на пиковое потребление двигателя. В результате этот ток течет все время зря, дополнительно нагревая ключи и резисторы. Можно попробовать применить составные транзисторы.

Составной транзистор позволил значительно уменьшить «тормозящую» емкость. Вместо 10 мкФ в этой схеме достаточно 100 нФ. Все номиналы здесь очень критичны, они сильно влияют на величину выбросов и искажения формы на обмотках двигателя. Впрочем, емкости 10 мкФ из старой схемы тоже были критичны. Шаг вправо, шаг влево – и форма сильно портится. Не удивительно что эти номиналы емкостей перекочевали с японской платы. В новой схеме (зеленый график) форма получилась более красивая, чем в японской схеме (красный график).

Напряжение на ключе тоже получается красивей:

Но самое главное, эта форма достигается при заметно меньшей мощности рассеяния. На графике ниже показана мгновенная (красный график) и средняя (желтый график) рассеиваемая мощность для японской схемы, а также для новой схемы (зеленый и синий графики). Видно, что средняя мощность уменьшилась более чем в два раза. Вполне вероятно, что можно будет обойтись без радиаторов.

Решил проверить новые ключи в "железе", оказалось, что они работают вполне нормально. Форма напряжения не такая сглаженная, как у ключей с емкостью 10 мкФ. В некоторых условиях видны острые иголочки, но они маленькие. Без нагрузки форма напряжения на обмотках близка к чистому синусу:

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

Удивляет хорошее совпадение с моделью - а ведь модель двигателя используется очень примитивная. Приятным сюрпризом стало то, что ключи в новой схеме почти не греются. Погонял двигатель на режимах, близких к реальным рабочим, стало ясно, что ключи обойдутся без радиаторов. Только ради этого стоило затевать все эти эксперименты.

Не обошлось и без неприятных моментов. Когда касаюсь пальцем схемы ключа, на обмотке появляется генерация. В очередной раз удивила модель – когда добавляю на те точки, к которым прикасался пальцем, резистор 1 МОм, вижу на модели точно такую же генерацию! Период составляет порядка 1 мс. Не совсем понял, как тут получается генератор. Будет ли это мешать на практике – тоже непонятно.

Обнаружилась и более плохая вещь: при отключении питания двигатель довольно долго вращается по инерции, в это время ключи работают как синхронный выпрямитель. Через них двигатель питает схему. Все бы ничего, но после выключения слышатся звуки типа "др-р-р, дан-дан-дан, вж-ж-ж, тр-р-р-р", и только после этого двигатель останавливается. Если процессором отследить момент выключения питания, то картина меняется, звуки становятся другими, но эффект никуда не девается. Такое поведение при выключении питания никуда не годится, а как с ним бороться – пока не знаю. Штатная плата выключается без всяких звуковых эффектов.

Еще одна неприятная вещь связана с конструкцией двигателя. Как было сказано выше, датчики положения ротора формируют перекрывающиеся импульсы, с которых могут быть выделены сигналы для управления ключами для любого направления вращения. Коррекция угла коммутации производится механически, с помощью поворота блока датчиков. Для этого имеются прорези. Настроил оптимальный угол по симметрии управляющего импульса относительно вершины синусоиды, получилась красивая картина:

Но когда включил реверс, увидел что-то страшное:

Коммутация сильно запаздывала. Странно, штатная плата ведь нормально работает и на прямом ходе, и на реверсе. Снова ее подключил, вернул прежнюю регулировку двигателя и внимательно посмотрел на моменты переключения. Оказывается, они неоптимальны, причем одинаково для прямого хода и реверса. При этом заводская настройка датчиков положения была далеко от середины. Сделал так же для своей схемы – получил одинаковые погрешности для прямого хода и реверса:

В принципе, эти погрешности не такие большие. Чуть больше будет потребляемый ток, чуть выше шум и неравномерность вращения. Но вряд ли это фатально. Подобный двигатель в магнитофоне Otari использует только одно направление вращения, там такой погрешности нет. Еще как вариант, можно сделать цифровую коррекцию угла коммутации.

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

Самая простая схема с MOSFET-ключами дает красивую форму напряжения на обмотках, но имеет большие выбросы в виде коротких «иголок». Попытки избавиться от этих "иголок" путем добавления емкостей, снабберов и схем асимметричного включения/выключения транзисторов ничего не дают. Площадь выброса остается той же, если его "размазать" по времени, двигатель начинает трещать еще громче. Лучше всего эта схема работала, когда никаких мер по снижению выбросов не предпринималось. «Иголки» на потребляемом токе выглядели как кратковременное его снижение до нуля. Плохо, конечно, но можно поставить фильтр в цепь питания. В остальном схема работала прекрасно и демонстрировала самый высокий КПД из всех вариантов схем. Разгон ровный, после выключения поведение тихое. Только одно «но» – двигатель немного стрекочет. С этим можно смириться, но сравнение с последней схемой ключей на биполярных транзисторах показывает слишком очевидное ее преимущество - с ней двигатель работает совсем бесшумно. Для аудио это очень важно, поэтому можно резюмировать: ключи на MOSFET не подойдут.

Но и финальная схема, на биполярных транзисторах тоже не лишена недостатков. В ней возникает неустойчивость в некоторых условиях, а при выключении питания она ведет себя и вовсе скверно, тарахтя и громыхая двигателем. В дополнение нашелся и еще один недостаток. Эта схема имеет верхние ключи, т.е. на общий провод обмоток двигателя подается минус, а не плюс, как в штатной схеме. В результате при тех же сигналах управления двигатель вращается в другую сторону. И тут всплывает вопрос коррекции угла коммутации. Получается следующая картина: идеальный момент коммутации получается установить только для одного направления вращения. Для другого направления идеальный момент коммутации лежит где-то за пределами диапазона регулировки датчиков. Можно для обоих направлений подобрать такое положение датчиков, где будет одинаковая погрешность. Но эта погрешность довольно заметная. Логично предположить, что двигатель проектировался для определенной полярности включения обмоток. На советской плате на общий вывод подается плюс. Но как же японская плата, где тоже верхние ключи и общий минус? Неужели там обмотки были распаяны по-другому? Впрочем, такое возможно, тот вариант двигателя имел другой разъем.

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

Для уменьшения рассеиваемой мощности надо поскорее закрыть ключ. Для этого надо быстрей разрядить конденсатор 10 мкФ, включенный между базой и эмиттером. Попробовал зашунтировать его резистором. Мощность упала, но появились выбросы. Для борьбы с ними добавил небольшой конденсатор между базой и коллектором предыдущего транзистора. Небольшая коррекция номиналов, и получились параметры, как у предыдущей схемы. Забавно, что все эти компоненты были на схеме советской платы, правда, других номиналов. Но без глубокого исследования модели я бы не смог сказать, зачем они нужны.

Ниже показана мощность рассеяния на транзисторе ключа до модификации (мгновенная – красный график, средняя – желтый график) и после модификации (мгновенная – зеленый график, средняя – синий график). Видно, что синий график заметно опустился.

Проверка в "железе" показала некоторое расхождение с симулятором, пришлось уменьшить постоянную времени RC-цепочки в базе первого транзистора. Но в целом схема заработала очень хорошо. Форма напряжения на обмотках получилась красивая:

Двигатель работает совершенно бесшумно, процесс выключения – тихий, момент коммутации фаз встал на место (стал как у штатной платы), а транзисторы в рабочем режиме чуть теплые. К тому же, выводы коллекторов ключей соединены с землей, а это упрощает охлаждение. Транзисторы можно припаять на плате к полигону земли. Такую схему ключей можно считать вполне подходящей.

Управление двигателем

Двигатель с коммутацией фаз по датчикам положения ротора называют двигателем с автокоммутацией. Он ведет себя подобно коллекторному двигателю. Если подать на него постоянное напряжение питания, он начинает крутиться, постепенно разгоняясь. По мере увеличения частоты вращения растет обратная ЭДС (BEMF), в результате потребляемый ток и развиваемый крутящий момент падает. Как только этот момент сравняется с моментом потерь (трение плюс нагрузка), дальнейший разгон двигателя прекратится. Двигатель будет вращаться с некой постоянной скоростью, величина которой в общем случае неизвестна и зависит от напряжения питания и нагрузки. Нам же надо обеспечить заданную скорость вращения, для чего двигателем надо как-то управлять. Рычагов управления тут немного, а вернее, всего один – это напряжение питания.

Применение двигателя в качестве привода тонвала магнитофона имеет некоторые особенности. Чаще всего важнейшим параметром электропривода является его КПД. Здесь же КПД не имеет решающего значения. Главное требование – обеспечить высокую стабильность скорости, как долговременную, так и кратковременную. Это требование вытекает из необходимости обеспечить постоянную скорость транспортирования ленты и низкий коэффициент детонации. Величина коэффициента детонации для ЛПМ магнитофона «Электроника-004» не превышает 0.04% RMS. Ниже приведен результат измерения детонации на своем экземпляре магнитофона.

Основной вклад в детонацию вносит ведущий двигатель. Спектры детонации магнитофона в целом (сигнал воспроизводился с ленты) и детонации ведущего двигателя ДБ-95 (сигнал снимался с датчика скорости) приведены в книге Ю. Б. Соколов, В. И. Котов «Магнитофоны-приставки высшего класса Электроника ТА1-003, 004». Сняты они при скорости ленты 19.05 см/с. Для этой скорости частота вращения ведущего вала примерно равна 7.75 Гц (вторая гармоника – 15.5 Гц), частота коммутации каждой фазы 31 Гц, всех трех фаз – 93 Гц.

Видно, что основной вклад в детонацию вносит ведущий двигатель, основные пики лежат на частоте вращения ведущего вала и второй гармонике этой частоты. На частоте коммутации фаз двигателя тоже видны небольшие пики, причем это для «мягкой» коммутации фаз штатной платой. Если сделать коммутацию «жесткой», эти составляющие могут заметно увеличиться. Поэтому в ущерб КПД ключи здесь работают с заходом в линейный режим. Косвенно о качестве коммутации можно судить по шуму и вибрации двигателя. Именно по этим критериям я и оптимизировал схему ключей.

В процессе экспериментов с коммутацией фаз было выяснено, что наилучшие результаты получаются при питании двигателя источником тока. Хотя первоначально я планировал сделать регулируемый источник напряжения. Эта схема была забракована, но она может представлять интерес для других применений, поэтому приведу ее здесь.

За основу регулируемого источника напряжения был взят интегральный регулируемый стабилизатор LM317. Он хорош тем, что имеет встроенную защиту по току и перегреву. Это здесь будет весьма кстати. Чтобы управлять выходным напряжением, надо менять потенциал вывода ADJ. Выходное напряжение всегда будет на 1.25 В выше напряжения на выводе ADJ. Это один из недостатков схемы, так как ниже 1.25 В установить на выходе нельзя. Но в данном случае это не имеет значения – такое маленькое напряжение недостаточно для работы двигателя, а полное его выключение может быть сделано закрыванием сразу всех ключей.

В блоке управления двигателем планируется применить один сдвоенный ОУ типа LM358. Одна половинка будет задействована для формирования сигнала датчика скорости. Питание ОУ от источника 5 В позволяет напрямую подключать его выход к входу микроконтроллера. Другую половинку ОУ можно использовать для управляемого источника напряжения. Минимальное падение напряжения на стабилизаторе LM317 в зависимости от тока составляет от 1.5 до 2.25 В, поэтому при питании 24 В на выходе можно получить напряжение примерно до 22 В. Это значит, что на выводе ADJ надо иметь возможность устанавливать напряжение от 0 до примерно 21 В. Выход ОУ не может обеспечить такой размах, придется добавить усилитель на транзисторе.

На вход ОУ будет поступать напряжение с выхода ШИМ микроконтроллера. Фильтрацию этого напряжения пока оставим. Диапазон напряжения на выходе микроконтроллера – от 0 до 5 В. Но принять такой диапазон ОУ не в состоянии, так как LM358 не является rail-to-rail ОУ. Поэтому напряжение надо поделить. Для простоты можно поделить в 2 раза, получится диапазон от 0 до 2.5 В, который этот ОУ обеспечивает как по входу, так и по выходу (по выходу не точно от 0 В, но тут этого и не требуется). Чтобы из 2.5 В сделать 21 В, понадобится усиление 8.4. Лучше сделать больше, чтобы из-за разброса номиналов резисторов не получить потерю диапазона выходного напряжения. Поэтому усиление можно выбрать примерно 9.

Лучше всего подошел полевой транзистор 2N7000, который здесь охвачен цепочкой местной ООС, а все вместе с ОУ охвачено общей ООС, задающей усиление примерно 9. Проверка переходной, частотной и фазовой характеристик показала достаточный запас устойчивости. Обратную связь намеренно брал с вывода ADJ, а не с выхода. Сама LM317 не будет находиться внутри петли обратной связи и не будет влиять на устойчивость. В общем случае точность для такого варианта будет хуже, так как добавляется влияние погрешностей LM317. Но в данном случае это не имеет значения.

Напряжения для разных точек схемы в процессе регулировки показаны ниже:

Следующий вопрос, который надо решить, это фильтрация сигнала ШИМ. Распределяя ресурсы микроконтроллера ATmega88, я забрал единственный 16-разрядный таймер для формирования опорной частоты. Опорную частоту можно формировать двумя способами: счетчиком-делителем или с помощью NCO (Numerically Controlled Oscillator). В первом случае имеем постоянный шаг по периоду, вот втором – по частоте. Но в составе периферии микроконтроллера нет оборудования, на котором можно было бы аппаратно реализовать NCO. А программная реализация сильно расходует ресурсы. Если контроллер больше ничего не делает, использовать NCO вполне можно. Таким способом я делал кварцованный генератор опорной частоты для штатной платы управления двигателем ДБ-95. Там программа написана на ассемблере, процессор почти на 100% загружен. Это позволило реализовать NCO с тактовой частотой 0.5 МГц, что дает джиттер не более 2 мкс. Но когда процессор должен еще выполнять и другие задачи, такая высокая тактовая частота не получится, что сделает джиттер недопустимо большим. Опорная частота здесь нужна довольно высокая (для скорости 19.05 см/с это 1348 Гц), поэтому я выбрал ее генерацию с помощью таймера. В других случаях мог бы быть предпочтителен NCO, например, для винилового проигрывателя, где опорная частота требуется гораздо ниже. 16-разрядный таймер при тактовой частоте 16 МГц позволяет установить 1348 Гц с точностью лучше 0.01%, чего вполне достаточно.

Поскольку единственный 16-разрядный таймер занят, с управлением напряжением питания двигателя надо как-то выкручиваться. Есть несколько 8-разрядных таймеров с ШИМ, но их дискретность слишком велика для качественного управления двигателем. Поэтому было принято решение сделать комбинированный выход: 8-разрядный аппаратный ШИМ дополнить 8-разрядным программным дельта-сигма модулятором (DSM). У такого сигнала основная энергия будет лежать на частоте ШИМ (62.5 кГц) и ее гармониках. Наиболее низкочастотные составляющие суммарного сигнала будут определяться тем, сколько разрядов DSM будет использоваться. Полагаю, можно ограничиться общей разрядностью 14 бит, при этом минимальная частота составит примерно 1 кГц. На этой частоте будет сосредоточена очень незначительная энергия в спектре выходного сигнала, порядка -46 дБ.

Реализован DSM в прерывании таймера, которое возникает с частотой 62.5 кГц. Код в меру сил оптимизирован, но все равно DSM отъедает примерно 15% ресурсов процессора. Что, в общем, не очень страшно.

//--------------------------- Прерывание таймера: ----------------------------

uint8_t TPwm::Pwm_Lo;
uint8_t TPwm::Pwm_iHi;
uint8_t TPwm::Pwm_iHi_plus_1;

#pragma vector = TIMER2_OVF_vect
__interrupt void SigmaDelta(void)
{
  static uint8_t Sigma = 0;
  Sigma = Sigma + TPwm::Pwm_Lo;
  OCR2A = (SREG & 1)? TPwm::Pwm_iHi_plus_1 : TPwm::Pwm_iHi;
}

//------------------------------ Задание PWM: --------------------------------

void TPwm::Set(uint16_t v)
{
  if(v > PWM_MAX) v = PWM_MAX;
  Pwm_Lo = LO(v);
  Pwm_iHi = ~HI(v);
  Pwm_iHi_plus_1 = ~(HI(v) + 1);
}

Исходя из параметров ШИМ-сигнала можно сформулировать требования к фильтру. Здесь они не очень жесткие: на частоте 62.5 кГц желательно получить ослабление 50 – 60 дБ, на частоте 1 кГц достаточно 10 – 15 дБ.

Но не только параметрами ШИМ могут определяться параметры фильтра. Все это будет работать внутри петли цифровой PLL (DPLL), где будет свой цифровой петлевой фильтр. Прежде, чем его проектировать, полезно взглянуть на аналоги. Здесь по-прежнему есть два примера – японская и советская плата управления двигателем.

На японской плате применен простейший регулятор скорости: сформированные импульсы таходатчика дифференцируются, затем формируется сигнал с формой, близкой к пилообразной. С помощью компаратора он сравнивается с постоянным напряжением, с помощью которого задается желаемая скорость. На выходе компаратора получается ЧИМ-сигнал (частотно-импульсная модуляция). Этот сигнал поступает на петлевой фильтр, который выделяет постоянную составляющую. Она используется для управления регулирующим транзистором. Приведенная выше схема взята из книжки Соколова и Котова, которая упоминалась выше. Схема содержит ошибки, мешающие сделать ее симуляцию. Эта же схема приведена в инструкции по ремонту магнитофона «Электроника-004», но тут внесены другие ошибки.

Пришлось искать первоисточник – схему фирмы Shinano Tokki. Это оказалось не очень простой задачей - в схемах магнитофонов Otari, где применялись похожие двигатели, плата управления помечена как некий черный ящик. Схему все-таки удалось найти, но только в виде не очень хорошего скана. Но на ней ошибок не было.

На всякий случай сверился с фотографией японской печатной платы, все совпадает. Ну а дальше дело техники. Нарисовал и промоделировал схему.

Надо сказать, что на сей раз меня ввела в ступор и японская схемотехника. На входе видим пассивное звено ФНЧ 1-го порядка. За ним что-то похожее на активное звено 2-го порядка на эмиттерном повторителе. Если бы не зашунтированный выход эмиттерного повторителя емкостью 33 мкФ. Следующий каскад совсем непонятный, сигнал снимается с коллектора предыдущего транзистора, но есть какая-то обратная связь и на эмиттер. Глядя на схему, не берусь предсказать ее АЧХ. Поручим лучше это симулятору.

На графике видим весьма странную картину – заметный подъем на частоте примерно 93 Гц. Это как раз суммарная частота коммутации трех фаз при скорости ленты 19.05 см/с. Для чего это сделано? Чтобы увеличить усиление в петле на этой частоте и подавить пульсации? По крайней мере, можно придумать какое-то логичное объяснение.

Но мне пока интересно не это. Надо знать, насколько широкую полосу я должен иметь в канале управления двигателем. Вот тот же график в логарифмическом масштабе, на нем лучше видны затухания на разных частотах:

После пика АЧХ быстро спадает, примерно 70 дБ на декаду. На частоте 1 кГц ослабление составляет более 50 дБ, т.е. мой фильтр ШИМ полосу не ограничит.

Схему петлевого фильтра с советской платы я тоже промоделировал. Схема опять довольно непонятная, с какими-то T-цепями вокруг ОУ.

Моделирование дало вот такой результат:

Виден гигантский пик на частоте примерно 64 Гц. Чем примечательна именно эта частота – я не знаю. Никаких сигналов такой частоты в схеме управления двигателем нет, в спектре детонации двигателя на этой частоте тоже никаких пиков нет. В реальной плате, которая у меня есть, емкость конденсатора C2 (см. схему выше) запаяна 3.9 нФ. С ней я и моделировал. На схеме, которая содержится в альбоме схем магнитофона «Электроника-004», эта емкость указана как 47 нФ. Это кардинально меняет ситуацию, пик размазывается и сдвигается на частоту около 17 Гц. На более раннем варианте схемы из альбома эта емкость была 10 нФ, что даст пик на 40 Гц. Такое ощущение, что эту емкость подбирали уже в процессе производства. По отзывам ранние платы имели неустойчивость. Смешнее всего, что этот конденсатор, который при подборе меняют на порядок, окружен точными резисторами типа 178 Ком, 332 Ком и так далее. Такое впечатление, что при создании схемы правая рука не знала, что делает левая.

Если посмотреть на график АЧХ в логарифмическом масштабе, то видно ослабление 26 дБ на частоте 1 кГц. АЧХ тут спадает не так быстро, но все равно полоса не такая широкая.

Теперь можно вернуться к началу, т.е. к регулируемому источнику напряжения. Он должен управляться ШИМ-сигналом, который надо предварительно отфильтровать. Проще всего сделать отдельный фильтр, но для этого понадобится еще один ОУ. А можно в фильтре использовать тот же ОУ, который работает в источнике. Обычно фильтр со структурой Salen-Key использует в своем составе повторитель. Но теоретически такой фильтр может иметь усиление, вот только не все программные пакеты позволяют его рассчитать. Одной из программ расчета, которая это может, является FilterPro фирмы Texas Instruments. Там можно ввести нужное усиление.

В моем случае усиление выбрано из соображений нужного размаха выходного сигнала, с реальными номиналами резисторов оно составляет 9.2. Такое значение ввел в программе. Выбрал фильтр Чебышева 3-го порядка. При фильтрации ШИМ важно иметь первое пассивное звено, чтобы входной каскад ОУ не перегружался ВЧ-сигналом. К сожалению, эта программа не умеет рассчитывать фильтры 3-го порядка без буфера после первого звена. Поэтому я сначала посчитал с буфером, затем перенес схему в симулятор, выбросил буфер и скорректировал номиналы для восстановления прежней АЧХ. Чтобы отсутствие буфера влияло меньше, импеданс компонентов в первом звене надо выбирать возможно ниже. В результате появилась схема, которой не суждено пойти дальше – источник напряжения был забракован на этапе экспериментов с ключами. Возможно, такая схема может пригодиться где-то еще.

На каком-то этапе лучшие результаты показали «верхние» ключи с питанием двигателя от генератора тока. Для этого варианта я начал проектировать регулируемый источник тока, привязанный к земле. В качестве регулирующего элемента взял транзистор Дарлингтона, в эмиттер которого включил датчик тока 0.47 Ом.

Подобрав номиналы, добился устойчивости схемы. Глянул АЧХ – она оказалась не очень, был виден заметный подъем. Но мне это что-то напомнило. Так обычно выглядит АЧХ одного из звеньев многозвенного ФНЧ с большой крутизной среза.

Без всякого расчета добавил на вход пассивное звено, подобрал частоту среза, в результате получилось что-то типа фильтра Чебышева 2-го порядка с частотой среза 330 Гц и пульсациями около 0.3 дБ.

В логарифмическом масштабе видно, что на частоте 1 кГц ослабление составляет примерно 30 дБ, а на частоте 62.5 кГц – более 100 дБ. Спад примерно 42 дБ на декаду. В принципе, можно даже фильтр перестроить немного вверх, такие ослабления здесь не нужны.

Но и этот источник был забракован, так как самая последняя схема содержит «нижние» ключи. Т.е. регулируемый источник тока должен быть привязан к напряжению питания +24 В. Схемотехнически это не очень удобно, но в данном случае задачу можно упростить. Дело в том, что здесь не нужен хороший генератор тока. Он все равно будет внутри петли обратной связи по скорости, поэтому точность и долговременная стабильность его параметров не играют роли. Выходное сопротивление тоже может быть не очень большим. Судя по модели, стремление приблизить генератор тока к идеальному не несет никаких улучшений. Конечно, совсем плохо тоже делать не следует.

Наиболее простой вариант – это сделать управляемый генератор тока внизу (у потенциала земли), а затем отразить ток токовым зеркалом. Такой генератор тока реализуется на одном ОУ и транзисторе. Токовое зеркало будет вне петли ООС этого ОУ, что положительно скажется на устойчивости. К тому же, не придется бояться плохой реакции на выбросы, связанные с работой ключей. Точность, конечно, будет хуже, но это здесь не имеет особого значения – все будет внутри петли регулировки скорости.

Обычно токовое зеркало строится на двух одинаковых транзисторах (рис. A). Отраженный ток равен по величине управляющему току. В данном случае это не подойдет, потому что ток питания двигателя может достигать 2 А, а делать такой большой управляющий ток не имеет смысла. Если в эмиттеры транзисторов токового зеркала добавить резисторы, то отношением их номиналов можно задать желаемое отношение токов (рис. B). Это отношение на практике выдерживается лишь приблизительно, но и этого достаточно. В данном случае разумное значение управляющего тока будет где-то 10 мА. Оно ограничено нагревом компонентов. Отношение токов получается 200. Можно выбрать R2 = 0.47 Ом, R1 = 100 Ом.

При больших токах коллектора коэффициент передачи тока биполярных транзисторов не очень высокий. Например, для транзистора TIP42 при токе 2 А коэффициент передачи тока составляет примерно 50. Получается, ток базы будет достигать 40 мА. Это намного больше управляющего тока, такое токовое зеркало работать не будет. Есть вариант токового зеркала с дополнительным транзистором (рис. C), который способен обеспечить необходимый ток базы. Но такая схема имеет недостаток – дополнительный транзистор будет рассеивать значительную мощность. Гораздо практичней применить схему Дарлингтона (рис. D), тогда ток базы мощного транзистора не теряется зря, а проходит через нагрузку. Недостатком является большее напряжение насыщения, но в данном случае это не так критично.

У транзистора Дарлингтона последовательно включены два эмиттерных перехода, поэтому в левой ветке токового зеркала их тоже должно быть два. Фактически, транзисторы там используются в качестве диодов. Тем не менее, в схемах токовых зеркал обычно рисуются именно транзисторы. Сделано это для того, чтобы получить как можно более близкие характеристики переходов. Но на практике прецизионное токовое зеркало можно реализовать разве что внутри микросхемы. На дискретных компонентах мы лишь весьма приблизительно можем выдержать идентичность переходов, плотности токов в них, температуры. Особенно, если в одном плече используются мощные транзисторы, площадь эмиттерного перехода которых больше в неизвестное число раз. Да еще составные, где токи эмиттеров сильно отличаются. Поэтому в другом плече придется подбирать что-то более-менее соответствующее. Нет смысла туда ставить точно такие же транзисторы.

В простейшем случае эквивалентом двух переходов транзисторов могут служить два последовательно соединенных диода. С ними получается вполне нормальная передаточная характеристика, лишь в самом начале виден небольшой загиб. Падение на выбранных диодах чуть меньше необходимого. Надо сказать, что разные типы диодов в этом смысле сильно отличаются. Например, два диода 1N4148 дают совсем другую картину, чем BAV99.

А вот с температурным коэффициентом все относительно хорошо. У p-n перехода кремниевого диода или транзистора температурный коэффициент примерно равен 2.3 мВ/градус. Ниже приведено семейство графиков, снятое при изменении температуры от 10 до 60 градусов с шагом 10 градусов. Как видим, вариации тока совсем незначительные.

Чтобы не подбирать типы диодов, можно сделать на транзисторе умножитель напряжения Vbe. Это двухполюсник, который ведет себя подобно цепочке диодов. Количество эквивалентных диодов можно плавно менять соотношением резисторов.

На семействе графиков ниже показаны передаточные характеристики для R80 = 3 кОм, 3.3 кОм, 3.6 кОм. Видно, что направление кривизны начального участка может меняться на противоположное. А при номинале 3.3 кОм получаем близкую к линейной зависимость.

Конечно, это только для тех типов транзисторов, которые выбраны в модели. Для других типов оптимальное отношение резисторов будет другим.

Вместе с падением напряжения меняется и температурный коэффициент двухполюсника. С номиналами, приведенными на схеме, этот коэффициент будет больше, чем у двух диодов. Это означает, что с повышением температуры выходной ток будет уменьшаться.

Это свойство может оказаться полезным. Регулирующий транзистор рассеивает значительную мощность и нагревается во время работы. При этом выходной ток растет. Если от транзистора будет нагреваться плата, за счет нагрева второго плеча токового зеркала увеличение тока будет частично компенсироваться. Частично – потому что кристалл регулирующего транзистора всегда горячее. Поэтому некоторый избыточный температурный коэффициент у левого плеча токового зеркала может улучшить компенсацию. Принесет ли это пользу – зависит от тепловой модели устройства. В любом случае, можно взять резисторы одинаковыми, тогда этот двухполюсник будет эквивалентен двум последовательно соединенным диодам.

Генератор тока должен управляться сигналом ШИМ, о его свойствах было написано выше (там ШИМ + сигма-дельта). Исходя из свойств сигнала можно выбрать характеристики фильтра. Для построения фильтра нужен повторитель. Здесь имеется ОУ, но он работает в схеме активного генератора тока. Когда ОУ охвачен обратной связью, входной сигнал неинвертирующего входа повторяется на инвертирующем. В данном случае это тоже так. К тому же, здесь есть приятная особенность – импеданс цепи инвертирующего входа сравнительно маленький. Это позволяет подключать сюда элементы фильтра, не боясь искажений АЧХ.

Для расчета фильтра 3-го порядка на одном ОУ использовал софт от OKAWA Electric Design. Был выбран фильтр Чебышева с частотой среза 400 Гц и пульсациями 0.2 дБ.

Полная схема управляемого генератора тока приведена ниже:

Спад АЧХ на частоте 1 кГц – более 20 дБ, на частоте 62.5 кГц – более 100 дБ.

Выбросы на переходной характеристике не превышают 5%.

Проверка источника тока на макете прошла успешно. Конечно, взятые мной транзисторы не соответствовали тому, что показывал симулятор. Сделал резисторы в двухполюснике одинаковыми, это более универсальный вариант.

Для генератора тока я не беру готовый транзистор Дарлингтона, а собираю его из двух отдельных транзисторов. Для этого есть две причины. Во-первых, так будет меньше температурная нестабильность. Когда оба транзистора находятся в одном корпусе, второй транзистор будет такой же горячий, как и регулирующий. Если же второй транзистор разместить на плате, его нагрев будет меньше, а вместе с ним и дрейф напряжения Vbe. Во-вторых, p-n-p транзисторы Дарлингтона в корпусе TO-220F (изолированном) – редкость.

Наиболее вероятными претендентами являются транзисторы 2SB1375 и KTA1046 (2SA1046). Они сравнительно доступны.

В качестве ключей в оригинальной плате применяются КТ816. Вместо них можно применить BCP53, но у них маловат допустимый ток. Возможные замены: BCP69, BDP950, STN951, PBSS5540Z, PZT751T1G, FZT751. ПОдобный транзистор понадобится и в генератор тока в качестве предвыходного, рассеиваемая мощность (300 мВт) великовата для BC857.

Можно снизить максимальный ток до 1 А. Это скажется только на динамике разгона. Максимальная скорость зависит от напряжения питания, с ростом скорости потребляемый ток падает. Даже во время разгона максимальный ток наблюдается только в самый первый момент. Поэтому время готовности сильно не увеличится. Зато можно будет применить для ключей распространенные BCP53.

С штатным блоком измерил среднее потребление двигателя. На холостом ходу при скорости 19.05 см/с – 50 мА. С прижатым роликом – 97 мА. С протягиванием ленты – 108 мА. Как видно, значения очень далеки от максимального тока 2 А. Сравнил динамику разгона с максимальным током 2 А и 1 А и разницы не заметил, что вполне логично – ток при разгоне быстро падает. А вот при ограничении 0.5 А разгон заметно замедляется, зато становится тихим и приятным. До 1 А максимальный ток можно снизить без каких-либо последствий. А снизить его желательно по той причине, чтобы не работать в самом низу шкалы, иначе будет теряться разрядность ЦАП. Из возможных 16 бит (8 бит PWM + 8 бит SDM) теперь используется 14 бит, чтобы сильно не расширять спектр выходного сигнала ЦАП вниз (фильтр ослабляет 1 кГц и выше). Поэтому использую только 6 бит SDM. Остальные биты достаточно обнулить, и частота сигнала SDM поднимется сама собой.

Пользователь ЖЖ под ником zoog2 предложил вместо схемы Дарлингтона (invented in 1953 by Sidney Darlington) применить схему Шиклаи (the configuration is named for its early popularizer, George C. Sziklai). При этом появляется сразу несколько преимуществ. Со стороны базы виден всего один эмиттерный переход, в другом плече токового зеркала достаточно одного транзистора. Можно применить транзистор того же типа, что и предоконечный, тогда будет обеспечена идентичность параметров. Нагрев выходного транзистора почти не сказывается на выходном токе. Выходной транзистор нужен структуры n-p-n, такие транзисторы намного боле распространены, даже в изолированном корпусе TO-220F. Можно выбрать транзистор с высоким коэффициентом передачи тока, тогда в качестве предоконечного транзистора можно поставить обычный BC857.

Передаточная характеристика имеет хорошую линейность, так как пара транзисторов в токовом зеркале собрана из транзисторов одного типа:

Температурный коэффициент очень незначительный, семейство графиков снято при вариации температуры от 10 до 60 градусов:

Как показатель качества генератора тока ниже показано семейство графиков напряжения на нагрузке (красные графики) и тока (зеленые графики), снятые при разных сопротивлениях нагрузки. Как видно, ток практически не зависит от напряжения:

Транзисторов структуры n-p-n в изолированном корпусе TO-220F в продаже довольно много. Можно подобрать транзистор с довольно высоким коэффициентом передачи тока. Подойдут 2SD2092, 2SC3852, 2SD2061, 2SD2012 и многие другие. Главное, не брать высоковольтные транзисторы (Vce > 100 В), у них, как правило, коэффициент передачи тока относительно маленький. Даже с транзистором TIP41C мощность рассеяния на предвыходном транзисторе не превышает 130 мВт, что позволяет применить обычные BC857 в корпусе SOT-23.

Проверка на макете показала хорошую работу этой схемы токового зеркала. Особенно порадовало, что нагрев радиатора с выходным транзистором практически не влияет на выходной ток. Данная схема полностью удовлетворяет всем требованиям.

Датчик скорости

Скорость вращения двигателя может регулироваться с помощью ШИМ-сигнала с микроконтроллера, но для стабилизации скорости требуется знать ее текущее значение. Для этого надо задействовать встроенный в двигатель датчик скорости.

В двигателе ДБ-95 используются индукционный датчик скорости под названием ДС-2, изготовленный на новосибирском заводе «Точмаш». Об этом говорят буквы «НЗТМ» на этикетке датчика.

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

Перед зазором головки вращается зубчатая шестерня из ферромагнитного материала.

Когда мимо зазора проходит очередной зуб шестерни, сопротивление магнитной цепи меняется, что вызывает изменение магнитного потока в сердечнике. В результате в обмотке датчика наводится ЭДС.

При работе двигателя на выходе датчика присутствует сигнал с близкой к синусоидальной формой и размахом порядка 0.5 В от пика до пика. Уровень сигнала зависит от зазора между шестерней и магнитной головкой. Этот зазор можно регулировать, подвигая головку – для этого в кронштейне имеются прорези.

Чем меньше установлен зазор, тем выше сигнал на выходе. При этом улучшается отношение сигнал/помеха. В сигнале таходатчика всегда присутствует некоторый уровень помех. В основном это напряжение высокой частоты от датчиков положения ротора. Оно наводится на провода таходатчика, которые идут в общем жгуте проводов двигателя. Имеет смысл заменить провод датчика на экранированный, это снизит уровень помех и уменьшит джиттер сигнала после компаратора. В аналогичном двигателе MR5A023, который применяется в магнитофоне Otari, для датчика использован именно экранированный провод.

Уменьшение величины зазора имеет и негативные последствия – увеличенный акустический шум. Если головку слишком сильно приблизить к шестерне, при работе двигателя будет слышен свист с частотой выходного сигнала таходатчика. Подобная проблема была в ведущих двигателях ДМ-1, которые применялись в магнитофоне Электроника-003. Они заметно свистели. Таходатчик там имел другую конструкцию и располагался внутри двигателя, поэтому поменять зазор было невозможно. С писком боролись другими способами. Надо отметить, что сам датчик там был лучшей конструкции – кольцевой, который обладает очень низким джиттером. Ну а в данном случае все проще – надо лишь установить оптимальную величину зазора, тогда слышимого писка двигатель не издает.

Шестерня имеет 174 зуба, во столько же раз частота сигнала таходатчика выше частоты вращения вала двигателя. При скорости ленты 19.05 см/с номинальная частота равна 1348 Гц. Для других скоростей пропорционально ниже или выше. Двигатель ДБ-95 способен обеспечить скорость до 38.1 см/с. Снизу ограничений нет, но при вентильном управлении с понижением скорости растет шум и неравномерность вращения. Впрочем, на низких скоростях высокое качество транспортирования ленты обычно и не требуется.

Задача электронной схемы – сформировать из выходного сигнала таходатчика прямоугольные импульсы со стандартными логическими уровнями, которые можно подать на вход микроконтроллера.

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

В штатной схеме используется компаратор, выполненный на ОУ типа КР553УД2. Сигнал датчика подается на входы ОУ, которые по постоянному току подключены к питанию +5 В. Сам ОУ питается от +24 В. С одной стороны, это хорошо, имеем что-то типа дифференциального съема сигнала с датчика. С другой стороны, вся входная цепь оказывается высокоимпедансной и на ней наводится большая синфазная помеха. ОУ, конечно, может ее подавлять, но не в полной мере. Сам ОУ используется здесь в качестве компаратора, но обратной связи нет никакой. Получается компаратор без гистерезиса. Дальше сигнал подается на триггер Шмитта, выполненный на логике. Но особой пользы от него нет. ОУ, обладающий высоким усилением, будет усиливать помехи до полного размаха на выходе. Такой сигнал пропускать через триггер Шмитта бесполезно. Спасает ситуацию только не очень высокий уровень помех и фильтрующий конденсатор на входе. В общем, решение это не лучшее.

В японской плате используется другая схема формирователя. Понять ее на первый взгляд сложно, не совсем ясно, что делает ОУ D4.1, выход которого никуда не идет. На самом деле этот ОУ используется как буфер для контрольной точки сигнала тахогенератора. Оставался свободный ОУ из счетверенного LM324, почему бы так не сделать? На него можно не обращать внимания. На ОУ D4.2 собран триггер Шмитта. Вообще, схема срисована плохо, нет даже номеров выводов микросхемы. Поэтому лучше обратиться к оригиналу – схеме магнитофона Otari.

Датчик скорости FG зашунтирован конденсатором C1, который совместно с внутренним импедансом датчика образует ФНЧ, подавляющий помехи. Особенностью схемы является формирование напряжения средней точки путем интегрирования выходных импульсов цепочкой R4, R3, C26. На выходе ОУ будет сигнал, близкий к меандру, значит на C26 будет примерно половина напряжения питания. Питается ОУ от +5 В, его выход сразу можно подключать к логике. У LM324 (как и у LM358) размах выходного напряжения при питании 5 В составляет примерно 3.5 В. Здесь размах увеличен с помощью подтягивающего резистора R5. Величина гистерезиса триггера Шмитта определяется отношением резисторов R3 и R4. В целом схема довольно изящная, поэтому решил взять ее за основу.

Первым делом схему надо промоделировать. Для этого требуется составить адекватную модель датчика. Датчик представляет собой довольно большую индуктивность (примерно 1 Генри) с относительно высоким активным сопротивлением обмотки (около 1460 Ом). Еще у датчика имеются некоторые потери, которые можно заменить эквивалентным активным сопротивлением, включенным параллельно индуктивности. Для измерения потерь собрал на датчике резонансный контур и прогнал его звуковым генератором. После этого подогнал параметры модели для получения аналогичной формы резонансной кривой. Эквивалентное сопротивление потерь получилось порядка 50 кОм, резонанс получается довольно сглаженным. Результат моделирования АЧХ для схемы с японской платы показан ниже (красный график):

Требования к АЧХ здесь следующие: в полосу пропускания должны попадать рабочие частоты. На скорости 19.05 см/с это 1348 Гц, на скорости 38.1 см/с – 2696 Гц. Это максимальная рабочая частота. Дальше должен быть спад АЧХ, чтобы эффективно подавлять помехи с частотой работы датчиков положения ротора, которая около 300 кГц. Небольшой модификацией схемы можно улучшить подавление помех более чем в 10 раз (зеленый график).

Во входной фильтр было добавлено второе звено. Оба звена были согласованы между собой, чтобы получить монотонный спад АЧХ с наклоном примерно 40 дБ на декаду. Одновременно были увеличены сопротивления резисторов в обратной связи, чтобы уменьшить емкость конденсатора – вместо электролита 22 мкФ теперь можно поставить керамику 2.2 мкФ.

Практическая проверка схемы показала ее работоспособность. Но она обладает одной неприятной особенностью. Если включить питание, двигатель начинает крутиться, на выходе схемы появляются импульсы. Скорость двигателя можно менять в широких пределах, частота импульсов на выходе тоже меняется. На первый взгляд все прекрасно. Но если двигатель остановить, на выходе появляется логическая единица и дальше схема не работает. Двигатель можно запустить снова, но никаких импульсов больше не будет. Причем, если остановка двигателя была кратковременной, схема возобновит работу. А если двигатель остановился на более длительное время, схема больше не работает. Чтобы восстановить работоспособность, надо выключить питание и включить снова.

А как же с японской платой? Получается – она тоже имела ткую особенность. В магнитофонах, где она применялась, ведущий двигатель включался сразу при включении питания и никогда не выключался. Поэтому заметить данную проблему было невозможно. Я же планирую ведущий двигатель выключать, когда он не используется, поэтому для меня это критично. Да и не должна себя так вести нормальная схема.

Причина такого поведения кроется в особенностях примененного ОУ LM358. В оригинале применен LM324, но это по сути одно и то же. Это «народные» ОУ, очень распространенные и дешевые. В то же время они представляют собой целый кладезь недостатков и отклонений от идеального ОУ. Все эти отклонения хорошо задокументированы. Datasheet тут недостаточен, на эту тем есть специальный документ «Application Design Guidelines for LM324/LM358 Devices». По поводу данной ситуации там есть вот такой фрагмент:

В схеме происходит следующее: когда пропадает входной сигнал, выход ОУ может оказаться в любом состоянии – это же триггер Шмитта. Когда он оказывается в состоянии высокого уровня, через резисторы обратной связи начинает заряжаться конденсатор 2.2 мкФ. В обычном режиме, когда на выходе меандр, он заряжен до половины напряжения питания. Но когда на выходе постоянно присутствует единица, заряд конденсатора идет дальше, одновременно поднимается потенциал обоих входов. Когда он выходит за пределы допустимого синфазного напряжения (для этого ОУ это Vcc – 2 В), входной каскад ОУ выходит из линейного режима работы. При этом выход ОУ становится непредсказуемым, в моем случае там постоянно наблюдалась единица. Входной сигнал, который здесь имеет относительно небольшой уровень, не может вывести ОУ из такого состояния.

Чтобы устранить проблему, надо любыми способами ограничить напряжения на входах ОУ в рамках допустимых пределов. Проще всего это сделать с помощью делителя, который уменьшит напряжение на конденсаторе 2.2 мкФ. Теперь при нормальной работе входы будут находиться на потенциале около 1.25 В вместо 2.5 В, но это не страшно. Зато ни при каких условиях их потенциал не поднимется выше 2.5 В. После установки дополнительного резистора схема стала работать нормально. Конечный вариант схемы показан ниже:

При синусоидальном входном сигнале (красный график) сигнал на выходе схемы близок к меандру (желтый график). Гистерезис схемы около 30 мВ (синий график). Работает формирователь очень хорошо. Начинает формировать импульсы при очень медленном вращении вала двигателя, порядка одного оборота в несколько секунд. Несмотря на спад АЧХ фильтра, схема нормально работает вплоть до максимальной скорости, которую способен обеспечить двигатель на холостом ходу.

Аппаратная часть блока управления двигателем, можно сказать, готова. Процессор может коммутировать фазы, может управлять скоростью, получает сигнал обратной связи по скорости. Теперь надо замкнуть обратную связь.

Частотно-фазовый детектор

В промышленной аудиоаппаратуре задача кварцевой стабилизации скорости тонвала или диска проигрывателя решалась или на дискретных компонентах, или на специализированных микросхемах. Микроконтроллеры для этой цели обычно не применялись. Готового решения на микроконтроллере для стабилизации скорости двигателя с помощью системы ФАПЧ найти не удалось. Обычно для управления двигателями используют простые регуляторы с обратной связью по скорости. Среди любительских конструкций нашел лишь один похожий проект External module for Twin Quartz Reference Speed Control (designed by Boris Ribov), но никаких подробностей там нет. В точности мою задачу для управления двигателем ДБ-95 решал пользователь с ником kagrukeit с форума rt22.ru. Он сделал небольшую плату на основе микроконтроллера, заменяющую штатный блок управления двигателя. Насколько видно по фотографии, вся аналоговая «обвязка» сохранена такой, как на оригинальной плате. Получается, микроконтроллер просто повторяет работу жесткой логики, которая применяется на оригинальной плате. Других подходящих решений на микроконтроллерах или ПЛИС я не нашел.

Задача заключается в построении цифрового частотно-фазового детектора (PFD, Phase Frequency Detector), который бы выдавал ошибку фазы в цифровом виде. Чаще всего в подобных проектах используются аппаратные фазовые детекторы типа той же CD4046, или их аналоги в ПЛИС. На выходе таких детекторов формируется последовательность импульсов, а мне нужен вариант, где на выходе был бы многоразрядный цифровой код. Нашел всего одну публикацию «A FPGA implementation of a phase locked loop for DC motor control», где сделано именно то, что мне надо. Но основная проблема (phase unwrap) решена там не совсем красиво.

Как оказалось, я совсем зря интересовался именно цифровыми фазовыми детекторами с кодом ошибки фазы на выходе. Вместо этого надо было пристальнее присмотреться к обычным фазовым детекторам, реализованным на обычной логике. Там можно было найти ответ. Схем таких детекторов существует великое множество. Простейшим детектором является элемент «исключающее или».

Более совершенные детекторы строятся и на основе триггеров. Не буду здесь углубляться в описание разных схем детекторов, приведу лишь базовую схему детектора на двух D-триггерах.

Каждый из триггеров работает для своего знака отклонения фазы. Если верхний по схеме сигнал опережает, на выходе верхнего триггера будет формироваться импульс с шириной, пропорциональной ошибке фазы. Если опережает нижний сигнал, аналогично будет работать нижний триггер. Каждый триггер обслуживает диапазон фазового сдвига 180 градусов. Чтобы получить полный диапазон 360 градусов, используются оба выхода, характеристика «сшивается» в области нулевого сдвига фаз.

На первый взгляд, это плохо, лучше бы весь рабочий диапазон был бы непрерывным, как у фазового детектора на основе элемента «исключающее или», где при номинальном сдвиге фаз на выходе наблюдается меандр. Если выделить постоянную составляющую выходного сигнала детектора, получим значение ошибки фазы. Для этого обычно используется ФНЧ. Чтобы получить низкие пульсации напряжения, его частота среза должна быть низкой. А это ухудшает динамику петли PLL.

Неожиданного у PFD на D-триггерах здесь появляется преимущество. При нулевом сдвиге фаз оба триггера будут давать на выходе короткие «иголки». Обычно выходы триггеров управляют ключами, которые заряжают или разряжают емкость (это называется «зарядовый насос»). Быстродействие ключей ограничено, поэтому на короткие «иголки» они практически не реагируют. Можно сказать, что в режиме синхронизма на выходе такого частотного детектора вообще нет сигнала, следовательно, не будет и пульсаций в выходном напряжении.

Для цифрового PFD сглаживание пульсаций не является актуальным, так как там сразу получается код ошибки фазы, а не его представление в виде ШИМ. Но остается другая проблема, которая есть и в детекторах на логике. Она касается поведения при отличающихся частотах. Если бы частоты были равны и отличались только фазой, найти ошибку фазы было бы очень просто. В моем случае опорный сигнал генерирует таймер, достаточно по внешнему сигналу таходатчика делать его захват. Но что будет, если входная частота будет отличаться от опорной? Ведь этом случае надо получить выходной сигнал нужной полярности и желательно максимальной амплитуды, так как в этом случае фактическое отклонение фазы большое.

Простой PFD на D-триггерах будет правильно отрабатывать ситуации с пониженной и повышенной входной частотой. Тогда на выходе одного из триггеров будут короткие «иголки», а на выходе другого – сигнал переменной скважности, среднее значение которого равно примерно 0.5. Это не очень хорошо, при большой расстройке воздействие будет не максимальным, да еще и с пульсациями. Но подстройка будет происходить куда надо. Хотя было бы лучше, если бы при большой расстройке на выходе был постоянный уровень.

Пользуясь общими соображениями, составил алгоритм. Если за время периода опорной частоты не приходит ни одного входного импульса, частота считается ниже нормы. Если приходит более одного – выше нормы. В результате получил следующую красивую картинку:

Детектор оказался неработоспособным – при большой расстройке на его выходе наблюдался периодический сигнал с постоянной составляющей около нуля. Такой сигнал не может правильным образом воздействовать на подстройку частоты. Причина понятна: при расстройке входной частоты возникают ее биения с опорной частотой. Лишь изредка будут наблюдаться описанные выше ситуации, когда на один цикл опорной частоты будут приходиться два импульса, или ни одного. Но в основном все будет выглядеть нормально, детектор не сможет отличить эту ситуацию от ситуации с захваченной частотой.

Но ведь PFD на логике как-то работают, там такого поведения нет! Только самый простой детектор на элементе «исключающее или» работает похоже, у него узкая полоса захвата, за ее пределами на выходе неопределенный сигнал. Более серьезные детекторы на триггерах нормально отрабатывают отклонение частоты. Никогда не вникал, как именно они это делают, но на этот раз придется.

Для примера решил взять PFD со штатной платы управления ведущим двигателем магнитофона «Электроника-004», который собран на простой логике. Сначала проверил его в работе - подал на вход сигнал датчика скорости. Скорость я мог менять произвольно, вручную управляя двигателем. Медленно прошел значения скорости вблизи номинального. Детектор отработал на отлично. Когда скорость занижена, на выходе постоянно была единица. В момент пересечения номинальной скорости на выходе появился ШИМ-сигнал, который менялся от широкого импульса до узкого, затем постоянно установился ноль.

Схема этого PFD - не лучший пример для анализа. Решил посмотреть, как сделано в других аппаратах. Фирменная техника тут мало чем может помочь, чаще всего там в прямом приводе используются специализированные микросхемы. Например, в Revox A700 (прототипе наших «Электроник» и «Олимпов») использована некая TDA1000, о которой никакой информации нет. В более поздних Studer A820 и A827 применяется сложный аналоговый фазовый детектор на основе УВХ. Более простой является схема PFD из магнитофона «Олимп-004», в ней уже применяются микросхемы готовых триггеров, вместо собранных на логике. Но эта схема тоже не особо пролила свет на проблему.

Схема PFD из магнитофона «Олимп-005С» содержит еще больше триггеров и меньше простой логики. Выполнена она на логике КМОП с применением некоторых трюков типа резистора 120 кОм последовательно с логическим входом.

Схема PFD из магнитофона «Олимп-005С1» резко отличается по оформлению в лучшую сторону. Логически эта схема не отличается от предыдущей, но наконец-то в ней начал просматриваться классический PFD на двух триггерах, схема которого приводилась выше. Только он дополнен еще двумя триггерами.

Похожая схема PFD и в магнитофоне «Олимп-700». В схеме осталось только три триггера, а таинственный резистор 120 кОм перекочевал в другое место схемы.

Чуть ниже на листе со схемой приведена диаграмма состояний PFD. Раньше я не придавал таким диаграммам значения, потому что никакой полезной информации для применения детектора они не несут. Но на этот раз я решил заняться их расшифровкой и осмыслением.

Промоделировав работу детектора в PSpice и посмотрев на диаграмму, я понял самую главную идею. Если при работе детектора входная частота вдруг увеличилась, детектор среагирует на лишний входной импульс в пределах периода опорной частоты и перейдет в другое состояние. При этом он покажет на выходе превышение частоты. Если теперь входная частота вновь вернется к номиналу, детектор продолжит показывать на выходе превышение!

Раньше я считал такое поведение недопустимым, но так есть в реальных детекторах. Чтобы работа детектора восстановилась, входная частота должна стать ниже номинала и хотя бы один раз должен произойти пропуск импульса в пределах периода опорной частоты. Только тогда детектор выйдет из состояния превышения частоты. Такое поведение детектора гарантирует постоянный выходной уровень при утере захвата частоты.

На диаграмме работы детектора зацикленные на себя крайние состояния означают ситуацию с полным отсутствием входного или опорного сигнала. В ситуации завышенной или заниженной частоты он переключается между двумя крайними состояниями. И даже когда частота возвращается в норму, он продолжает переключаться между этими двумя состояниями. Выход при этом неизменен (здесь это первая цифра в маленьких кружочках). Выйти из этого цикла детектор может только при отклонении частоты в другую сторону. Для меня это явилось неожиданностью. Тут я хочу выразить упрек в адрес доступных материалов по теме – книг, статей. Нигде, ни в одной публикации явно это не сказано.

Схема PFD в магнитофоне «Олимп-700» не использует никаких зарядовых насосов, как классическая схема PFD на двух D-триггерах. Тут используется сигнал с выхода только одного триггера, который тактируется опорным сигналом. В диапазоне отклонений фазы от 0° до 180° ширина импульса будет меняться. Выделив среднее значение напряжения, получаем выходной сигнал PFD. При повышении входной частоты на выходе этого триггера будут короткие «иголки». Это не совсем красиво, но терпимо – среднее значение будет маленькое. Надо сказать, что у более древнего PFD из «Электроника-004» такого безобразия нет. А вот когда частота ниже – на выходе триггера будет хаос, среднее значение сигнала будет близким к половине питания. Это никуда не годится, поэтому ситуацию исправили третьим триггером. Не очень изящно, с использованием волшебного резистора 120 кОм, но это как-то работает. Намного изящней это сделано в PFD микросхемы AD9901, структура которого приведена ниже. Назначения второй пары триггеров как раз в этом и заключается - они включают на выходе PFD постоянный ноль или единицу в случае выхода из состояния захвата.

Несколько удивляет множество вариантов схемы PFD, каждый из которых делает то же самое. Есть большое количество патентов на тему схемотехнической реализации PFD. Какие-то преимущества там называются, но понять их суть довольно трудно. Информация в патентах подается очень специфическим языком, который понять порой очень трудно.

В результате я построил машину состояний, которую раньше строить не хотел, считая, что тут она неуместна. Но оказалось, что PFD только так и строят. У этой машины должно быть как минимум 3 состояния – норма, повышенная частота и пониженная частота. На самом деле состояний больше, каждое из этих трех состояний – это периодическая циркуляция между двумя состояниями. Условия перехода несколько несимметричны, попасть в крайние пары состояний проще, чем оттуда выбраться.

Опорный сигнал у меня формирует Timer1. Входной сигнал (сигнал таходатчика) поступает на вход захвата ICP. Захваченное значение представляет собой текущую фазу сигнала. Эта фаза сравнивается с опорной (0°), в результате формируется значение ошибки фазы. Ошибка фазы может принимать значения от -180° до +180°. Частотно-фазовый детектор реализован в обработчиках прерывания по событию захвата (Capture) и событию совпадения (Compare), которое означает переполнению таймера.

Когда система не находится в режиме захвата, частота таходатчика может сильно отличаться от опорной частоты. В таком режиме величина ошибки фазы теряет смысл. Поэтому когда частота выше номинальной, ее значение поддерживается -180°, а когда частота ниже номинальной – поддерживается +180°.

В обработчике прерывания Capture производится сохранение текущего значения таймера, а также увеличивается на 1 состояние фазового детектора vPfdState. В обработчике прерывания Compare состояние vPfdState уменьшаетя на 1. Затем оно сравнивается с нулем.

Если входная частота равна опорной, на каждое событие Capture приходится одно событие Compare. При этом значения vPfdState чередуются 1, 0 и т.д. В прерывании Compare после декремента значение vPfdState = 0, это означает номинальную частоту. Выходное значение PFD равно захваченному значению фазы.

//Capture: __|_____|_____|_____|_____|_____|_____|_____|_____|____
//Compare: _____|_____|_____|_____|_____|_____|_____|_____|_____|_
//State:     1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0
//FREQ:        OK    OK    OK    OK    OK    OK    OK    OK    OK

Если входная частота становится выше опорной, между двумя событиями Compare происходят два (или больше) события Capture. При этом vPfdState становится больше 1. Сколько именно – не важно. Это все равно будет одно состояние. В прерывании Compare после декремента vPfdState > 0. Это означает повышенную частоту. Выходное значение PFD в этом случае устанавливается равным минимальному значению фазы (опережение). При выходе из обработчика Compare значение vPfdState ограничивается величиной 1.

Если входная частота восстанавливается и на одно событие Compare снова приходится одно событие Capture, работа детектора не восстанавливается. Для восстановления необходим один цикл, когда между событиями Compare не будет событий Capture. Только так значение vPfdState может снова уменьшиться до нуля.

//Capture: __|____|_|___|||____|___________|_____|_____|_____|____
//Compare: _____|_____|_____|_____|_____|_____|_____|_____|_____|_
//State:     1  0 1 2 1 234 1  2  1     0  1  0  1  0  1  0  1  0
//FREQ:        OK     H     H     H    OK    OK    OK    OK    OK

Если входная частота становится ниже опорной, между двумя событиями Compare может вообще не быть событий Capture. При этом события Compare происходят два (или больше) раза подряд, после декремента значение vPfdState < 0. Это означает пониженную частоту. Выходное значение PFD в этом случае устанавливается равным максимальному значению фазы (отставание). При выходе из обработчика Compare значение vPfdState ограничивается величиной -1.

Если входная частота восстанавливается и на одно событие Compare снова приходится одно событие Capture, работа детектора не восстанавливается. Для восстановления необходим один цикл, когда между событиями Compare будут два события Capture.

//Capture: __|___________|_____|____|_|____|_____|_____|_____|____
//Compare: _____|_____|_____|_____|_____|_____|_____|_____|_____|_
//State:     1  0    -1  0 -1  0 -1 0 1 0  1  0  1  0  1  0  1  0
//FREQ:        OK     L     L     L    OK    OK    OK    OK    OK

Ниже приведен код обработчика прерывания Capture (из обработчиков выкинут код, служащий для вспомогательного измерения частоты входного сигнала):

#pragma vector = TIMER1_CAPT_vect
__interrupt void Capture(void)
{
  TDpll::vCapV = ICR1;
  TDpll::vPfdState++;
}

Код обработчика прерывания Compare:

#pragma vector = TIMER1_COMPA_vect
__interrupt void Compare(void)
{
  TDpll::vPfdState--;
  if(TDpll::vPfdState == 0) TDpll::vPfdOut = TDpll::vCapV;
    else if(TDpll::vPfdState < 0) { TDpll::vPfdOut = OCR1A; TDpll::vPfdState = -1; }
      else { TDpll::vPfdOut = 0; TDpll::vPfdState = 1; }
  TDpll::vPfdUpd = 1;
}

После таких модификаций программный PFD заработал точно так же, как и аппаратный детектор на штатной плате управления двигателем. В момент пересечения входной частотой опорного значения ошибка фазы линейно меняется, остальное время ошибка в насыщении. На рисунке масштаб графика скорости (зеленый график) сильно увеличен, на самом деле микроскопическое изменение скорости ведет к «перескоку» выхода фазового детектора.

Теперь если замкнуть петлю обратной связи, двигатель будет поддерживать постоянной частоту вращения с точностью до некоторой небольшой ошибки фазы, которую стремится свести к нулю петлевой фильтр в виде PID-регулятора. Подбором коэффициентов PID за несколько попыток удалось получить устойчивость.

Синий график – это управляющий сигнал двигателя. Оранжевый – текущая фаза, которая поддерживается петлей PLL на значении 50%, это 0°. Красный график – требуемая скорость. Зеленый график – реальная скорость, он полностью слился с красным, никаких отклонений не видно.

Конечно, мгновенная скорость имеет некоторые небольшие отклонения. Для интереса я снял часть графика с новым макетом, а часть – со штатной платой. Затем сильно увеличил масштаб.

Видно, что пока макет проигрывает штатной плате. У нее колебания скорости от пика до пика составляют примерно 0.04%, а у макета – примерно 0.08%. Но надо понимать, что пока коэффициенты петлевого фильтра далеко не оптимальны.

При разомкнутой петле обратной связи колебания скорости тоже составляют порядка 0.04%, так что уменьшить их еще больше вряд ли получится. Наверное, сказывается фазовый шум датчика скорости. В идеале нужен более качественный кольцевой датчик, но установить его сложно технически.

Для петли PLL характеристика петлевого фильтра более критична, чем для петли регулировки скорости. Здесь мы воздействуем на двигатель, регулируя его частоту вращения, а стабилизируем фазу, которая является интегралом частоты. Можно считать, что в петле присутствует интегратор, что дает сдвиг фазы 90°, который вычитается из запаса устойчивости. Поэтому типичный петлевой фильтр простых аналоговых PLL второго порядка имеет резистор последовательно с конденсатором. Этот резистор добавляет нуль левее частоты единичного усиления, делая в этом месте наклон 6 дБ/окт., что требуется для получения устойчивости.

В моем случае эту роль будет выполнять D-звено PID-регулятора, который используется в качестве петлевого фильтра. Первое включение показало, что вероятнее всего придется делать разные характеристики фильтра в состоянии захвата и при подходе к нему. В готовых реализациях аналоговых регуляторов часто можно видеть нелинейные цепочки, вступающие в работу при больших рассогласованиях. Основная претензия - это процесс старта двигателя без нагрузки. Вот так стартует штатная плата:

Видно, что есть заметный «перелет», но затем быстро происходит захват частоты. У меня с цифровым PFD «перелет» примерно такой же, но потом идут долгие колебания, в результате которых захват тоже наступает, но с большой задержкой:

Двигатель - это довольно сложный объект управления. У него существенно разная динамика разгона и торможения: разгоняется быстро, о останавливается по инерции медленно. Если двигатель нагрузить, старт становится красивым:

Но на практике двигатель часто будет работать на холостом ходу, поэтому надо обеспечить нормальный пуск в таких условиях. «Перелет» на графиках вполне понятен. Фазовый детектор не видит изменения скорости во время разгона. В это время он находится в насыщении. Какой-то осознанный сигнал появляется лишь вблизи номинальной скорости. Но в это время ток двигателя максимальный, и быстро он упасть не может. Сделать плавный выход на номинальную скорость здесь невозможно. Так работает штатная плата, так работают и многие другие приводы с ФАПЧ.

Если задействовать частотный канал, тогда можно контролировать процесс разгона. По мере приближения к номинальной скорости можно плавно снижать ток двигателя. Возникает вопрос, почему в новых реализациях ФАПЧ обычно не делают частотного канала? Ведь в старых реализациях он был. Например, в схеме "Маяк-010", на основе которой я когда-то делал регулятор для ведущего двигателя ЛПМ "Вильма". Или в классической микросхеме TC9142P. В общем, хочу попробовать добавить частотный канал. Надо решить, просто суммировать сигнал ошибки частоты и фазы перед петлевым фильтром, или сделать два фильтра. Скорее, второе, так как требования к петлевым фильтрам будут разные.

Окно устойчивости цифрового регулятора также получилось узким. Для разных скоростей нужны разные коэффициенты. У аналогового регулятора с этим все гораздо лучше, с одним и там же петлевым фильтром он устойчиво работает на трех скоростях.

Что заметно лучше у цифрового регулятора - так это работа на малых скоростях. У штатного на скорости 9.53 двигатель начинает заметно свистеть. Это результат плохой фильтрации частоты сравнения фазового детектора. В цифровом регуляторе пульсаций нет, так как сразу получается цифровой код фазы, выделять постоянную составляющую импульсной последовательности не приходится. Поэтому двигатель совершенно бесшумно работает даже на скорости 4.76.

Чтобы как-то сдвинуться с места, надо подробнее изучить аналоговый регулятор. Для этого в цифровом реализовал парафазный импульсный выход фазового детектора, аналогичный детектору на логике. Этот выход подключил к штатной плате вместо имеющегося там фазового детектора. Плата с моим детектором заработала, снял графики скорости и фазы. При изменении нагрузки фаза заметно меняется, что вполне логично для П-регулятора с не очень большим усилением. Но колебания скорости оказались заметно меньшими, чем в моем цифровом регуляторе. Они были такими же, как у штатной платы в оригинальном виде - порядка 0.03% от пика до пика. Это доказывает, что программная реализация фазового детектора сделана правильно.

Получается, причина повышенной нестабильности скорости и плохой переходной характеристики в новом петлевом фильтре, реализованном программно в виде ПИД-регулятора. Подбор коэффициентов улучшений не дает, похоже, экспериментально найдено их оптимальное значение.

Еще одна причина нестабильности скорости может быть связана с помехами сигнала датчика скорости. При использовании силовой части штатной платы ток питания двигателя не проходит по цепям макета, что может давать снижение уровня помех на выходе формирователя. Причина не очень вероятная, но проверить ее надо. Был снят спектр сигнала на выходе таходатчика при работе двигателя на с частотой таходатчика 1348 Гц:

На спектре видна основная частота сигнала таходатчика, ее гармоники (из-за отличия формы сигнала от синусоидальной), а также помехи довольно высокого уровня с частотой коммутации обмоток (примерно 31 Гц) и ее гармоник. Не совсем понятно, как именно эти помехи проникают в сигнал таходатчика. Это могут быть наводки со стороны рабочих обмоток двигателя на сам датчик, а могут быть наводки на провода таходатчика, которые не экранированы и идут рядом с проводами питания обмоток двигателя.

Для начала было решено заменить провод датчика экранированным, в некоторых моделях аналогичных двигателей в магнитофонах Otari применяется именно экранированный провод. Еще там имеется отдельный провод заземления корпуса датчика, так как датчик закреплен на диэлектрическом основании и с корпусом двигателя контакта не имеет. Я добавил и это соединение.

Спектр сигнала таходатчика после переделки показан ниже. Как видно, замена провода повлияла только на уровень ВЧ-наводок, теперь их уровень стал ниже. НЧ-наводки не изменились. Вероятно, их причина - воздейсвие поля рассеяния двигателя на таходатчик.

Анализ схемы магнитофона Revox A700 показывает, что формирователь сигнала таходатчика содержит крутой ФВЧ 3-го порядка. Там используется асинхронный двигатель с питанием от сети, вероятно, фильтр предназначен для подавления помех сетевой частоты.

На частоте 50 Гц этот фильтр дает ослабление более 40 дБ:

Рабочая частота таходатчика для двигателя ДБ-95 составляет от 337 Гц (для скорости ленты 4.76 см/с) до 2696 Гц (для скорости 38.1 см/с). Поэтому здесь можно применить полосовой фильтр, чтобы подавить помехи как на НЧ, так и на ВЧ. Такой фильтр можно составить из комбинации из ФНЧ и ФВЧ. Иногда это делают на одном ОУ в предположении, что частоты среза сильно отличаются и фильтры друг на друга не влияют. Такие полосовые фильтры можно встретить, например, в компандерах dbx. Чтобы упростить расчет, можно задать для фильтра усиление 2 и реализовать равнокомпонентный фильтр. Некоторое влияние фильтров друг на друга есть, поэтому результирующую АЧХ желательно подправить в симуляторе, немного варьируя номиналы компонентов. Окончательная схема фильтра выглядит так:

На нижней границе рабочего диапазона частот спад не превышает 2.5 дБ, на верхней - 5.5 дБ (но там сигнал датчика выше, некоторый спад вполне допустим). На частоте коммутации обмоток (для скорости 19.05 см/с это примерно 31 Гц) ослабление составляет около 60 дБ.

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

Сервисня программа

Downloads:
capstan_sch.pdf (114 kB) - принципиальная схема.
capstan_source.zip (54 kB) - прошивка, исходный текст (C++ IAR EWAVR, hex).
capstan_soft.zip (720 kB) - сервисная программа (C++ Builder 6, exe).
Ридико Леонид Иванович www.leoniv.diod.club e-mail: wubblick@yahoo.com