Здравствуйте.
У меня к вам очередной вопрос. В одном из изделий я применил микросхему AD9912, которую предполагал использовать как перестраиваемый генератор гармонического сигнала.
Микросхема питается от двух источников на +3,3 и +1,8 Вольта (используются ADP1707), задающий генератор выполнен на кварцевом резонаторе KX7-T-40 МГц (с эквивалентным последовательным сопротивлением не более 50 Ом), фильтр ФАПЧ (в соответствии с рисунком 46 оригинальной документации на данную м/с R1 - 1.3 кОм, C1 - 300 пФ, C2 - 15 пФ - делитель ФАПЧ настроен на 24).
Другие параметры, установленные в данную микросхему:
Выходная частота в 1/1000 от DAC Sample Clock;
HSL, CMOS Driver, Output Doubler - выкл;
VCO Range - High;
2xreference - выкл;
Charge pump current - 250 мкА;
DAC Full-scale current - default;
Что наблюдаю по выходу? - частота, приблизительно равная 670 кГц, т.е. частота системы ФАПЧ 670 МГц. Изменение тока помпы (на 125 или 350 мкА), делителя ФАПЧ и частоты внешнего кварцевого резонатора не приводит к изменению выходной частоты - все так же 670 кГц. (При изменении кода частоты в регистр FTW частота пропорционально меняется).
Складывается впечатление, что либо не работает "помпа", либо выключен фазо-частотный детектор. Однако, отдельного бита отключения ФЧД как в м/с AD9910 здесь нет (или я его не вижу), напряжение на выводе 31 (фильтр ФАПЧ) около 750 мВ. ГУН (VCO) запускается на собственной частоте и не регулируется.
Не подскажете в чем может быть причина, почему не могу перестроить ГУН?
Заранее благодарен за ответ.
При записи в регистры DDS обратно считвыаются те же самые значения. Ниже приведен листинг программы.
Код
Init_DDS(); //Инициализация DDS
WriteReg(0x0010,0x10); //Отключение ФАПЧ
STROBER(); //IO UPDATE
WriteReg(0x0020,0x0b); // (11(0x0B)*2+2)*40=960MHz
WriteReg(0x0022,0x04); // hi range PLL range
WriteReg(0x01a6,0xc7); //FTW write
WriteReg(0x01a7,0x4b);
WriteReg(0x01a8,0x37);
WriteReg(0x01a9,0x89);
WriteReg(0x01aa,0x41);
WriteReg(0x01ab,0x00);
STROBER(); //IO UPDATE
WriteReg(0x0010,0x60); //Full Enable
STROBER(); //IO UPDATE
void Init_DDS()
{
//Вывод микросхемы из powerdown, установка CS, IO UPDATE неактивекн, ресет
DDS_PD0(); //DDS в активном режиме
DDSCS1(); //CS неактивен
IO_UPDATE_0(); //IO неактивен
RESET_1();
Init_Outputs(); //Инициализация портов в/в на выход
//Делаю ресет на 1мс
DELAYMS(1);
RESET_0(); //Ресет снял
//Прописываю 0й регистор так чтобы работало SDO
DDSCS0();
SPI_RX_Buffer.clear();
SPI_TX_Buffer.clear();
SPI_TX_Buffer.put(0x00);
SPI_TX_Buffer.put(0x00);
SPI_TX_Buffer.put(0x99);
Transfer_SPI();
DDSCS1();
}
void WriteReg(INT16U Adress,INT8U data)
{
INT8U Upper_Adress,Low_Adress;
Upper_Adress=Adress>>8;
Low_Adress=Adress&0xff;
DDSCS0();
SPI_RX_Buffer.clear();
SPI_TX_Buffer.clear();
SPI_TX_Buffer.put(Upper_Adress);
SPI_TX_Buffer.put(Low_Adress);
SPI_TX_Buffer.put(data);
Transfer_SPI();
DDSCS1();
}
void STROBER()
{
IO_UPDATE_0();
DELAYMS(5);
IO_UPDATE_1();
DELAYMS(5);
IO_UPDATE_0();
}
WriteReg(0x0010,0x10); //Отключение ФАПЧ
STROBER(); //IO UPDATE
WriteReg(0x0020,0x0b); // (11(0x0B)*2+2)*40=960MHz
WriteReg(0x0022,0x04); // hi range PLL range
WriteReg(0x01a6,0xc7); //FTW write
WriteReg(0x01a7,0x4b);
WriteReg(0x01a8,0x37);
WriteReg(0x01a9,0x89);
WriteReg(0x01aa,0x41);
WriteReg(0x01ab,0x00);
STROBER(); //IO UPDATE
WriteReg(0x0010,0x60); //Full Enable
STROBER(); //IO UPDATE
void Init_DDS()
{
//Вывод микросхемы из powerdown, установка CS, IO UPDATE неактивекн, ресет
DDS_PD0(); //DDS в активном режиме
DDSCS1(); //CS неактивен
IO_UPDATE_0(); //IO неактивен
RESET_1();
Init_Outputs(); //Инициализация портов в/в на выход
//Делаю ресет на 1мс
DELAYMS(1);
RESET_0(); //Ресет снял
//Прописываю 0й регистор так чтобы работало SDO
DDSCS0();
SPI_RX_Buffer.clear();
SPI_TX_Buffer.clear();
SPI_TX_Buffer.put(0x00);
SPI_TX_Buffer.put(0x00);
SPI_TX_Buffer.put(0x99);
Transfer_SPI();
DDSCS1();
}
void WriteReg(INT16U Adress,INT8U data)
{
INT8U Upper_Adress,Low_Adress;
Upper_Adress=Adress>>8;
Low_Adress=Adress&0xff;
DDSCS0();
SPI_RX_Buffer.clear();
SPI_TX_Buffer.clear();
SPI_TX_Buffer.put(Upper_Adress);
SPI_TX_Buffer.put(Low_Adress);
SPI_TX_Buffer.put(data);
Transfer_SPI();
DDSCS1();
}
void STROBER()
{
IO_UPDATE_0();
DELAYMS(5);
IO_UPDATE_1();
DELAYMS(5);
IO_UPDATE_0();
}