RC генераторы

Опубликовано в рубрике "ПЛИС", 05.11.2011.
Тэги: , , автор:

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

У xilinx есть замечательный аппноут – six easy pieces. Там нарисована вот такая картинка:RC Oscialltor

 

Я сразу не понял, почему частота не зависит от порогов и температуры и для чего нужны два резистора. Потом сел рисовать диаграммы напряжения. Итак:

  • С заряжается через верхний R.
  • Нижняя ножка смотрит, зарядился ли C.
  • А теперь происходит магия – когда C зарядился, вывод, который подключен к C переключается в противоположное состояние. Напряжение в точке соединения резисторов и конденсатора подскакивает выше напряжения питания.  Вот тут и нужен нижний R – он не дает выжечь вход плисины, работают защитные диоды.

 

В итоге, сигнал в точке соединения резисторов и конденсатора получается вот такой:

image

 

Резкие изломы на графике (зеленая стрелка) – это пороговое напряжение.

Так как конденсатор заряжается и разряжается по одинаковому “маршруту”, то и длительность верхнего и низкого уровня одинаковая. (естественно, с погрешность, равной гистерезису ножки).

Частота определяется только параметрами пассивных компонентов и напряжением питания.

Для чего нужен триггер? Триггер убирает дребезг при переключении. Он сравнивает в какую сторону конденсатора заряжается и в какую сторону он фактически зарядился. Переключение происходит только если эти направления совпадают.

Мой код для этого генератора:

module RCOscillator(
    inout Resistor,
    inout Capacitor,
    input Sense,
    output Clock
    );

reg latch;
assign Capacitor = latch;
assign Resistor = !Capacitor;
assign Clock = latch;

always @(*) begin
	if (Resistor & Sense) begin
		latch = 1;
	end else if (!Resistor & !Sense) begin
		latch = 0;	
	end
end

endmodule

 

Думаю, понятно, что Resistor – это верхний вывод, Capacitor – средний, а Sense – нижний.

Нижний резистор неплохо бы выбирать раз в 10 больше, чем верхний.

А вот и аппноут в тему о RC генераторах: https://www.fairchildsemi.com/an/AN/AN-118.pdf

В нем предлагается вот такая формула для оценки частоты генератора:

image

Но я лично, думаю, что оценивать его бесполезно – нужно собирать и пробовать. Почему? Потому, что в процессе участвуют и напряжение питания и гистерезис выводов и защитные диоды.

У меня этот генератор упорно не хотел выдавать 50% заполнение. Оказалось, что у xilinx’совских CPLD даже при отключенном bus-keeper’е остается слабая подтяжка, номинал которой зависит от температуры, поэтому и частота хоть и не сильно, но от температуры зависит.




Комментарии
  1. zgora написал(а) 5th Ноябрь, 2011 в 14:02

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.