28.6
實(shí)驗(yàn)3:脈沖寬度測(cè)量模式
28.6.1
硬件設(shè)計(jì)
以野火啟明6M5開(kāi)發(fā)板例程為例,本實(shí)驗(yàn)需要使用兩個(gè)引腳,使用的PWM輸出引腳為額外引出的IO引腳為:P500;用于脈沖輸入的測(cè)量引腳使用的開(kāi)發(fā)板引出的IO引腳為:P600。如下圖所示。

點(diǎn)擊可查看大圖
注
野火啟明6M5開(kāi)發(fā)板例程選用的PWM輸出引腳為:P500(AGTOA0);選用的測(cè)量引腳為:P600(AGTIO3)。
野火啟明4M2開(kāi)發(fā)板例程選用的PWM輸出引腳為:P211(AGTOA5);選用的測(cè)量引腳為:P415(AGTIO4)。
野火啟明2L1開(kāi)發(fā)板例程選用的PWM輸出引腳為:P208(AGTOB0);選用的測(cè)量引腳為:P402(AGTIO1)。
本次實(shí)驗(yàn)需要將PWM輸出引腳與測(cè)量引腳使用杜邦線連接起來(lái)。
28.6.2
軟件設(shè)計(jì)
28.6.2.1
新建工程
由于本實(shí)驗(yàn)需要用到PWM波形信號(hào),因此我們直接在前面的“實(shí)驗(yàn)2:比較匹配功能(PWM輸出)”例程的基礎(chǔ)上修改程序。
對(duì)于e2studio開(kāi)發(fā)環(huán)境:拷貝一份我們之前的e2s工程“28_AGT_PWM_Output”,然后將工程文件夾重命名為“28_AGT_Pulse_Width_Measurement”,最后再將它導(dǎo)入到我們的e2studio工作空間中。
對(duì)于Keil開(kāi)發(fā)環(huán)境:拷貝一份我們之前的Keil工程“28_AGT_PWM_Output”,然后將工程文件夾重命名為“28_AGT_Pulse_Width_Measurement”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開(kāi)該工程。
工程新建好之后,在工程根目錄下,進(jìn)入到“src/agt”文件夾里面新建源文件和頭文件:“bsp_agt_pulse_width_measurement.c”和“bsp_agt_pulse_width_measurement.h”。工程文件結(jié)構(gòu)如下。
列表9:文件結(jié)構(gòu)
左右滑動(dòng)查看完整內(nèi)容
28_AGT_Pulse_Width_Measurement ├─ ...... └─src ├─ led │ ├─ bsp_led.c │ └─ bsp_led.h ├─ debug_uart │ ├─ bsp_debug_uart.c │ └─ bsp_debug_uart.h ├─ agt │ ├─ bsp_agt_pwm_output.c │ ├─ bsp_agt_pwm_output.h │ ├─ bsp_agt_pulse_width_measurement.c │ └─ bsp_agt_pulse_width_measurement.h └─ hal_entry.c
28.6.2.2
FSP配置
接下來(lái)我們要以野火啟明6M5開(kāi)發(fā)板為例來(lái)說(shuō)明進(jìn)行FSP配置的方法,另外兩塊板子的配置步驟是一樣的,讀者可根據(jù)實(shí)際使用的引腳參照下面的步驟來(lái)進(jìn)行配置。
首先在“Pins”配置頁(yè)中配置AGT3的操作模式配置為“Count Measurement”,并且為該AGT配置相應(yīng)的引腳,也就是將AGT的AGTIO3信號(hào)連接到P600引腳,如下圖所示。

點(diǎn)擊可查看大圖
接著在Stacks中加入第二個(gè)AGT模塊實(shí)例,并按如下圖所示配置該AGT模塊的屬性:

點(diǎn)擊可查看大圖
表7:AGT屬性描述:“Input”部分。

