娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM8L101F3輸入捕獲測脈寬及占空比

發(fā)布者:科技奇才最新更新時間:2020-02-09 來源: eefocus關(guān)鍵字:STM8L101F3  輸入捕獲  脈寬  占空比 手機看文章 掃描二維碼
隨時隨地手機看文章

近期空閑時做了一個STM8L101芯片的PWM檢測程序,在此發(fā)表個人見解。

預(yù)備知識:

STM8L庫函數(shù)的使用、STM8L定時器的使用,相關(guān)資料自行百度

目標(biāo):通過TIM3輸出PWM波,將輸出的波輸入至TIM2的捕獲通道。

好了,接下來進(jìn)入正題。

STM8L10X的定時器的功能比較豐富,而且價格低廉,做輸入捕獲還是挺好的


首先介紹一個STM8L101X固件庫的一個函數(shù),在固件庫的

line 444 of file stm8l10x_tim2.c.


TIM2_PWMIConfig是專門用來配置PWM輸入模式的庫函數(shù),網(wǎng)上關(guān)于此處的介紹比較少,這里簡要介紹并應(yīng)用


該函數(shù)原型如下:


00420 /**

00421   * @brief  Configures the TIM2 peripheral in PWM Input Mode according to the

00422   *         specified parameters.

00423   * @param  TIM2_Channel: TIM2 Channel 輸入捕獲的通道

00424   *          This parameter can be one of the following values:

00425   *            @arg TIM2_Channel_1: Channel 1

00426   *            @arg TIM2_Channel_2: Channel 2     

00427   * @param  TIM2_ICPolarity: Input Capture Polarity PWM開始的極性,可選為上升沿/下降沿

00428   *          This parameter can be one of the following values:

00429   *            @arg TIM2_ICPolarity_Rising: Input Capture on Rising Edge

00430   *            @arg TIM2_ICPolarity_Falling: Input Capture on Falling Edge  

00431   * @param  TIM2_ICSelection: Input Capture Selection 輸入通道與捕獲通道的連接,此處

TIM2_ICSelection_DirectTI表示捕獲通道1與輸入通道1連接

TIM2_ICSelection_IndirectTI表示捕獲通道1與輸入通道2連接

第三個值好像是與另外一個管腳連接,應(yīng)該是TRGI

00432 * This parameter can be one of the following values:

00433   *   @arg TIM2_ICSelection_DirectTI: Input Capture mapped on the direct input

00434   *    @arg TIM2_ICSelection_IndirectTI: Input Capture mapped on the indirect input

00435   *            @arg TIM2_ICSelection_TRGI: Input Capture mapped on the Trigger Input  

 00436   * @param  TIM2_ICPrescaler: Input Capture Prescaler 分頻,表示多少個電位突變觸發(fā)一個事件

00437   *          This parameter can be one of the following values:

00438   *            @arg TIM2_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event)

00439   *            @arg TIM2_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events)

00440   *            @arg TIM2_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events)

00441   *            @arg TIM2_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 

00442   * @retval None

00443   */

00444 void TIM2_PWMIConfig(TIM2_Channel_TypeDef TIM2_Channel,

00445                      TIM2_ICPolarity_TypeDef TIM2_ICPolarity,

00446                      TIM2_ICSelection_TypeDef TIM2_ICSelection,

00447                      TIM2_ICPSC_TypeDef TIM2_ICPrescaler,

00448                      uint8_t TIM2_ICFilter)

