本文介紹了 RA-Eco-RA6M4-100PIN-V1.0 開發板通過 LabVIEW 上位機實現 ADC 電壓數據采集的項目設計,采用串口發送和串口中斷查詢兩種方案。
https://bbs.elecfans.com/jishu_2496332_1_1.html
RA-Eco-RA6M4-100PIN-V1.0開發板,主控芯片為R7FA6M4AF3CFP。 瑞薩電子 RA6M4 微控制器 (MCU) 產品群使用了支持 TrustZone 的高性能 Arm Cortex-M33 內核。與片內的 Secure Crypto Engine(SCE) 配合使用,可提供安全芯片的功能。集成帶有專用 DMA 的以太網 MAC,可確保高數據吞吐率。RA6M4 采用高效的 40nm 工藝,由基于 FreeRTOS 的靈活配置軟件包 (FSP) 這一開放且靈活的生態系統概念提供支持,并能夠擴展以使用其他實時操作系統(RTOS)和中間件。RA6M4 適用于物聯網應用的需求,如以太網、面向未來應用的安全功能、大容量嵌入式 RAM 和較低功耗(從閃存運行 CoreMark 算法,低至 99μA/MHz)。
一、項目介紹
開發板工程調試:串口輸出 JSON 格式的 ADC 值及其電壓轉換值;
LabVIEW 上位機設計:包括前面板和程序框圖的設計等;
LabVIEW 測試與程序優化:通過串口獲取芯片發送的 ADC 數據,提高響應速度、減小延遲;
使用串口中斷方案實現 ADC 數值和電壓數據的采集,以及相應的 LabVIEW 上位機設計。
二、工程調試
在前面完成 UART 串口輸出 ADC 數值和電壓轉換數值的基礎上,修改輸出格式為 JSON,關鍵代碼如下
#include"hal_data.h"FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_tevent);FSP_CPP_FOOTERfsp_err_terr = FSP_SUCCESS;volatilebooluart_send_complete_flag =false;voiduser_uart_callback(uart_callback_args_t* p_args){ if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag =true; }}/*------------- UART redirection printf -------------*/#ifdef__GNUC__ #definePUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#endifPUTCHAR_PROTOTYPE{ err =R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t*)&ch,1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag ==false){} uart_send_complete_flag =false; returnch;}int_write(intfd,char*pBuffer,intsize){ for(inti=0;i { __io_putchar(*pBuffer++); } returnsize;}/*------------- ADC callback -------------*/volatileboolscan_complete_flag =false;voidadc_callback(adc_callback_args_t* p_args){ FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag =true;}voidhal_entry(void){ /*TODO:add your own code here */ /* Open the transfer instance with initial configuration. */ err =R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); //printf("hello world!\n"); /* Initializes the module. */ err =R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); /* Enable channels. */ err =R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err); while(1) { uint16_tadc_data0=0; doublea0;// define voltage value /* Enable scan triggering from ELC events. */ (void)R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag =false; while(!scan_complete_flag) { /* Wait for callback to set flag. */ } err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0); assert(FSP_SUCCESS == err); a0 = (double)(adc_data0/4095.0)*3.3;// define voltage formula //printf("P000(AN0)=%d,voltage=%f\n",adc_data0,a0); printf("{"value": %d, "voltage": %f}\n",adc_data0,a0); R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); }#ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}
保存文件,右鍵項目 - 構建程序,
右鍵項目 - 調試項目 - 上傳固件至開發板。
串口測試

此時串口輸出數據為標準 JSON 格式,便于后續 LabVIEW 數值讀取。
三、LabVIEW 上位機
包括前面板設計、程序框圖設計兩部分。
前面板

使用方法
- 串口配置:端口號、波特率等;
- 單擊運行按鈕,設置文件保存路徑;
- 點擊 START 按鈕,開始連續采集數據;
- 采集完成后,點擊 STOP 按鈕結束程序,數據自動保存至設定路徑文件。
程序框圖

連續采集
連續采集

動態效果見底部視頻。
數據保存
點擊 Stop 按鈕,停止數據采集,文件自動保存至預設路徑,3 列數據依次為日期-時間-數值

