stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)

感谢电堂,有幸参加了ST最新的G4系列MCU的测评。之所以会选择参加G4系列MCU的测评,是看中了G4系列优越的性能和较高的性价比,G4作为F3的升级系列,主频高达170MHz,内嵌了数学运算加速器,具有丰富的内置数模外设,运放、比较器、DA、AD等,硬件加密使用的是AES-256,带有双安全存储区域。

手头正好有电机控制方面的项目,准备选型一款合适的MCU,而G4系列典型应用之一正是电机控制,不巧的是收到开发板时订购的BLDC评估板一时半会还到不了手,临时改变评测项目,已经量产的工业仪器MCU替换为G474,看功能和性能方面是否可以达到或超越现有的MCU。

到手的Nucleo-G474开发板,先来张特写。

stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(1)


Nucleo-G474的板载烧写器MCU已经不是传统的STM32F103了,而是升级到了STM32F723,唯一遗憾的是烧写器和主板是一体的了,不是传统的间断连接方式,不能和主板分离,成为一个单独的烧写器。

为方便测试,且最大限度保护好Nucleo-G474原板,不直接在原板上焊接连线,特地打了1片专用测试板。这里要感谢下深圳某创PCB专业制造公司,速度快,还便宜,只要5块钱,且SF包邮(前提是尺寸不能超过10X10CM)。测试板上包括本次评测要用的外围电路,包括指示灯、RS232串口、DA、AD、CAN-FD,其中CAN-FD将放在后期测试。

首先测试传统的点灯,板载Led和自制Led交替点亮。用CubeMX配置好硬件资源,keil5编译程序,然后将程序下载到Nucleo-G474开发板,注意初次擦除烧写会报错,解决方法是从官网下载STSW-LINK007升级,就可以下载程序了。

程序运行效果如下所示:

stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(2)

stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(3)


接下来就是测试最主要的部分,手头已量产的产品是专用的传感器,MCU通过DA模块输出控制电压(电压大小需根据不同的环境可调),AD模块采集不同的被检测对象所对应的模拟量大小并转换成数字量,主控程序根据采集到的数字量大小,输出对应的控制。


stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(4)


CubeMX配置G474的资源如下图所示:

stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(5)


stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(6)

Main主程序:

int main(void) { /* USER CODE BEGIN 1 */ button_no = 0; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM3_Init(); MX_UART4_Init(); MX_ADC2_Init(); MX_DAC2_Init(); /* USER CODE BEGIN 2 */ if (HAL_DAC_Start(&hdac2, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_DAC_SetValue(&hdac2, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1024) != HAL_OK) { Error_Handler(); } if (HAL_ADC_Start(&hadc2) != HAL_OK) { Error_Handler(); } AD_Sample = 0; AD_Sample = HAL_ADC_GetValue(&hadc2); __HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if (HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin) == 0x01U) { button_no = 0x01U; } else button_no = 0x00U; HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); if (HAL_ADC_Start(&hadc2) != HAL_OK) { Error_Handler(); } HAL_Delay(50); AD_Sample = 0; if (HAL_ADC_PollForConversion(&hadc2, 10) == HAL_OK) { AD_Sample = HAL_ADC_GetValue(&hadc2); sprintf(aTxBuffer,"AD value = ] ",AD_Sample); if (HAL_UART_Transmit(&huart4, (uint8_t *)aTxBuffer, 26, 5000) != HAL_OK) { Error_Handler(); } __HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS); /* Insert delay 100 ms */ if (HAL_ADC_Stop(&hadc2) != HAL_OK) { Error_Handler(); } if (button_no == 0x00U) HAL_Delay(2000); else HAL_Delay(100); } } /* USER CODE END 3 */ }

测试结果:

下图为传感器中没有被检测对象时采集到的数据:

stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(7)

检测较小物体时采集到的数据:


stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(8)

检测较大物体时采集到的数据:


stm32f103新手入门教学(STM32G474评测之ADDA模拟性能测试)(9)

以上所有检测数据为每秒采集一次,通过RS232串口传输到PC显示,该数据为AD模块的原始数据,分辨率12bit,未经任何算术平均以及数字滤波处理。从采集的结果看,AD模块的精度完全满足项目的需要。

由于时间不是很充裕,G474的很多优异性能尚未加以测试,尤其项目中要用的CAN总线,由于G4系列的CAN已升级为CAN-FD,手头尚没有对应的带CAN-FD的上位机进行测试,只能留待后期硬件条件具备时再做进一步测试。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页