00449 {

00450   uint8_t icpolarity = (uint8_t)TIM2_ICPolarity_Rising;

00451   uint8_t icselection = (uint8_t)TIM2_ICSelection_DirectTI;

00452 

00453   /* Check the parameters */

00454   assert_param(IS_TIM2_CHANNEL(TIM2_Channel));

00455 

00456   /* Select the Opposite Input Polarity */

00457   if (TIM2_ICPolarity == TIM2_ICPolarity_Rising) //配置開始時觸發(fā)方式

00458   {

00459     icpolarity = (uint8_t)TIM2_ICPolarity_Falling;

00460   }

00461   else

00462   {

00463     icpolarity = (uint8_t)TIM2_ICPolarity_Rising;

00464   }

00465 

00466   /* Select the Opposite Input */

00467   if (TIM2_ICSelection == TIM2_ICSelection_DirectTI) //另外一個捕獲通道觸發(fā)方式相反

00468   {

00469     icselection = (uint8_t)TIM2_ICSelection_IndirectTI;

00470   }

00471   else

00472   {

00473     icselection = (uint8_t)TIM2_ICSelection_DirectTI;

00474   }

00475 

00476   if (TIM2_Channel == TIM2_Channel_1)

00477   {

00478     /* TI1 Configuration */

00479     TI1_Config(TIM2_ICPolarity, TIM2_ICSelection,

00480                TIM2_ICFilter);

00481 

00482     /* Set the Input Capture Prescaler value */

00483     TIM2_SetIC1Prescaler(TIM2_ICPrescaler);

00484 

00485     /* TI2 Configuration */

00486     TI2_Config((TIM2_ICPolarity_TypeDef)icpolarity, (TIM2_ICSelection_TypeDef)icselection, TIM2_ICFilter);

00487 

00488     /* Set the Input Capture Prescaler value */

00489     TIM2_SetIC2Prescaler(TIM2_ICPrescaler);

00490   }

00491   else

00492   {

00493     /* TI2 Configuration */

00494     TI2_Config(TIM2_ICPolarity, TIM2_ICSelection,

00495                TIM2_ICFilter);

00496 

00497     /* Set the Input Capture Prescaler value */

00498     TIM2_SetIC2Prescaler(TIM2_ICPrescaler);

00499 

00500     /* TI1 Configuration */

00501     TI1_Config((TIM2_ICPolarity_TypeDef)icpolarity, (TIM2_ICSelection_TypeDef)icselection, TIM2_ICFilter);

00502 

00503     /* Set the Input Capture Prescaler value */

00504     TIM2_SetIC1Prescaler(TIM2_ICPrescaler);

00505   }

00506 }

00507 



部分注釋見上,簡要分析可知,該函數(shù)將選擇的輸入通道連接到定時器的捕獲通道1和捕獲通道2上,并且捕獲通道1為檢測開始沿,捕獲通道2則檢測


第二個電位沿,比如配置為上升沿為PWM開始,則PWM中間為下降沿




好了,該函數(shù)功能就是這樣了,下面是一些檢測函數(shù),環(huán)境為STVD:




Tim2_Impulse_Detection.h頭文件

#ifndef Tim2_Impulse_Detection

#define Tim2_Impulse_Detection





/*

此庫文件用于捕獲Tim2通道1的輸入并檢測頻率以及脈寬

*/

#include

#include

#include

#include

#include





extern u8 temp; //中間變量,用于判斷上升0/下降1

extern int ICValue1; //上升沿記錄的值

extern int ICValue2; //下降沿記錄的值

extern int ICValue3; //第二個上升沿記錄的值

extern u8 update_high; //高電位溢出總數(shù)

extern u8 update_count; //溢出總數(shù)

extern u8 rate; //占空比,丟棄小數(shù)位





void Tim2_Impulse_Detection_Init(void); //Tim2_Impulse_Detection初始化

@far @interrupt void TIM2_Capture_Compare_HandledInterrupt (void);//捕獲中斷服務(wù)函數(shù)

@far @interrupt void TIM2_Update_Overflow_Trigger_Break_HandledInterrupt (void);//溢出中斷服務(wù)函數(shù)

void Tim2_Impulse_Detection_Get_Cycle(int* cycle_ms,int* cycle_us,u8* rate);//獲得輸入信號周期以及脈寬

void Tim3_PWM_Out(void); //Tim3輸出PWM波







#endif



Tim2_Impulse_Detection.c源文件

#include



/*

脈沖周期范圍(建議值):50us~1s

脈寬時間范圍(建議值):50us~1s

*/



u8 temp; //中間變量,用于判斷第一次進(jìn)入上升沿捕獲0/第二次上升沿捕獲1

int ICValue1; //上升沿記錄的值

int ICValue2; //下降沿記錄的值

int ICValue3; //第二個上升沿記錄的值

u8 update_high; //高電位溢出總數(shù)

u8 update_count; //溢出總數(shù)



/**************************************

函數(shù)名:Tim2_Impulse_Detection_Init

功能:初始化Tim2為輸入捕獲

參數(shù):無

返回值:無

描述:

**************************************/

void Tim2_Impulse_Detection_Init(void) //Tim2_Impulse_Detection初始化

{

CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv8);//系統(tǒng)時鐘頻率2Mhz

GPIO_Init(GPIOB , GPIO_Pin_0 , GPIO_Mode_In_PU_No_IT);//TIM2_CH1   PB0端口

CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//使能時鐘


TIM2_DeInit();

TIM2_TimeBaseInit(TIM2_Prescaler_2, TIM2_CounterMode_Up, 30000);//計數(shù)周期1us,向上計數(shù),溢出值為30000

TIM2_PWMIConfig(TIM2_Channel_1,

                 TIM2_ICPolarity_Rising,

                     TIM2_ICSelection_DirectTI,

                 0x00,

                     0x00);

//PWN輸入配置:通道1,上升沿,直接輸入,無分頻,無濾波

//該函數(shù)配置捕獲通道1為上升沿,捕獲通道2為下降沿

}





/**************************************

函數(shù)名:TIM2_Capture_Compare_HandledInterrupt

功能:TIM2_Capture_Compare_HandledInterrupt中斷服務(wù)程序

參數(shù):無

返回值:無

描述:

**************************************/

@far @interrupt void TIM2_Capture_Compare_HandledInterrupt (void)//捕獲中斷服務(wù)函數(shù)

{

if((TIM2_GetITStatus(TIM2_FLAG_CC1)) != RESET)

{

if(temp)

{

ICValue3=TIM2_GetCapture1();


TIM2_ClearFlag(TIM2_FLAG_CC1);//清除通道中斷標(biāo)志

TIM2_ClearITPendingBit(TIM2_IT_CC1);

TIM2_ITConfig( TIM2_IT_Update, DISABLE);//關(guān)閉溢出中斷

TIM2_CCxCmd(TIM2_Channel_1, DISABLE);//關(guān)閉通道1

TIM2_ITConfig(TIM2_IT_CC1, DISABLE);//關(guān)閉捕獲通道1中斷

TIM2_CCxCmd(TIM2_Channel_2, DISABLE);//關(guān)閉通道2

TIM2_ITConfig(TIM2_IT_CC2, DISABLE);//關(guān)閉捕獲通道2中斷

temp=0;

}

else

{

ICValue1=TIM2_GetCapture1();


TIM2_ITConfig( TIM2_IT_Update, ENABLE);//使能溢出中斷

TIM2_ClearITPendingBit(TIM2_IT_Update);

TIM2_ClearITPendingBit(TIM2_IT_CC1);

TIM2_ClearFlag(TIM2_FLAG_CC1);//清除中斷標(biāo)志

TIM2_CCxCmd(TIM2_Channel_2,ENABLE);//使能捕獲通道2

TIM2_ITConfig( TIM2_IT_CC2 , ENABLE);//使能TIM2輸入通道2中斷

TIM2_ClearFlag(TIM2_FLAG_CC2);//清除通道中斷標(biāo)志

TIM2_ClearITPendingBit(TIM2_IT_CC2);

temp=1;


}

}

if((TIM2_GetITStatus(TIM2_FLAG_CC2)) != RESET)

{

ICValue2=TIM2_GetCapture2();


update_high=update_count;

TIM2_ClearFlag(TIM2_FLAG_CC2);//清除通道中斷標(biāo)志

TIM2_ClearITPendingBit(TIM2_IT_CC2);

TIM2_CCxCmd(TIM2_Channel_2,DISABLE);//失能捕獲通道2

TIM2_ITConfig( TIM2_IT_CC2 , DISABLE);//失能TIM2輸入通道2中斷

}

}







/**************************************

函數(shù)名:TIM2_Update_Overflow_Trigger_Break_HandledInterrupt

功能:TIM2_Update_Overflow_Trigger_Break_HandledInterrupt中斷服務(wù)程序

參數(shù):無

返回值:無

描述:

**************************************/

@far @interrupt void TIM2_Update_Overflow_Trigger_Break_HandledInterrupt (void)//溢出中斷服務(wù)函數(shù)

{

update_count++;

TIM2_ClearITPendingBit(TIM2_IT_Update);

TIM2_ClearFlag(TIM2_IT_Update);

}





/**************************************

函數(shù)名:Tim2_Impulse_Detection_Get_Cycle

功能:Tim2_Impulse_Detection_Get_Cycle獲取輸入PWM波的脈寬與占空比

參數(shù):

cycle_ms 一個儲存周期毫秒數(shù)的指針

cycle_us 一個儲存周期微秒數(shù)的指針

rate 一個儲存占空比的指針

返回值:無

描述:初始化完畢后,直接調(diào)用即可取得脈寬與占空比

**************************************/

