国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: 基于stm32的單片機的簡易數字頻率計設計 [打印本頁]

作者: 路漫漫    時間: 2020-5-24 17:49
標題: 基于stm32的單片機的簡易數字頻率計設計
設計文檔: 簡易頻率測量系統設計報告.zip (549.07 KB, 售價: 1 E幣)
參考代碼: 參考C語言程序代碼.zip (12.82 KB, 售價: 1 E幣)
1.簡介:數字頻率計主要由四個部分組成:時基電路,整形電路,控制電路和顯示電路組成。在一個測量周期過程中,由時基電路產生一標準時間信號控制閥門,調節時基電路中的電阻可產生需要的標準時間信號。信號輸入整形電路中,經過整形,輸出一方波,通過閥門后,計時器對其計數。當計數完畢,時基電路輸出一個上升沿,使鎖存器打開,計數器計數結果輸入譯碼器,從而讓顯示器顯示,達到測量頻率的目的。文件包括設計電路圖,設計源代碼與設計報
2.目標:本設計主要完成以下目標:
  1.測量信號輸入幅度1V~5V方波,頻率為1kHz~10kHz,測量精度1%,信號輸入幅度1V~5V三角波,頻率為1kHz~10kHz,測量精度1%,信號輸入幅度2V~5V正弦波,頻率為1kHz~10kHz,測量精度1%;
2.當輸入信號幅度大于15V時,具有報警功能,測量結果為數字顯示;
3.測量具有串口通信功能;
4.信號輸入幅度為1V~10V脈沖,頻率為20Hz~1kHz時,測量并計算占空比。
3.硬件設計:
3.硬件設計原理
測試部分硬件電路圖:

1.測頻部分:先對輸入信號進行波形轉換,通過一個過零比較器將三角波、正弦波轉化為方波,之后將將方波輸入單片機 口進行波形測試。
2.限幅報警部分:輸入信號經過D1變成半波信號,之后經過C3,C4,C5,C6,C7進行整流成為幅值直流信號,之后將信號輸入電位器進行分壓,保證15v電壓經過電位器后剩余3.3v電壓。最后輸出到端口上與3.3v電壓進行比較,將比較結果輸入單片機 口。
3.單片機供電部分:通過供電模塊輸出3.3v電壓供給stm32單片機。
4.軟件設計原理:
硬件部分會將所有波形統一成方波輸入。使用TIM3與TIM4計時器。TIM3進行波形捕捉。TIM3捕捉波形的上升沿或者下降沿。開始計數,知道捕捉到相對應的上升沿或者下降沿。根據所計數的多少即可計算出波形的占空比。每次捕捉到上升沿且之前為低電平,頻率計數加一。TIM4計數器用來計數一秒,當TIM4計數滿一秒時,發生TIM4中斷,根據TIM3的頻率計數,即可計算出輸入波形的頻率。
部分源碼
  1. void TIM3_Cap_Init(uint16_t arr, uint16_tpsc)                                  //TIM3用于輸入捕獲
  2. {
  3.          GPIO_InitTypeDefGPIO_InitStructure;
  4.          TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  5.          TIM_ICInitTypeDef  TIM3_ICInitStructure;
  6.      NVIC_InitTypeDef NVIC_InitStructure;

  7.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);     //使能TIM3時鐘
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);          //使能GPIOA時鐘

  9.          GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;                      //選擇6號引腳
  10.          GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPD;                      //輸入下拉
  11.          GPIO_Init(GPIOA,&GPIO_InitStructure);                                             //初始化PA6
  12.          GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                    //PA6下拉

  13.          //初始化定時器3 TIM3  
  14.          TIM_TimeBaseStructure.TIM_Period= arr;                               //設定計數器自動重裝值
  15.          TIM_TimeBaseStructure.TIM_Prescaler=psc;                                    //預分頻器
  16.          TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
  17.          TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up;  //TIM向上計數模式
  18.          TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

  19.          //初始化TIM3輸入捕獲參數
  20.          TIM3_ICInitStructure.TIM_Channel= TIM_Channel_1;                   //CC1S=01選擇輸入端 IC1映射到TI1上
  21.        TIM3_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising;      //上升沿捕獲
  22.        TIM3_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI; //映射到TI1上
  23.        TIM3_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1;   //配置輸入分頻,不分頻
  24.        TIM3_ICInitStructure.TIM_ICFilter = 0x00;                                  //IC1F=0000 配置輸入濾波器 不濾波
  25.        TIM_ICInit(TIM3,&TIM3_ICInitStructure);

  26.          //中斷分組初始化
  27.          NVIC_InitStructure.NVIC_IRQChannel= TIM3_IRQn;            //TIM3中斷
  28.          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;  //先占優先級0級
  29.          NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0;          //從優先級0級
  30.          NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;           //IRQ通道被使能
  31.          NVIC_Init(&NVIC_InitStructure);

  32.          TIM_ITConfig(TIM3,TIM_IT_CC1,ENABLE);

  33.      TIM_Cmd(TIM3,ENABLE );     //使能定時器3
復制代碼
檢測結果
當正弦波的頻率為5khz時,數字頻率計顯示結果為
當方波的頻率為8khz時,數字頻率計顯示結果為
當輸入信號幅度大于15V時,綠燈被點亮,進行報警
測量占空比


作者: Benett    時間: 2023-3-16 08:29
多謝分享!
作者: xhdzwzj    時間: 2025-6-13 09:10
學習啦,謝謝




歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0