国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于STM32單片機(jī)和AD9850的智能DDS函數(shù)信號(hào)發(fā)生器

這篇具有很好參考價(jià)值的文章主要介紹了基于STM32單片機(jī)和AD9850的智能DDS函數(shù)信號(hào)發(fā)生器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

CSDN話題挑戰(zhàn)賽第2期
參賽話題:學(xué)習(xí)筆記

1、整體設(shè)計(jì)

有一天,我在瀏覽CSDN時(shí)看到一篇關(guān)于 AD9850 的帖子。AD9850是一款可以產(chǎn)生1hz到40mhz左右正弦波的芯片。淘寶的產(chǎn)品經(jīng)銷商能夠?qū)⑿酒c提供 TTL 電平控制的小板配對(duì),然后以令人難以置信的 60元(或更低?。┑膬r(jià)格出售。

要控制 AD9850,您需要某種微控制器。無需過多詳細(xì)說明,您需要向芯片發(fā)送一組串行或并行數(shù)據(jù)來設(shè)置頻率。網(wǎng)上有很多帖子詳細(xì)說明了如何做到這一點(diǎn),所以我不會(huì)詳細(xì)介紹。然而,很難找到一個(gè)好的 AD9850 引腳排列,所以你去吧。

2、硬件方案

ad9850對(duì)應(yīng)單片機(jī)上的引腳,嵌入式,筆記,單片機(jī),stm32,嵌入式硬件

GND = 地;Vss
CLK = 串行編程時(shí)鐘
Latch = 串行編程鎖存器(9850 上的 FQ_UD 引腳)
DATA = 串行編程 DATA(內(nèi)部連接到 D7)
RST = 復(fù)位。保持連接到 GND
SQW = 方波輸出(互補(bǔ)) 占空比可通過藍(lán)色電位器調(diào)節(jié)。
SINA = 原始未濾波 AD9850 正弦輸出
SINB = 70 MHz LPF 濾波 AD9850 輸出。

對(duì)我來說,管理 AD9850 的最簡(jiǎn)單方法是使用 Arduino Uno。如果您不了解 Arduino 平臺(tái),您應(yīng)該查看官方網(wǎng)站www.arduino.cc。我使用 Arduino 好多年了,我已經(jīng)發(fā)現(xiàn)它是一個(gè)很棒的開發(fā)平臺(tái)。如果你是一個(gè)業(yè)余愛好者……你真的不會(huì)出錯(cuò)。

這個(gè)項(xiàng)目正在進(jìn)行中。您應(yīng)該能夠從 Arduino Sketch 中推斷出所有項(xiàng)目的引腳,但如果您有任何問題,請(qǐng)聯(lián)系我。我的原理圖有點(diǎn)粗糙,因?yàn)槲也粌A向于經(jīng)常創(chuàng)建它們,所以如果你發(fā)現(xiàn)任何不合適的東西,請(qǐng)告訴我!

由于有很多請(qǐng)求,我還為 IF(超外差)類型的接收器創(chuàng)建了一個(gè)版本。VFO 現(xiàn)在支持中頻,并且可以切換 Arduino 上一個(gè)模擬輸入的高/低電平。IF 可以是您想要的任何東西,可以是加法或減法。

DDS VFO 的輸出電壓隨頻率而變化,因此如果您需要它在寬范圍 VFO 上輸出恒定電平,您需要在緩沖器中設(shè)計(jì)一個(gè) AGC(或排序)以提供恒定電平輸出. 我已經(jīng)看到一些帶有簡(jiǎn)單運(yùn)算放大器的出色設(shè)計(jì),它們通過接入反饋電路來實(shí)現(xiàn)這一點(diǎn)。

同時(shí)這個(gè)方案它適用于 nano。注意:Arduino 的 D10 連接到 AD9850 的 DATA 引腳,而不是 D7。

連接后的硬件電路如下:

ad9850對(duì)應(yīng)單片機(jī)上的引腳,嵌入式,筆記,單片機(jī),stm32,嵌入式硬件

3、軟件程序

arduino的程序如下:

#include <LiquidCrystal.h>
#include <Rotary.h>
#include <EEPROM.h>
 
//Setup some items
#define W_CLK 8   // Pin 8 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 9   // Pin 9 - connect to freq update pin (FQ)
#define DATA 10   // Pin 10 - connect to serial data load pin (DATA)
#define RESET 11  // Pin 11 - connect to reset pin (RST) 
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.  Must be interrupt pins.
LiquidCrystal lcd(12, 13, 7, 6, 5, 4); // I used an odd pin combination because I need pin 2 and 3 for the interrupts.
int_fast32_t rx=7000000; // Starting frequency of VFO
int_fast32_t rx2=1; // variable to hold the updated frequency
int_fast32_t increment = 100; // starting VFO update increment in HZ.
int buttonstate = 0;
String hertz = "100 Hz";
int  hertzPosition = 5;
byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;  //Placeholders
String freq; // string to hold the frequency
int_fast32_t timepassed = millis(); // int to hold the arduino miilis since startup
int memstatus = 1;  // value to notify if memory is current or old. 0=old, 1=current.
 
int ForceFreq = 1;  // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory.  YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET!
 
void setup() {
  Serial.begin(9600);
  Serial.println("Start...");
  pinMode(A0,INPUT); // Connect to a button that goes to GND on push
  digitalWrite(A0,HIGH);
  lcd.begin(16, 2);
  r.begin();
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT); 
  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);  // this pulse enables serial mode on the AD9850 - Datasheet page 12.
  Serial.println("DDS v1.0.0");
  lcd.clear();
  lcd.setCursor(hertzPosition,1);    
  lcd.print(hertz);
   // Load the stored frequency  
  if (ForceFreq == 0) {
    freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6));
    rx = freq.toInt();  
    Serial.println(rx);
  }
  
}
 
 
void loop() {
  if (rx != rx2){    
        showFreq();
        sendFrequency(rx);
        rx2 = rx;
      }
      
  buttonstate = digitalRead(A0);
  if(buttonstate == LOW) {
        setincrement();        
    };
 
  // Write the frequency to memory if not stored and 20 seconds have passed since the last frequency change.
    if(memstatus == 0){   
      if(timepassed+20000 < millis()){
        storeMEM();
      }
    }   
}
 
 
ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result) {    
    if (result == DIR_CW){rx=rx+increment;}
    else {rx=rx-increment;};       
      if (rx >=30000000){rx=rx2;}; // UPPER VFO LIMIT
      if (rx <=500000){rx=rx2;}; // LOWER VFO LIMIT
  }
}
 
 
 
// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
void sendFrequency(double frequency) {  
  int32_t freq = frequency * 4294967295/125000000;  // note 125 MHz clock on 9850.  You can make 'slight' tuning variations here by adjusting the clock frequency.
  for (int b=0; b<4; b++, freq>>=8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0x000);   // Final control byte, all 0 for 9850 chip
  pulseHigh(FQ_UD);  // Done!  Should see output
}
// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
  }
}
 
void setincrement(){
  if(increment == 1){increment = 10; hertz = "10 Hz"; hertzPosition=5;}
  else if(increment == 10){increment = 50; hertz = "50 Hz"; hertzPosition=5;}
  else if (increment == 50){increment = 100;  hertz = "100 Hz"; hertzPosition=4;}
  else if (increment == 100){increment = 500; hertz="500 Hz"; hertzPosition=4;}
  else if (increment == 500){increment = 1000; hertz="1 Khz"; hertzPosition=6;}
  else if (increment == 1000){increment = 2500; hertz="2.5 Khz"; hertzPosition=4;}
  else if (increment == 2500){increment = 5000; hertz="5 Khz"; hertzPosition=6;}
  else if (increment == 5000){increment = 10000; hertz="10 Khz"; hertzPosition=5;}
  else if (increment == 10000){increment = 100000; hertz="100 Khz"; hertzPosition=4;}
  else if (increment == 100000){increment = 1000000; hertz="1 Mhz"; hertzPosition=6;}  
  else{increment = 1; hertz = "1 Hz"; hertzPosition=5;};  
   lcd.setCursor(0,1);
   lcd.print("                ");
   lcd.setCursor(hertzPosition,1); 
   lcd.print(hertz); 
   delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed.
};
 