void Tim2_Impulse_Detection_Get_Cycle(int* cycle_ms,int* cycle_us,u8* rate)//獲得輸入信號周期以及脈寬

[1] [2]
關(guān)鍵字:STM8L101F3  輸入捕獲  脈寬  占空比 引用地址:STM8L101F3輸入捕獲測脈寬及占空比

上一篇:STM8S庫文件判斷指定IO輸入引腳電平GPIO_ReadInputPin有問題
下一篇:解決stm8s003中timer2配置初始化中引起中斷更新

推薦閱讀最新更新時間:2025-04-28 16:28

MSP實時輸出占空比可調(diào)的pwm波形
// 占空比可調(diào)的PWM, 我沒試過, 手里沒單片機, 只是記下. #include msp430x14x.h void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 |= XTS; // ACLK= LFXT1 = HF XTAL do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i
[單片機]
51匯編 等周期脈寬調(diào)制pwm 子程序
;等 周期 脈寬 調(diào)制 PWM ; 晶振 :12M Hz ;89C51 P_PWM1 EQU P1.0 cycle EQU 1000 ;PWM的周期(單位微秒),則 頻率 為1000赫茲 cycle_high EQU 500 ;一個周期內(nèi),PWM端口為高 電平 的時間(初始值) DSEG AT 20H ORG 40H PWM_HIGH_L DATA 40H PWM_HIGH_H DATA 41H ;PWM端口為高電平時,定時器寄存器的值 PWM_LOW_L DATA 42H
[單片機]
UPS正弦脈寬調(diào)制電路
PwM技術(shù)可以極其有效地進(jìn)行諧波抑制,在頻率、效率各方面有著明顯的優(yōu)點使逆變電路的技術(shù)性能與可靠性得到了明顯的提高。采用PwM方式構(gòu)成的逆變器,其輸人為固定不變的直流電壓,可以通過PwM技術(shù)在同一逆變器中既實現(xiàn)調(diào)壓又實現(xiàn)調(diào)頻。由于這種逆變器只有一個可控的功率級,簡化了主回路和控制回路的結(jié)構(gòu),因而體積小、質(zhì)量輕、可靠性高。又因為集凋壓、調(diào)頻于一身,所以調(diào)節(jié)速度快、系統(tǒng)的動態(tài)響應(yīng)好。此外,采用PwM技術(shù)不僅能提供較好的逆變器輸出電壓和電流波形,而且提高了逆變器對交流電網(wǎng)的功率因數(shù)。UPS正弦脈寬調(diào)制電路:
[電源管理]
UPS正弦<font color='red'>脈寬</font>調(diào)制電路
用PIC16F87X單片機實現(xiàn)高分辨率頻率計的一種方法
1 引言 隨著電子技術(shù)的迅速發(fā)展,以單片機為控制核心的控制器件,已經(jīng)全面滲透到測試儀器和計量檢定的各個方面。同時,頻率計作為一種常用工具,在工程技術(shù)和無線電測量、計量等領(lǐng)域的應(yīng)用十分廣泛。本文介紹了一種以PIC16F87X系列單片機為控制器的高分辨率頻率計的實現(xiàn)方法。 該方法設(shè)計的頻率計主要用來測量脈沖頻率。它采用LCD圖形液晶顯示,清晰度高,可視范圍廣,可外接晶體頻率源,具有測量速度快、分辨率高的優(yōu)點。 2 設(shè)計原理 PIC16F877A單片機內(nèi)部集成有捕捉/比較/脈寬調(diào)制PWM (CCP)模塊。當(dāng)CCP工作在捕捉(capture)方式時,可捕捉外部輸入脈沖的上升沿或下降沿,并產(chǎn)生相應(yīng)的中斷。 PIC16F877A單片
[應(yīng)用]
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 上犹县| 扎鲁特旗| 江城| 辉南县| 渭源县| 蛟河市| 泊头市| 洛南县| 禹州市| 佛学| 巨鹿县| 牡丹江市| 固镇县| 石城县| 海门市| 连山| 霸州市| 花莲县| 巍山| 正安县| 旺苍县| 肇庆市| 从化市| 津市市| 德安县| 讷河市| 海城市| 右玉县| 美姑县| 普定县| 屏南县| 乌拉特后旗| 庄浪县| 泸州市| 沂南县| 富顺县| 义乌市| 龙海市| 平谷区| 潍坊市| 册亨县|