一、引言
ringoscillator是一种基于反馈的振荡电路,常用于时钟电路、数字电路等领域。本文将从多个方面对ringoscillator的原理、应用等方面作详细阐述。
二、基本原理
ringoscillator由多个同构的环形反馈电路串联构成。每个环形电路包含一个放大器和一个延迟线。当环形电路中的信号经过多次放大和延迟后,就会形成一个稳定的振荡信号。
/**
非精密晶振库中示例代码,定频输出约为38.2Khz ~44.8Khz,主要受EEPROM参数影响,CPU速度对输出频率影响较小
*/
#include
unsigned int a[6],b[6],d,c;
unsigned char AD9850_CLK=3; //设置脉冲信号输出引脚
unsigned char OutHigh=3;
unsigned char OutLow=10;
void SER(unsigned char Index) //并行方式出数,AD9850的Datasheet中给出了
{
char i=0;
for(i=0;i>=1;
}
}
void W_CLK() //产生单个脉冲信号
{
digitalWrite(AD9850_CLK,HIGH);
digitalWrite(AD9850_CLK,LOW);
}
void IO_Update() //按照数据手册进行模拟通信方式编写
{
digitalWrite(OutLow,LOW);
digitalWrite(OutHigh,LOW);
digitalWrite(AD9850_CLK,LOW);
delayMicroseconds(1);
digitalWrite(OutHigh,HIGH);
digitalWrite(OutLow,HIGH);
digitalWrite(AD9850_CLK,HIGH);
digitalWrite(OutHigh,LOW);
delayMicroseconds(1);
}
void WriteFreq(unsigned long frequency)
{
unsigned long tuning_word=(frequency*4294967296/125000000);
Serial.print("tuning word=");
Serial.println(tuning_word);
SER(tuning_word>>24);
SER(tuning_word>>16);
SER(tuning_word>>8);
SER(tuning_word>>0);
IO_Update();
}
void WritePhase(unsigned int phase)
{
unsigned short phase_word=phase;
phase_word*=45.51111111;
SER(phase_word>>8);
SER(phase_word);
IO_Update();
}
void setup()
{
Serial.begin(115200);
pinMode(AD9850_CLK,OUTPUT);
pinMode(OutHigh,OUTPUT);
pinMode(OutLow,OUTPUT);
WriteFreq(1000000);
}
void loop()
{
WritePhase(0);
delay(1000);
}
三、电路实现
ringoscillator的电路实现十分简单,主要包含以下几个部分:
小结
本文介绍了ringoscillator的原理、应用、电路实现等方面。在实际项目中,我们可以根据具体需求选择适合的ringoscillator电路实现,在数字电路、时钟电路等领域发挥重要作用。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/272317.html