你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

测试篇——STM32G474之AD/DA模拟性能测试

[复制链接]
eefishing 发布时间:2020-1-10 01:03
有幸参加了ST最新的G4系列MCU的测评。之所以会选择参加G4系列MCU的测评,是看中了G4系列优越的性能和较高的性价比,G4作为F3的升级系列,主频高达170MHz,内嵌了数学运算加速器,具有丰富的内置数模外设,运放、比较器、DA、AD等,硬件加密使用的是AES-256,带有双安全存储区域。

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

: u8 k' y: Z- c+ j到手的Nucleo-G474开发板,先来张特写。
6 \* W$ b* K1 Y% u 1.jpg
; f( s! j, Q7 }2 ]- f1 H
Nucleo-G474的板载烧写器MCU已经不是传统的STM32F103了,而是升级到了STM32F723,唯一遗憾的是烧写器和主板是一体的了,不是传统的间断连接方式,不能和主板分离,成为一个单独的烧写器。
" K5 `) \+ p, r+ X! U
为方便测试,且最大限度保护好Nucleo-G474原板,不直接在原板上焊接连线,特地打了1片专用测试板。这里要感谢下深圳某创PCB专业制造公司,速度快,还便宜,只要5块钱,且SF包邮(前提是尺寸不能超过10X10CM)。测试板上包括本次评测要用的外围电路,包括指示灯、RS232串口、DA、AD、CAN-FD,其中CAN-FD将放在后期测试。
7 }# z5 m% |- \# c/ g首先测试传统的点灯,板载Led和自制Led交替点亮。用CubeMX配置好硬件资源,keil5编译程序,然后将程序下载到Nucleo-G474开发板,注意初次擦除烧写会报错,解决方法是从官网下载STSW-LINK007升级,就可以下载程序了。( b3 b- O+ ~6 L& H* ^
程序运行效果如下所示:
: y$ r! ~) K% x3 T
2.jpg
$ d: s/ ?5 p- N1 W
3.jpg
8 @+ q1 _( Y) `5 D- g
接下来就是测试最主要的部分,手头已量产的产品是专用的传感器,MCU通过DA模块输出控制电压(电压大小需根据不同的环境可调),AD模块采集不同的被检测对象所对应的模拟量大小并转换成数字量,主控程序根据采集到的数字量大小,输出对应的控制。

: C6 Z! {$ h) ?9 ^  |, V
4.jpg
- L; [6 T) `: G/ P% B) c
CubeMX配置G474的资源如下图所示:+ e9 d! C* A8 G: b/ z9 k
5.jpg
. N( ~/ ^5 ?3 U& ?: L6 O6 |
6.jpg

* m- Q7 l) g8 e3 j- ZMain主程序:
, v' |" e' Z4 O8 |
/ T% p% W$ {% ?. o9 \/ ]int main(void)
, G. }5 P- J0 H- [{ $ I* D: |+ F; L2 ^; z2 y6 l6 m/ z
/* USER CODE BEGIN 1 */  % `5 E7 }; }# m2 i' g" k
button_no = 0; $ g- o  k/ J& L
/* USER CODE END 1 */ 7 q# L0 A2 M; \# W! l* ^

5 D! k  w0 y4 C
2 ^0 K* ^# {( e0 o$ g& c" d, I /* MCU Configuration--------------------------------------------------------*/
' r: q) L( O  r- H& S, j/ b7 _: e5 _' C9 [" R, Q* U) x
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
* t- t5 N* D# P5 y6 O* x2 J' E9 a2 w! w2 y
HAL_Init();* F3 l0 ~7 A+ `

% C6 ?# N) N5 q# ]+ g  I
, x- X9 T- W' i: Q /* USER CODE BEGIN Init */
4 P4 R3 d4 h$ z) I9 R, q. M# J: [/ h! v& i- n4 A
/* USER CODE END Init */
/ ]- ?, m2 Q; K' d( D- _# m- w) q2 i" s1 u/ [# }; }
/* Configure the system clock */ 3 o& \+ i' z- D0 H8 K3 v& V
) s0 I7 C; }, b# T: W) _
SystemClock_Config();5 c5 W3 e& G1 u6 L: ]  Q
5 }$ ^& b- _, |' @