void showFreq(){
    millions = int(rx/1000000);
    hundredthousands = ((rx/100000)%10);
    tenthousands = ((rx/10000)%10);
    thousands = ((rx/1000)%10);
    hundreds = ((rx/100)%10);
    tens = ((rx/10)%10);
    ones = ((rx/1)%10);
    lcd.setCursor(0,0);
    lcd.print("                ");
   if (millions > 9){lcd.setCursor(1,0);}
   else{lcd.setCursor(2,0);}
    lcd.print(millions);
    lcd.print(".");
    lcd.print(hundredthousands);
    lcd.print(tenthousands);
    lcd.print(thousands);
    lcd.print(".");
    lcd.print(hundreds);
    lcd.print(tens);
    lcd.print(ones);
    lcd.print(" Mhz  ");
    timepassed = millis();
    memstatus = 0; // Trigger memory write
};
 
void storeMEM(){
  //Write each frequency section to a EPROM slot.  Yes, it's cheating but it works!
   EEPROM.write(0,millions);
   EEPROM.write(1,hundredthousands);
   EEPROM.write(2,tenthousands);
   EEPROM.write(3,thousands);
   EEPROM.write(4,hundreds);       
   EEPROM.write(5,tens);
   EEPROM.write(6,ones);   
   memstatus = 1;  // Let program know memory has been written
   Serial.println(rx);
};
 

4、實(shí)物驗(yàn)證

ad9850對(duì)應(yīng)單片機(jī)上的引腳,嵌入式,筆記,單片機(jī),stm32,嵌入式硬件文章來源地址http://www.zghlxwxcb.cn/news/detail-638676.html