點(diǎn)擊可查看大圖
28.6.2.3
AGT初始化函數(shù)
列表10:代碼清單28-7:
AGT初始化
左右滑動(dòng)查看完整內(nèi)容
timer_info_t info;//用于獲取定時(shí)器參數(shù)信息 uint32_t period;//用于保存計(jì)數(shù)器的計(jì)數(shù)周期 /* AGT 初始化函數(shù)*/ voidAGT_Pulse_Width_Measurement_Init(void) { /* 初始化AGT 模塊*/ R_AGT_Open(&g_timer_agt3_ctrl, &g_timer_agt3_cfg); /* 獲取當(dāng)前參數(shù)*/ (void)R_AGT_InfoGet(&g_timer_agt3_ctrl, &info); /* 獲取計(jì)數(shù)周期:AGT 的一個(gè)周期的計(jì)數(shù)次數(shù)*/ period = info.period_counts; /* 使能AGT 定時(shí)器*/ R_AGT_Enable(&g_timer_agt3_ctrl);//注:對(duì)于脈沖寬度/周期測(cè)量模式下,使用? ,→R_AGT_Enable 或R_AGT_Start 函數(shù)效果是一致的 /* 啟動(dòng)AGT 定時(shí)器*/ //R_AGT_Start(&g_timer_agt3_ctrl);
28.6.2.4
AGT脈沖寬度測(cè)量中斷回調(diào)函數(shù)
列表11:代碼清單28-8:
AGT脈沖寬度測(cè)量中斷回調(diào)函數(shù)
左右滑動(dòng)查看完整內(nèi)容
uint32_tpulse_width_time;//測(cè)量的脈沖高電平寬度時(shí)間
volatileuint8_tprint_enble_flag;//允許打印測(cè)量結(jié)果標(biāo)志
/* AGT 脈沖寬度測(cè)量中斷回調(diào)函數(shù)*/
voidagt3_pulse_width_measurement_callback(timer_callback_args_t* p_args)
{
staticuint32_toverflow_times =0;//計(jì)數(shù)器溢出次數(shù)
/* 測(cè)量完成事件*/
if(TIMER_EVENT_CAPTURE_A == p_args->event)
{
pulse_width_time = p_args->capture + overflow_times * period;//記
錄時(shí)間B
overflow_times =0;
print_enble_flag =1;//測(cè)量完成后允許打印測(cè)量結(jié)果
}
/* 定時(shí)器計(jì)數(shù)溢出事件*/
elseif(TIMER_EVENT_CYCLE_END == p_args->event)
{
/* 輸入捕獲期間計(jì)數(shù)器溢出,則記錄溢出次數(shù)+1 */
overflow_times++;
}
}
28.6.2.5
hal_entry入口函數(shù)
列表12:代碼清單28-9:hal_entry入口函數(shù)
左右滑動(dòng)查看完整內(nèi)容
/* 用戶(hù)頭文件包含*/ #include"led/bsp_led.h" #include"debug_uart/bsp_debug_uart.h" #include"agt/bsp_agt_pwm_output.h" #include"agt/bsp_agt_pulse_width_measurement.h" // 外部變量聲明 externtimer_info_t info;//用于獲取定時(shí)器參數(shù)信息 externuint32_t pulse_width_time;//PWM 高電平的時(shí)間 externvolatileuint8_t print_enble_flag; voidhal_entry(void) { /*TODO:add your own code here */ LED_Init();// LED 初始化 Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化 AGT_PWM_Init();// AGT PWM 輸出初始化 AGT_Pulse_Width_Measurement_Init();// AGT 脈沖寬度測(cè)量初始化 printf("這是一個(gè)AGT 的PWM 輸出+ 脈沖寬度測(cè)量功能實(shí)驗(yàn) "); printf("使用杜邦線連接P500 和P600 引腳,然后打開(kāi)串口助手查看串口的打印信息 ,→"); while(1) { float pulse_width_time_us; if(print_enble_flag) { // 打印PWM 高電平的計(jì)數(shù) printf("High=%d, ", pulse_width_time); /* 計(jì)算PWM 高電平的時(shí)間*/ pulse_width_time_us=(float)pulse_width_time/((float)info. ,→clock_frequency/(float)1000000); printf("Time=%f us ", pulse_width_time_us); pulse_width_time=0;//測(cè)量結(jié)果打印完后舊數(shù)據(jù)清零 print_enble_flag=0;//允許打印測(cè)量結(jié)果標(biāo)志位清零 } // LED1 閃爍指示程序正在運(yùn)行... LED1_TOGGLE; // 間隔1s R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS); } #ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
28.6.3
下載驗(yàn)證
編譯并下載程序后,復(fù)位開(kāi)發(fā)板使程序重新運(yùn)行,然后使用杜邦線連接P500和P600引腳,然后打開(kāi)串口助手查看串口的打印信息。串口會(huì)打印出PWM信號(hào)的頻率和占空比等信息,實(shí)驗(yàn)現(xiàn)象如下圖所示。

