<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用STM32調試FMSDR模塊及解調FM電臺(2)

冬至子 ? 來源:硬木課堂 ? 作者:硬木課堂 ? 2023-07-06 10:54 ? 次閱讀

3. 調試8027使其發出單音FM信號

3.1 輸出24Mhz和驗證I2C接口

  1. 硬件連接

    將FM_SDR板卡和STM32H750開發板連接。

本文中所有例子中我們都僅給MSI001使用天線,因為QN8027離得很近,發射端不需要使用天線

本程序中操作的管腳如下描述:

1.jpg

2. PWM輸出24MHz

QN8027芯片需要輸入24MHz的時鐘作為參考信號,在這里通過STM32H750的TIMER2產生24M的方波,提供給QN8027作為輸入參考信號。

PWM信號的關鍵參數是頻率和占空比,我們分別看一下如何設定TIM2來確定輸出PWM的頻率和占空比:

PWM的輸出頻率=計數器計數頻率/(計數器的計數上限+1),計數器計數頻率在上圖中是CK_CNT,它由時鐘和觸發控制模塊輸出的CK_PSC經過PSC分頻器得到,因此我們在初始化TIM1的時候選擇時鐘源為CK_INT,預分頻器比為1(寄存器中寫入為0),這樣我們的CK_CNT是240MHz;而計數器的計數上限就是自動重載寄存器APR的值,設定為9;

PWM的占空比,由比較寄存器(CCR1-4的值)和計數器計數上限(APR的值)決定,設定CCR1為4的話,PWM1的占空比即為(4+1)/(9+1)= 50%。

具體TIMER輸出PWM方法介紹,可以回顧基礎實驗“實驗六TIM1輸出PWM”:

3. 硬件IIC接口配置

芯片的控制接口是I2C協議,要使芯片正常工作,首先I2C接口的操作要正常。這里利用QN8027的I2C支持可讀可寫,寫入0x00寄存器一個值,再讀出來。如果讀出和寫入的一致,說明I2C操作正常,芯片可以被控。這樣進行后續調試才有初步把握。

需要配置STM32H750的硬件I2C,然后發出控制字操作8027芯片,確認板卡和芯片正常工作。I2C工作速度設為100K.

也可以使用GPIO模擬I2C時序,可以回顧基礎實驗“實驗十五 矩陣鍵盤和數碼管顯示—模擬IIC”。

4. 編寫代碼

在main中使能PWM輸出,和讀寫QN8027寄存器

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_I2C2_Init();
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//tim2開啟pwm,輸出24Mhz
QN8027_WriteOneByte(0x00, 0x31);	//向寄存器0x00寫入值0x31
HAL_Delay(100);		//延時100ms
qn8027_read_byte = QN8027_ReadOneByte(0x00);	//讀取寄存器0x00的值
  while (1)
  {
  }
}

添加QN8027驅動代碼

#include "qn8027/qn8027.h"

I2C_HandleTypeDef *qn8027 = &hi2c2; 

//初始化QN8027寄存器,設為98.5M輸出
uint8_t qn8027_98_5M_reg_tbl[][2]=
{
	0x00, 0x31, 
	0x01, 0xC2,
	0x02, 0xB9,
	0x03, 0x80,
	0x04, 0xB2,
	0x10, 0x32,
	0x11, 0x81, 
};

//在QN8027指定地址讀出一個數據
//WriteAddr  :寫入數據的目的地址    
//DataToWrite:要寫入的數據
uint8_t QN8027_ReadOneByte(uint8_t ReadAddr)
{				  
	uint8_t temp=0;		  

	HAL_I2C_Mem_Read(qn8027,QN8027_READ,ReadAddr,1,&temp,1,20);

	return temp;
}
//在QN8027指定地址寫入一個數據
//WriteAddr  :寫入數據的目的地址    
//DataToWrite:要寫入的數據
HAL_StatusTypeDef QN8027_WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite)
{		
	HAL_StatusTypeDef errorcode = HAL_OK;

	errorcode = HAL_I2C_Mem_Write(qn8027,QN8027_WRITE,WriteAddr,1,&DataToWrite,1,20);
	return errorcode;
}

//Qn8027初始化,初始化成98.5M,改變寄存器參數配置不同頻率
HAL_StatusTypeDef Qn8027_Init(void)
{
	uint32_t i=0;
	HAL_StatusTypeDef errorcode = HAL_OK;

	//設置:輸出98.5M
	for(i=0;i< (sizeof(qn8027_98_5M_reg_tbl)/2);i++)
	{
		errorcode = QN8027_WriteOneByte(qn8027_98_5M_reg_tbl[i][0],qn8027_98_5M_reg_tbl[i][1]);  
	}
	return errorcode;
}

