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

【经验分享】STM32---AD7792遇到的问题

[复制链接]
STMCU小助手 发布时间:2022-5-23 23:00
A/D转换原理及参数指标/ i2 _, T+ v, N# H& y% c9 V
- X) Z! j' j) x- N6 P2 c
1.      采样定理. `, s) t1 u- K+ K. ^# Q3 {
% g+ o. P1 E! |
2.      为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中,        fs>=2fmax/ Y5 H( k  C* Y. [/ R
+ D7 ]9 I1 {* e: H- w# |
fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|A(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了A/D转换的频率下限。. x0 A3 ?: K# ]  L& \$ t  K
$ _- d4 Z  a$ A$ ]3 c
AD7792 遇到的问题/学到的知识点
9 F) \" D. H+ k+ s, i  d1 Z7 c4 J2 L8 f' Q' B- B
学到的知识点:
2 J* ^1 s, G1 ^
9 @' Z4 y# F  f" m5 f$ K: G1.在stm32中
: Q2 }* L3 K: Y$ v  \3 I: V8 D: o5 A4 C4 }* d( x
U8 : unsigned   char
$ T8 h( Y% f( b1 J, H# F0 c7 N" D4 k' C
U16: unsigned  short2 `5 U( Z0 Z8 T( r) t" D

  j+ S; D0 S  YU32: unsigned  int
4 _4 }  a2 e7 s% f$ E0 j9 R' O0 E. P# L! }1 c