點(diǎn)擊可查看大圖
通過(guò)計(jì)算,我們?cè)O(shè)置PWM輸出波形的頻率為20KHz(周期為50us)、占空比為80%(正脈寬應(yīng)為40us),這與我們測(cè)量得到正脈寬一致。
-
脈沖
+關(guān)注
關(guān)注
20文章
913瀏覽量
100084 -
瑞薩
+關(guān)注
關(guān)注
38文章
22523瀏覽量
91403 -
引腳
+關(guān)注
關(guān)注
16文章
2123瀏覽量
56061 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
26文章
6440瀏覽量
121239
原文標(biāo)題:實(shí)驗(yàn)3:手把手教你掌握脈沖寬度測(cè)量模式——瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南(105)
文章出處:【微信號(hào):瑞薩嵌入式小百科,微信公眾號(hào):瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之I2C讀寫(xiě)EEPROM實(shí)驗(yàn)
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之AGT低功耗定時(shí)器簡(jiǎn)介和結(jié)構(gòu)框圖
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之使用GPT輸入捕獲進(jìn)行脈寬和周期測(cè)量實(shí)驗(yàn)
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之使用AGT進(jìn)行PWM輸出實(shí)驗(yàn)
瑞薩e2studio(1)----瑞薩芯片之搭建FSP環(huán)境
【瑞薩RA2L1入門(mén)學(xué)習(xí)】+PWM呼吸燈
【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】+VS Code 下瑞薩 RA4M2 開(kāi)發(fā)環(huán)境搭建與 GPIO 點(diǎn)燈實(shí)驗(yàn)教程
【瑞薩RA4系列開(kāi)發(fā)板體驗(yàn)】開(kāi)發(fā)環(huán)境搭建和新手點(diǎn)燈指南
【瑞薩RA4系列開(kāi)發(fā)板體驗(yàn)】定時(shí)器(r_agt)使用經(jīng)驗(yàn)
【瑞薩RA4系列開(kāi)發(fā)板體驗(yàn)】體驗(yàn)過(guò)程
【有獎(jiǎng)直播預(yù)報(bào)名】瑞薩電子RA系列產(chǎn)品開(kāi)發(fā)工具之FSP4.0.0新特性介紹
【視頻教程】瑞薩RA單片機(jī)FSP開(kāi)發(fā)(3)FSP架構(gòu)-解釋Blinky架構(gòu)[上]
瑞薩電子RA系列微控制器的可擴(kuò)展性強(qiáng)的配置軟件包 (FSP)安裝下載與使用指南
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之GPT簡(jiǎn)介和結(jié)構(gòu)框圖
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之使用AGT基本定時(shí)功能實(shí)驗(yàn)
瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南之使用AGT進(jìn)行脈沖寬度測(cè)量模式實(shí)驗(yàn)
評(píng)論