5. PWM測試輸出

如果有條件,可以使用示波器測試QN8027_REFCLK管腳,觀測有無24M的波形。

6. Qn8027讀寫測試

keil中用debug單步調試,先向寄存器0x00寫入值0x31,再讀取寄存器0x00的值,通過Watch窗口觀察變量qn8027_read_byte值為0X31.說明I2C讀寫正確。

如果讀出的值和寫入的值一致,說明I2C時序和8027硬件都沒有問題。那么我們就可以繼續下一步配置。

注意,I2C時序寫入這一步看上去雖然簡單,卻是最經常出問題的步驟。如果遇到8027沒有反應,建議用如下方法排查:

  1. 電源測試:8027供電是否正常;
  2. IO通斷測試:使用IO輸出高低電平,通過測量確定PCB焊接正確,且插對了孔位;
  3. I2C時序測試:確定I2C的上拉電阻正確,使用示波器或邏輯分析儀捕獲發出的I2C時序,判斷是否I2C配置寄存器有錯誤;FPGA寫的I2C程序,則要特別留意是否有代碼bug。
  4. 8027如果沒有應答,觀察是否有虛焊等情況(開發板發貨前經過測試,基本上可以排除電源和8027的焊接問題)。

3.2 將H750內部DAC輸出的1KHz正弦波調制到98.5MHz

下面,我們將使用單片機的PA4管腳發出單音(正弦波),頻率1KHz,峰峰值1600mVpp,直流偏置1.65V。接入FMSDR開發板的調制信號管腳DAC_L。單片機管腳PA15發出24MHz的PWM信號,提供芯片的參考時鐘。通過I2C接口控制QN8027芯片。

1. 硬件連接

將FM_SDR板卡和STM32H750開發板連接。

程序中操作的管腳如下描述:

1.jpg

  1. DAC輸出1kHz正弦波

    STM32H750開發板輸出1kHz的正弦波,通過Timer6產生25k頻率的觸發事件,DAC配置為外部timer6觸發中斷。正弦波表長度為25字長,每次timer6觸發事件發送,在中斷服務程序中一直循環發送波表。

也可以使用TIMER事件觸發DMA輸出波形方法,可以回顧基礎實驗“實驗二十八 DAC應用定時器觸發實現DMA輸出波形”。

DAC驅動設計

定時器觸發DAC做DMA數據傳輸的實現思路 實現思路框圖如下:

image.png

  1. QN8027設置輸出頻率為98.5MHZ

    在qn8027.c文件中,添加如下代碼,配置qn8027寄存器如下,第一行是寄存器地址,第二行是寫入寄存器值。(下表對應98.5M的頻點)。寄存器取值參考前面調試文檔。

I2C配置和操作在前一小節已經講解,可以回顧前一小節查看。

  1. 編寫代碼

    在main中使能PWM輸出,初始化正弦波碼表,開啟TIM6和DAC。初始化qn8027頻率為98.5M.在TIM6_DAC_IRQHandler中斷中更新DAC值。

  2. 1khz正弦波輸出測試

    用示波器測量DAC輸出(PA4管腳),和經過濾波后波形。CH1(黃色)是DAC發出的1Khz正弦波,CH2(藍色)是經過硬件濾波后qn8027輸入管腳的波形。

測試點如下圖(濾波前波形測量R45下側,濾波后波形測量R8左右都行):

  1. 98.5MHz FM信號測試

    配置好QN8027后,1KHz的正弦波單音就被調制在98.5MHz上,用FM收音機調到98.5MHz頻點上就可以聽到這個1KHz的“嘟”聲。 注意:如果當地98.5MHz上有電臺,可以換一個空白的頻點,避開已有的電臺。

成品收音機的功能是已知的,用已知來調試未知,是調試的基本思路。

除了使用成品收音機來驗證98.5M上FM調制的1KHz信號之外,我們也可以用m302的頻譜儀來驗證,因為m302的帶寬有50MHz,輸入的100MHz信號雖然有衰減,但是在頻域上還是能看見的。

這里涉及到欠采樣理論。欠采樣理論不在這里講解,以圖示來說明。

以98M的頻點為例,用100M采樣。信號是周期連續波,采樣脈沖是δ函數。采樣過程就相當于時域相乘,對應頻域卷積。就是把信號的正負頻譜進行搬移。圖中畫出0附近的幾個搬移,-200M,-100M,0,100M,200M。為了看清楚,每對之間的高度畫的不一樣,便于區分??梢钥吹?,在100M位置的搬移上,-98M落在2M位置。

同樣的,如果以10M采樣率采樣,經過多個奈奎斯特域的翻折,98M的信號也會落到2M位置上。