四、串口中斷
除了上述串口不間斷發送數據的方案,還可以使用串口中斷實現 ADC 數據的自動采集。
工程代碼
#include"hal_data.h"FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_tevent);FSP_CPP_FOOTERfsp_err_terr = FSP_SUCCESS;volatilebooluart_send_complete_flag =false;volatilebooluart_receive_complete_flag =false;uint8_tuart_rx_buffer[3] = {0};// storage the received ordersvoiduser_uart_callback(uart_callback_args_t* p_args){ if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag =true; } elseif(p_args->event == UART_EVENT_RX_COMPLETE) { uart_receive_complete_flag =true; }}/*------------- UART redirection printf -------------*/#ifdef__GNUC__ #definePUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#endifPUTCHAR_PROTOTYPE{ err =R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t*)&ch,1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag ==false){} uart_send_complete_flag =false; returnch;}int_write(intfd,char*pBuffer,intsize){ for(inti=0;i { __io_putchar(*pBuffer++); } returnsize;}/*------------- ADC callback -------------*/volatileboolscan_complete_flag =false;voidadc_callback(adc_callback_args_t* p_args){ FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag =true;}voidhal_entry(void){ /*TODO:add your own code here */ /* Open the transfer instance with initial configuration. */ err =R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); // start interrupt err =R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer,3); assert(FSP_SUCCESS == err); /* Initializes the module. */ err =R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); /* Enable channels. */ err =R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err); while(1) { uint16_tadc_data0=0; doublea0;// define voltage value // check if receive order if(uart_receive_complete_flag) { uart_receive_complete_flag =false; // check if `55 AA 10` or `55 AA 11` if(uart_rx_buffer[0] ==0x55&& uart_rx_buffer[1] ==0xAA) { /* Enable scan triggering from ELC events. */ (void)R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag =false; while(!scan_complete_flag) { /* Wait for callback to set flag. */ } err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0); assert(FSP_SUCCESS == err); a0 = (double)(adc_data0/4095.0)*3.3;// define voltage formula if(uart_rx_buffer[2] ==0x10)// send ADC value { printf("%d\n", adc_data0); } elseif(uart_rx_buffer[2] ==0x11)// send ADC voltage { printf("%f\n", a0); } } // restart UART receive err =R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer,3); assert(FSP_SUCCESS == err); } R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS); }#ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}
保存文件,右鍵項目 - 構建程序,
右鍵項目 - 調試項目 - 上傳固件至開發板。
五、測試
使用串口調試助手測試串口中斷響應。
分別以十六進制發送查詢代碼55 AA 10和55 AA 11分別獲取 ADC 數值和相應的電壓值。

LabVIEW 上位機
基于上述串口中斷查詢的項目,設計了對應的 LabVIEW 上位機程序,便于自動化數據采集。
前面板
前面板設計包括串口配置、ADC 數值和電壓的表盤顯示、演化曲線圖、控制按鈕、數據保存配置等模塊。

程序框圖

操作方法
- 串口配置:端口號、波特率等;
- 單擊運行按鈕,設置文件保存路徑;
- 點擊 START 按鈕,開始連續采集數據;
- 采集完成后,點擊 STOP 按鈕結束程序,數據自動保存至設定路徑文件;
- 再次點擊 START 重新采集數據;
- 點擊 Terminate 按鈕終止上位機程序。
六、總結
本文介紹了 RA-Eco-RA6M4-100PIN-V1.0 開發板通過 LabVIEW 上位機實現 ADC 電壓數據采集的項目設計,采用串口發送和串口中斷查詢兩種方案,包括項目介紹、工程調試、串口打印 JSON 測試、LabVIEW 上位機設計、程序測試及調優等,為 Renesas 系列產品的開發設計和工業科研等領域的應用提供了參考。
聲明:本文由電子發燒友社區發布,轉載請注明以上來源。如需平臺(包括:試用+專欄+企業號+學院+技術直播+共建社區)合作及入群交流,請咨詢18925255684(微信同號:elecfans123),謝謝!
-
LabVIEW
+關注
關注
2015文章
3685瀏覽量
346290 -
adc
+關注
關注
100文章
7501瀏覽量
554934 -
數據采集
+關注
關注
41文章
8000瀏覽量
120651 -
開發板
+關注
關注
26文章
6251瀏覽量
116707
發布評論請先 登錄
【RA-Eco-RA6M4開發板評測】——2.串口打印
【RA-Eco-RA6M4開發板評測】+初識篇
【RA-Eco-RA6M4開發板評測】+01+開箱測評+UART+PWM+LED
【RA-Eco-RA6M4開發板評測】介紹、環境搭建、工程測試
【RA-Eco-RA6M4開發板評測】ADC 電壓表
【RA-Eco-RA6M4開發板評測】ADC 電壓的 LabVIEW 數據采集
【RA-Eco-RA6M4開發板評測】——8.獲取RA6M4開發板芯片內部溫度傳感器值
【RA-Eco-RA6M4開發板評測】使用中斷實現HCSR04測距
【RA-Eco-RA6M4開發板評測】使用ULINK2開發瑞薩MCU
【RA-Eco-RA6M4開發板評測】開發環境搭建
【RA-Eco-RA6M4開發板評測】ADC獲取電壓值
【RA-Eco-RA6M4開發板評測】DAC設置電壓值
【有獎試用14期】RA-Eco-RA4M2-100PIN開發板
【干貨分享】基于RA-Eco-RA6M4開發板實現無線通信
【干貨分享】在 RA-Eco-RA6M4開發板上實現 ADC 電壓的 LabVIEW 數據采集

評論