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

【经验分享】PWM 硬件间隔触发 ADC

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:56
前言
  j2 Q# D5 C' M3 W8 @& |. F3 a1 D在各种应用场景中,比如电机,电源,变频器等应用中,ADC 的采样点会有很严格的要求,如果采样点选择错误,会给整个控制系统造成严重后果,本文针对 STM32Fxxx 的 PWM 波硬件间隔 ADC 采样实现方式做简要介绍;* ], _+ v- Q7 a& `+ R# w

, n% d' r' n8 ]- w8 BPWM 硬件触发 ADC" Q/ Z  K7 B0 @* x( J
在 STM32Fxxx 中 Timer1 一般用于产生互补输出的 ADC,一般的设定都是使用 PWM 波中心点,或者是 Timer1 的第四通道(TIM1_CH4) 作为 ADC 的触发输入信号(可改变采样点的选取);该设定一般是每个 PWM 周期触发 ADC 采样一次,软件设定也比较成熟:9 Q; W% [- |' N, O
PWM 波中心点触发 ADC 设定:+ e( Y8 p, `0 m3 k5 L3 |0 r
  1. TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update); // 设定 Timer1 的输出触发信号+ ^3 P3 C, H$ R9 {" P/ W
  2. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; //设定 T1_TRGO 作为5 R  P4 [- l- B% c
  3. ADC 触发信号源
复制代码

' d7 g+ f/ c. q6 g9 B. KTIM1_CH4 作为 ADC 的触发信号设定:. j7 c( C/ Q/ V3 f6 ]$ ]; s) l
  1. TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_OC4Ref); // 设定 Timer1 的输出触发信号
    0 X  C% C5 H: N- D1 N0 u8 ~
  2. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; //设定 T1_TRGO 作为+ X+ F' \, W% K* {
  3. ADC 触发信号源
    / \* ?% u* q. j! T4 }8 y
复制代码
* v* f1 R6 r, \' \. n
$ c7 m; v9 C) T) y& ~& A
; H9 h) k, Z1 e( ^8 a
PWM 硬件间隔触发 ADC! x/ a. m- z0 E, Q( F, @
有些应用场景下,ADC 硬件触发转换结束后会进行系统的关键程序的计算,比如电机的 FOC 算法,电源的电流环控制等,当客户使用的芯片速度没有足够快,比如使用了 STM32F0xx(48MHz 主频),或者 PWM 波太快,比如电源 60KHZ 的 PWM波,在一个 PWM 波周期内无法完成 ADC 转化以及核心算法计算,这时候需要在 2 个 PWM 周期或者是多个 PWM 周期进行ADC 的触发转化,此时就需要将 ADC 的硬件触发转化变为间隔采样;
7 h+ C: q, }# J+ Z1 b
+ `, ]& n( P9 V3 J. |, m [0I8M])8{38~K%)XODLJ4AJ.png # T" @9 X+ ?6 l
5 g6 P# {4 K6 x
图一:间隔 ADC 采样触发点
1 |* \- \) G% I3 T6 q: u. z* \9 s1 M+ t( G* j+ }
PWM 波中心点间隔触发 ADC 设定  I& }7 L& g; n  X, @: F$ Z' F$ [  T
在 STM32Fxxx 中最直接有效的设定,使用 Repetition 寄存器,同时设定 Timer1 的 update 信号作为触发输出,图一的蓝色箭头即为此种情况的触发点设定
6 [2 D5 w5 I" K6 q: E5 ?: k
  1. TIM_TimeBaseStructure.TIM_RepetitionCounter = 1;
    * f) z+ P# X% O5 b. `6 E0 W
  2. TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update); // 设定 Timer1 的输出触发信号
    8 p  g* T* H2 z9 Y) Z2 _
  3. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; //设定 T1_TRGO 作为. N; S6 y/ E; L$ m
  4. ADC 触发信号源
复制代码
$ O+ D3 F0 s: Y, h+ F; V4 i
可改变采样点的间隔触发 ADC 设定# W, x% m) v" Q+ j5 u. C" ?2 g% A* S
可改变采样点的间隔 ADC 触发,即图一中的绿色箭头,使用 TIM1_CH4 这种方式不能实现纯硬件触发采样,这种情况下有两种方法可实现这个采样方式:
" z3 ?! T3 N" C' H( [, c
: p8 X- s: T& X6 D: E一,硬件触发+软件计数方式
* h. Q% M, N9 s; J( MADC 的采样及转化时间很短,基本上需要间隔采样方式,时间基本上都是消耗在算法实现上,所以可以采用每个 PWM 周期都进行硬件触发 ADC,但算法计算则是间隔实现,使用全局变量的计数方式,也就是在 ADC 转换完成结束后,进行计数,当计数值达到间隔采样数据后才进行算法计算,这种方法即兼容了 ADC 可改变采样点以及间隔计算的目的,比较实用;+ b: @) j$ _, X$ S! S
* _# [9 b$ U$ t- h+ i. ^
二,纯硬件方式4 o1 G# H* Z. q' h3 T
此时需要引入辅助 Timer 来实现,辅助 Timer 的频率设定为 Timer1 的倍数关系,倍数的数值设定为间隔周期,辅助 Timer 的比较寄存器数据设定为采样点的数据(比如上面所说的 TIM1_CCR4)3 a9 j. M6 D) T: K
, J+ L7 U8 s) g

2 y/ f1 v( S$ m. }5 v6 t EM`E[~T)8}C(8S@QGMMA)~C.png * W7 h! w  ?+ p* \) c' s; u
! M- r7 s+ r4 P. W/ J$ L1 b% c
赞 收藏 评论0 发布时间:2022-2-25 19:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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