我們將AIN1連接到FM輸出端口,開啟FFT功能:

選擇打開FFT功能

選擇5M帶寬(采樣率10MSPS),可以看到混疊到1.5MHz的FM信號和4MHz上的時鐘信號。如下圖。

暫停后將頻率軸展寬到1.4M - 1.6M,可以清晰看到混疊到1.5MHz的FM信號:

從實驗過程可以看到,欠采樣會出現頻譜翻折,諧波翻折,混頻翻折,會有多個頻譜線。所以實際中如果要利用欠采樣來采樣高頻信號,需要添加濾波器。這里只是利用了欠采樣來查看QN8027是否發出了設置的頻點。

使用成品收音機或者使用頻譜儀,確認QN8027發出正確的單音FM信號后,我們就可以使用這個“已知的單音FM信號”來調試MSi001了。單音比直接收電臺的音頻更簡單直觀的看到MSi001的采集、解調和濾波各個步驟的波形,并和已知正確波形進行對比。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    30

    文章

    5120

    瀏覽量

    118029
  • 數碼管
    +關注

    關注

    31

    文章

    1833

    瀏覽量

    90071
  • PWM波
    +關注

    關注

    0

    文章

    98

    瀏覽量

    16737
  • 預分頻器
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8019
  • STM32H750
    +關注

    關注

    1

    文章

    16

    瀏覽量

    1482
收藏 人收藏

    評論

    相關推薦

    使用STM32調試FMSDR模塊解調FM電臺(1)

    示波器:本實驗我們使用硬木課堂的口袋儀器產品進行測量
    的頭像 發表于 10-13 15:52 ?2339次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(1)

    使用STM32調試FMSDR模塊解調FM電臺(3)

    QN8027芯片需要輸入24MHz的時鐘作為參考信號,在這里通過STM32H750的TIMER2產生24M的方波,提供給QN8027作為輸入參考信號。
    的頭像 發表于 10-13 16:04 ?4281次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(3)

    教你最簡單做一個隨身FM電臺!X各種使用方法#電臺

    電臺FM
    Dimsmary
    發布于 :2022年07月12日 14:29:14

    FM解調器電路

    幾種FM解調器電路
    發表于 04-21 11:49 ?1814次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器電路

    FM解調器A電路

    FM解調器A電路
    發表于 03-21 19:00 ?775次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器A電路

    FM解調器B電路

    FM解調器B電路
    發表于 03-21 19:01 ?735次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器B電路

    FM解調器C電路

    FM解調器C電路
    發表于 03-21 19:02 ?971次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器C電路

    線性FM解調器電路

    線性FM解調器電路
    發表于 03-21 19:14 ?923次閱讀
    線性<b class='flag-5'>FM</b><b class='flag-5'>解調</b>器電路

    FM解調電路圖

    FM解調電路圖
    發表于 07-15 16:47 ?1013次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>電路圖

    FM解調

    FM解調器 LM311
    發表于 09-15 10:28 ?1431次閱讀
    <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器

    455KHz FM解調

    455KHz FM解調
    發表于 09-15 11:04 ?1074次閱讀
    455KHz <b class='flag-5'>FM</b><b class='flag-5'>解調</b>器

    使用STM32調試FMSDR模塊解調FM電臺(2)

    當我們使用FPGA或者STM32模塊配合FMSDR模塊使用的時候,需要從零開始調試這個電路,逐步完成:硬件好壞判斷、8027和MSI001寄
    的頭像 發表于 10-13 15:56 ?3382次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(2)

    使用STM32調試FMSDR模塊解調FM電臺(1)

    當我們使用FPGA或者STM32模塊配合FMSDR模塊使用的時候,需要從零開始調試這個電路,逐步完成:硬件好壞判斷、8027和MSI001寄
    的頭像 發表于 07-06 10:50 ?1400次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(1)

    使用STM32調試FMSDR模塊解調FM電臺(3)

    MSI001芯片需要輸入24MHz的時鐘作為參考信號,在這里使用專門的時鐘產生單元RCC產生24M的方波,提供給MSI001作為輸入參考信號。
    的頭像 發表于 07-06 11:00 ?3118次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(3)

    使用STM32調試FMSDR模塊解調FM電臺(4)

    本實驗是在配置MSI001的頻點為101.7Mhz已知交通廣播電臺,觀察喇叭是否能聽到交通廣播聲音,再調整MSI001的輸出幅度。
    的頭像 發表于 07-06 11:05 ?708次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>調試</b><b class='flag-5'>FMSDR</b><b class='flag-5'>模塊</b>及<b class='flag-5'>解調</b><b class='flag-5'>FM</b><b class='flag-5'>電臺</b>(4)
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>