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

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

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

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

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

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