到了這里,關(guān)于基于STM32單片機(jī)和AD9850的智能DDS函數(shù)信號(hào)發(fā)生器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于STM32單片機(jī)的智能家居畢設(shè)

    基于STM32單片機(jī)的智能家居畢設(shè)

    1、硬件清單 序號(hào) 名稱 型號(hào)/作用 數(shù)量 1 STM32單片機(jī) 正點(diǎn)原子精英板(STM32F103ZET6) 1 2 溫濕度傳感器 DHT11 1 3 光敏傳感器 3針制光敏傳感器模塊 1 4 空氣質(zhì)量傳感器 MQ135 1 5 人體紅外傳感器 微型人體紅外感應(yīng)模塊 1 6 語音識(shí)別模塊/播報(bào)模塊 LD3320/JQ8900 MP3(可插SD/TF卡) 1 7 喇叭

    2024年02月03日
    瀏覽(108)
  • 基于stm32單片機(jī)的智能家居環(huán)境監(jiān)控系統(tǒng)

    基于stm32單片機(jī)的智能家居環(huán)境監(jiān)控系統(tǒng)

    智能家居環(huán)境監(jiān)控系統(tǒng)的整體電路主要由stm32單片機(jī)最小系統(tǒng),光MQ-2煙霧傳感器電路,紅外人體檢測(cè)電路,DS18B20溫度傳感器,LCD1602顯示電路,水泵驅(qū)動(dòng)電路,風(fēng)扇驅(qū)動(dòng)電路,LED指示燈,蜂鳴器報(bào)警電路;原理圖如圖: PCB如下: 1.通過MQ-2煙霧傳感器及檢測(cè)電路對(duì)周圍環(huán)境中的

    2024年02月11日
    瀏覽(100)
  • 【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚缸

    【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚缸

    Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ?? 項(xiàng)目分享與指導(dǎo): https://gitee.com/sinonfin/sharing 近年以來,隨著我國綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能

    2024年02月04日
    瀏覽(95)
  • 單片機(jī)項(xiàng)目分享 基于Stm32的家庭智能監(jiān)控系統(tǒng) - 單片機(jī) 圖像識(shí)別 人體檢測(cè) AI

    單片機(jī)項(xiàng)目分享 基于Stm32的家庭智能監(jiān)控系統(tǒng) - 單片機(jī) 圖像識(shí)別 人體檢測(cè) AI

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最

    2024年01月16日
    瀏覽(30)
  • 單片機(jī)畢設(shè) 基于STM32的智能藥箱系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    單片機(jī)畢設(shè) 基于STM32的智能藥箱系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    Hi,大家好,今天向大家介紹一個(gè)學(xué)長(zhǎng)做的單片機(jī)項(xiàng)目 基于STM32的智能藥箱系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 照顧老人, 特別是提醒老人準(zhǔn)時(shí)吃藥已經(jīng)成為了一個(gè)社會(huì)關(guān)心的問題。長(zhǎng)期記錄吃藥種類、 吃藥時(shí)間能為分析老人的病理提供有力的依據(jù)。 基于目

    2024年02月04日
    瀏覽(24)
  • 物聯(lián)網(wǎng)畢設(shè) - 基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚缸

    物聯(lián)網(wǎng)畢設(shè) - 基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚缸

    Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ?? 項(xiàng)目分享與指導(dǎo): https://gitee.com/sinonfin/sharing 近年以來,隨著我國綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能

    2024年02月03日
    瀏覽(22)
  • 【單片機(jī)畢設(shè)選題】 基于Stm32的家庭智能監(jiān)控系統(tǒng) - 單片機(jī) 圖像識(shí)別 人體檢測(cè) AI

    【單片機(jī)畢設(shè)選題】 基于Stm32的家庭智能監(jiān)控系統(tǒng) - 單片機(jī) 圖像識(shí)別 人體檢測(cè) AI

    hr style=\\\" border:solid; width:100px; height:1px;\\\" color=#000000 size=1\\\" ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最

    2024年01月21日
    瀏覽(31)
  • 基于51/STM32單片機(jī)的智能藥盒 物聯(lián)網(wǎng)定時(shí)吃藥 藥品分類

    基于51/STM32單片機(jī)的智能藥盒 物聯(lián)網(wǎng)定時(shí)吃藥 藥品分類

    ?功能介紹 ?以51/STM32單片機(jī)作為主控系統(tǒng); ? LCD1602液晶顯示當(dāng)前時(shí)間、溫濕度、藥品重量 ? 3次吃藥時(shí)間、藥品類目和藥品數(shù)量 ?HX711壓力采集當(dāng)前藥品重量 ?紅外感應(yīng)當(dāng)前藥盒是否打開 ?DS1302時(shí)鐘芯片顯示當(dāng)前年月日、時(shí)分秒、星期 ?DHT11采集當(dāng)前環(huán)境溫度和濕度? ? ? ?

    2024年02月19日
    瀏覽(20)
  • 【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能溫控農(nóng)業(yè)大棚系統(tǒng) - 物聯(lián)網(wǎng) stm32

    【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能溫控農(nóng)業(yè)大棚系統(tǒng) - 物聯(lián)網(wǎng) stm32

    Hi,大家好,這里是丹成學(xué)長(zhǎng),今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目 基于單片機(jī)的智能溫控農(nóng)業(yè)大棚系統(tǒng) 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 單片機(jī)-嵌入式畢設(shè)選題大全及項(xiàng)目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 近年來我國的溫室控制取得了 長(zhǎng)足的進(jìn)步, 首先在

    2024年02月02日
    瀏覽(98)
  • 基于STM32單片機(jī)的智能家居環(huán)境監(jiān)測(cè)與控制系統(tǒng)設(shè)計(jì)

    基于STM32單片機(jī)的智能家居環(huán)境監(jiān)測(cè)與控制系統(tǒng)設(shè)計(jì) 摘要 :隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,智能家居環(huán)境監(jiān)測(cè)與控制系統(tǒng)的應(yīng)用越來越廣泛。本文設(shè)計(jì)了一種基于STM32單片機(jī)的智能家居環(huán)境監(jiān)測(cè)與控制系統(tǒng),該系統(tǒng)能夠?qū)崟r(shí)監(jiān)測(cè)環(huán)境中的溫濕度和天然氣濃度,并將數(shù)據(jù)顯示在

    2024年04月25日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包