* V% Y% {4 S, Z1 r
1 T4 }" a* {6 [/ i, h3 S2. 在stm32中 AD7792采样的电压数值要经过转换成ASCII码字符在串口中打印出来有两种编程方式实现:
8 X2 [7 t2 _' J1 G' L( q

! j( \' q% ?9 k3 Y2 `! \u8TempD;3 x( x% Y9 X( ~* n* V

6 I# r. L+ T8 h0 Xu16  Datau16;# i  q& R7 ?8 R" @: F, b6 U

5 O0 @+ b2 S! G. `char str[20];% q4 {% A/ h3 x2 R  b! O9 \
" ]; l4 H; f' g* }' X4 G' o
unsigned short iData[3];- A; q6 ?2 h5 p5 S) C

3 `9 T# s! z+ z! a6 cu8 Strvbat[8]={'/','/','/',',',0,0,0,0};
1 r& _# R# |% U& z: p# ~1 o. H
3 X9 u9 ?! V/ t0 eu8 ASCII[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','+',//10->16
# {5 B# W) {3 t7 u% ?* u' Z; O* z0 t4 C. B. q) _/ G
                                                                                         ',',//11-17
/ q# P) A+ u$ A. o+ z- b) w
* R* G7 h" P* l; h) L                                                                                         '-',//12-18
" k  U) x9 \/ ]0 a! N" I- q
9 K4 S! g( q7 L1 N( s                                                                                         '.',//13-19  K, O9 t1 O' R
6 C( ^& a7 ?8 f9 F- P
                                                                                         '/',//14-203 C: J2 h3 F; Z: k$ C) k
4 Q3 i! M7 g/ }* p
               };4 S; \( @  G4 h, `6 E
$ Y" M; [0 U3 U* F8 A0 n& G
方式一:(简洁版)9 [% v  G# O1 Q1 C" J  r4 p  d
2 t; _( H* ^& V2 j
AD_VBat[TempD] = SPI_Read16Bit();6 [, h; N9 M8 f
0 e* ?+ d2 z% B# z( D
memcpy(&iData[0],& AD_VBat[TempD],2);   
. w9 k; o2 J4 H/ K& R
) r! d; F2 k- Xsprintf(str,"%d",iData[0]);  
" A1 C7 v' M6 F, D% a
' x- |+ O. c' _" h. M* T6 gUART1_TX485_Puts(USART1,&str[0]); 4 x! J+ O: D3 I5 L
/ A0 [) @# _: X: \
方式二:(复杂版)1 g: z  _! b1 K+ I" @$ ^1 a
7 {5 l, _# Z1 D9 f+ v, J& D
AD_VBat[TempD] = SPI_Read16Bit();
- e; H& f( b) _4 O% m: c
: L& Y( c4 x( K  w. h6 H6 bDatau16 = AD_VBat[TempD];- y4 h8 P& |8 s/ _3 I

" P" h# P. L3 IStrvbat[0]=ASCII[Datau16/10000];  O) j& x) `+ N* A9 F0 b, F

9 c6 I9 w; U9 N6 Z' ^$ Y1 LStrvbat[1]=ASCII[Datau16%10000/1000];
+ y/ ^) ~% s! M; C: r# c5 z$ v- u  Y/ R# x! F' O
Strvbat[2]=ASCII[Datau16%1000/100];7 E# Q5 \: C3 }) E; K( t, i/ @* t0 N

% V5 d: a1 @. d( ^6 QStrvbat[3]=ASCII[Datau16%100/10];
7 _2 B1 h5 q# [: f
) B' M# f. n* V0 S! F8 WStrvbat[4]=ASCII[Datau16%10];; \- w- M: g9 _5 G/ z4 G/ P3 \

9 \$ D5 W& v! \. cUART1_TX485_Puts(USART1,&Strvbat[0]);
' `8 z( L) f4 K5 M. ^7 \: X7 W7 l. a, c' u& {  o. z
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);+ |  m; {3 y4 u
* _9 I$ K( [. e& e4 s

3 H, Z. J% o# x$ D- S  C3.遇到的问题; s1 g- ^5 _! K3 O! u  [  Z

4 G- I8 z% {3 e# P& |: `% P问题一:通过串口打印,采样的数值为32768左右转化后的电池电压为2.5V,而电池实际电压应该为3.32v采样数值应该为43582左右的数值;
$ p0 V9 \' g( ~9 ^8 G0 H' o3 M# S5 ^
问题根源:通道切换的问题;
& t9 p2 h; R# V$ H! w5 o- `' @
3 L1 H9 Q( `0 n+ LAD7792有3个模拟输入通道,初始化AD7792配置函数中,写配置寄存器SPI_SendByte(0x10);           /* 写配置寄存器*/, z% ]) H/ m' O+ p/ M. H" k

) m4 o5 S5 T, k3 B* y. M. {SPI_Send16Bit(0x1080);   // 偏置电压禁用禁用熔断电流单极性编码内部基准1 n3 I  ?2 `4 W2 m9 H

3 ^- i2 X* d2 z: f# w/ K+ M  ySPI_Send16Bit(0x1080)设置的采样通道是采样电流的通道,所以采样的是电流的数值;! F. M' q/ L% ~7 y0 W

& o: O$ `/ Q2 z( F- y 题二:在移植AD7792独立出来时,发现电池电压采样值打印为0000;
. a/ a) J6 @; x8 _8 w2 v2 R, P2 H2 U4 k+ p$ p2 J4 @7 g2 S
问题根源:SPI配置问题;
$ `5 x& Y% V8 I9 U0 U& s4 V' `- I2 F
原理图:5 }$ n: `  H' W' |3 Y
0 f% G2 v9 E2 ]* x, w
1349144067_3194.jpg
2 v) k0 d) u/ J: U7 d; f' Z/ |/ h# Q, _' }$ e5 i8 _
' l* m. u7 c+ |. }3 }1 z; ?6 T
错误配置:
5 G0 `1 [$ y: L; @

( |$ r/ j& h4 ^GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5  | GPIO_Pin_7 ;
! k5 a0 u! \7 [  R, _3 D4 K: F& Y: f$ }1 O9 L- X7 s: C& ^9 E
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出
5 @. w7 o0 G4 Q9 Q7 Z  j" u3 C* d" p$ N% X
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
, J9 V3 B/ C1 Y* }4 b# ~/ @
- S, A4 W2 h/ }' C5 w& g  ?+ L/ PGPIO_Init(GPIOA, &GPIO_InitStructure);
# u' n5 l8 c6 F8 b7 `# q# I& C: k: j2 w  M6 B# i$ H2 w* b
5 Z2 r. B, g* `( ]3 f4 G" U% s

2 f9 i5 I8 x+ O  MGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;! _$ @# f% b# R- [! o- o. t
6 x0 v4 x! }" R! H! c6 M! `3 j: ?
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 Z/ G1 l/ [" C6 w2 l
0 [& A# f7 ^2 {0 bGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  t4 t. G# t- T4 m2 c2 _. d# z! `, V" ?% ~
GPIO_Init(GPIOA, &GPIO_InitStructure);' [4 w* U; [% P9 @, y5 w2 v

( b6 F. Q( x$ ]% Y8 K: y
9 N% q0 t8 p* E* M4 k+ V
" M. R" f+ R. U# x* ^9 NGPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;+ w  b7 B- h" I3 E/ V. d
+ W3 o+ V4 K7 j/ e$ p" ]
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
# |) y& M. E# }! j4 c: [. V( a* X$ l
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出) _6 D- M4 p6 y

( A6 i# `! G% UGPIO_Init(GPIOA, &GPIO_InitStructure);
6 G6 h; U4 p4 S! C& E
0 e+ I% J) G5 {" `) v# N( C) E( X" u, `8 u2 i" r9 n

/ u! K8 o; c2 C4 y& v- ?正确配置:
3 _. T" w5 Q, y6 j0 y* H7 R  c1 n3 d, r  p
/* Configure SPI1 pins: SCK, MISO and MOSI */
6 M. h1 |8 L& f* X7 X# j0 _9 k! T& {; q. h/ y" ]; ^
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4|GPIO_Pin_7;
6 _( I4 \% i: V2 m: _: j
( d$ E  Q. j/ XGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //通用推挽输出
* Q9 E  @4 ]- h  ~  ^& |5 i
+ N: I: F0 H; C; y4 iGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
: G$ b; `& p. V) ^" D3 v
. n% y) b& m2 L: c- wGPIO_Init(GPIOA, &GPIO_InitStructure);3 k. `* q6 z( u  }- D
7 p0 _0 U" s$ p
$ t7 L, y. r: o4 Q: K: h0 X: y
( W* G: j/ h3 y, f5 _; h6 V, _
  /* 配置MISO为输入 */5 ?% p2 a9 k% V
* g, Q4 `; k  f/ O/ v
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
& V2 S% V2 v* W, j4 ?  r4 J8 g6 w3 i1 g
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;0 V/ o% p; i+ L  S, [
9 k$ L( H7 T( m% S9 p
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
3 Z0 R$ |5 w! Q/ x. Z% k5 R  G
: c3 D8 F* F( ^0 ^5 S* T! }8 j( JGPIO_Init(GPIOA, &GPIO_InitStructure);% X% x+ G. r& w' W+ g/ ]! b

% t5 |# s) p) x5 R5 o4 `; U6 W
赞 收藏 评论0 发布时间:2022-5-23 23:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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