" F" I* q$ X3 |# a5 E /* USER CODE BEGIN SysInit */$ @& E! X5 J- i& e, u

5 J# c9 w( ^: B5 i /* USER CODE END SysInit */! B' e; U' H/ n) {+ J* x5 _( Z! X* T

4 Y0 h/ C/ ^5 D, |0 \1 }1 J- J9 P4 C /* Initialize all configured peripherals */
/ [1 Z) K7 B, B% v# NMX_GPIO_Init();
2 K% C5 P1 Q( {- G# C( k2 SMX_TIM3_Init(); ; [# X9 z. E1 n: k! s3 P: k
MX_UART4_Init(); . \& S: ~5 T* B! G
MX_ADC2_Init(); , Z4 E- I) o( A# a9 m
MX_DAC2_Init(); 5 b; r( D& z/ V" M
/* USER CODE BEGIN 2 */
6 x2 |- Q3 r+ s& a4 }2 G
  L/ s0 U) z' ^/ A2 ] if (HAL_DAC_Start(&hdac2, DAC_CHANNEL_1) != HAL_OK)
% ]) T2 D- T; @: J; T" m{   Error_Handler(); }
. u! E9 w4 `- @' p5 }5 l0 b- l0 s/ Y9 {1 x+ j
if (HAL_DAC_SetValue(&hdac2, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1024) != HAL_OK)
2 G+ N5 r& Z: p  U {   Error_Handler(); }7 I0 w2 D( J% S: Y

' \7 x6 L0 Y8 d1 W) [! H if (HAL_ADC_Start(&hadc2) != HAL_OK) , x. T& B5 b; L, i4 [8 d
{   Error_Handler(); }
1 @' K0 ?3 N9 ^0 I/ j# ~% W$ p# f. h! G; ?$ t9 X. _* h6 w" e

0 n; E: T  s$ i: \' O5 i AD_Sample = 0; 8 ^' @) d+ p; m
AD_Sample = HAL_ADC_GetValue(&hadc2); 0 t8 ^; ]5 K6 e% p% `6 P
__HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS);
+ V1 L! {3 R( n3 v9 T5 v' G0 e1 [: V' S9 r3 K$ H! j

! E( m' F9 U/ i1 U, P6 \! h /* USER CODE END 2 */: C5 c; V* Q  |# i! g8 l
' s2 t, A; h- a/ g# o
/* Infinite loop */  B) Q4 y- F. V/ i0 Q# r4 v& F
/* USER CODE BEGIN WHILE */ # ^7 b+ y. `5 Q) ?1 h# t. A7 L% p8 e8 a* v
while (1) 7 S8 y( A# z* o- U
{
0 R6 n' a/ B# _5 J7 ~: S* `3 d* ]   /* USER CODE END WHILE */
* M) c. A0 ?4 ]/ l0 X  a8 X) K( ?7 K* g7 R, ~. h6 j. Z

' C4 ~! H4 D2 _+ x7 p2 r1 \# D) e) Q   /* USER CODE BEGIN 3 */
5 x! L: |; ~4 s) f; b# ?8 J   if (HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin) == 0x01U)" m: o$ j5 P+ {4 t) o# {
   {5 o% Q, m- k2 E! a' }, W
       button_no = 0x01U;
- i' E# M8 \% c3 K- N+ |   }
$ t* \, Y" {* m# i; e& v$ Q1 g   else: g1 F( G, ~; O1 _2 q- g9 ~( G7 ?$ p0 m
      button_no = 0x00U;; Y1 Z3 A& c2 l+ A: _+ K7 \4 `' H, U
   HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
( `; W1 m/ G& x- p) a( b4 n   HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); ) ^1 L7 p& c9 f, \+ U+ }3 d1 m2 k
if (HAL_ADC_Start(&hadc2) != HAL_OK) ( f5 ]3 k! T( X8 Q) ^9 j  P7 S
{   Error_Handler(); }
& v+ S. W0 P4 Y! C+ ~' R   HAL_Delay(50);
1 T6 `: O9 g- o, W   AD_Sample = 0;
2 x( u" O; H5 a# q: U( _3 i, k   if (HAL_ADC_PollForConversion(&hadc2, 10) == HAL_OK): }. ~8 D; v; A! @  Z7 L& @1 @
   {
$ j6 I7 y7 q+ A" s- s* z0 n+ D     AD_Sample = HAL_ADC_GetValue(&hadc2);
: R* x" j3 h1 Q) z+ q4 {- p4 |, l. _, H4 r! C" m/ [+ j1 b, i
6 Q8 S% P2 h: U) F: @( m
     sprintf(aTxBuffer,"AD value = %5d     ",AD_Sample);
- J0 J2 l1 I; @, m5 @7 r) A5 M     if (HAL_UART_Transmit(&huart4, (uint8_t *)aTxBuffer, 26, 5000) != HAL_OK)8 k/ k, w# g: S5 [- j! R1 y
     {
5 I4 u% x# P% J, X  j/ ]0 [3 H! T       Error_Handler();# Y8 {; ?% {, _; H( c
     }
9 o  R+ A* Z4 n* U, v6 W) O$ m! B     __HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS);
" S  P  [/ N, y% ~3 ^& c1 p     /* Insert delay 100 ms */; _* d: f% u  ^1 J
if (HAL_ADC_Stop(&hadc2) != HAL_OK)
! Y' R% C2 i( G. R8 w+ N( E9 e {   Error_Handler(); }4 ^# p5 l7 \* X7 S8 A4 E
     if (button_no == 0x00U)
( a  K# ?$ G/ w9 f% H         HAL_Delay(2000);0 w" b  f1 B* _9 ]3 j, L
     else* `  E* o1 h5 a* {
         HAL_Delay(100);
7 B) R" B8 F- ]2 \. A2 w' D' i+ N   }3 D4 }1 ?0 R  x4 t3 w
}
* H) f$ m+ O+ w$ v  n3 @/* USER CODE END 3 */
* b2 z& `0 J" s}6 A8 t* w$ Z  n+ t# p# ]
) i$ d) }  S) l0 ~
. q. |! Z- y. d  Z/ ?( b& z' }
测试结果:
6 E0 z* t% A- P, x. E, ^& ]下图为传感器中没有被检测对象时采集到的数据:; J+ q0 T. M  n; K9 u# E
7.jpg
4 E2 \" H: y# n! y7 ]% ^5 P
检测较小物体时采集到的数据:
0 Z3 t$ x' F9 @  `
8.jpg

  m' A. n+ o. ?% C* X+ d7 E( V4 I检测较大物体时采集到的数据:3 Q7 u5 M6 g. v; A" D/ L" m6 m1 L
9.jpg

( l) ?; Q5 b/ J" h
以上所有检测数据为每秒采集一次,通过RS232串口传输到PC显示,该数据为AD模块的原始数据,分辨率12bit,未经任何算术平均以及数字滤波处理。从采集的结果看,AD模块的精度完全满足项目的需要。
3 E" J( C( o% W$ E. F& ^, `1 U
由于时间不是很充裕,G474的很多优异性能尚未加以测试,尤其项目中要用的CAN总线,由于G4系列的CAN已升级为CAN-FD,手头尚没有对应的带CAN-FD的上位机进行测试,只能留待后期硬件条件具备时再做进一步测试。- g8 [2 ]# @( e% p: d5 \( B

评分

参与人数 1 ST金币 +1 收起 理由
wawayaya1 + 1 很给力!

查看全部评分

赞 1 收藏 评论2 发布时间:2020-1-10 01:03

举报

2个回答
李康1202 回答时间:2020-4-20 22:01:40
顶一顶
easyorhard 回答时间:2020-5-2 12:54:22
点赞!!!

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版