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

【实战经验】PWM硬件间隔触发ADC

[复制链接]
zero99 发布时间:2017-1-4 17:05
前言
3 v$ n& R+ U1 w" {" b! m- E8 U- p在各种应用场景中,比如电机,电源,变频器等应用中,ADC的采样点会有很严格的要求,如果采样点选择错误,会给整个控制系统造成严重后果,本文针对STM32Fxxx的PWM波硬件间隔ADC采样实现方式做简要介绍;
) g& O  C, ]- N, \- `
% _# [9 Z4 T5 Q8 N5 Q; P2 uPWM硬件触发ADC
& S) Y: x# a* ]/ }& n; x3 U/ M在STM32Fxxx中Timer1一般用于产生互补输出的ADC,一般的设定都是使用PWM波中心点,或者是Timer1的第四通道(TIM1_CH4) 作为ADC的触发输入信号(可改变采样点的选取);该设定一般是每个PWM周期触发ADC采样一次,软件设定也比较成熟:+ s7 K4 m+ S/ O3 _
PWM波中心点触发ADC设定:0 Z4 j" i' \; I, g0 K: q
41.jpg
6 \! O# H: q* Q2 u& N( pTIM1_CH4作为ADC的触发信号设定: % a, @- [6 D1 a, Q6 t
42.jpg
# `- Q# Z- V& \
( p, C; E7 Y. V# C6 TPWM硬件间隔触发ADC) L9 D. q! z3 s' R8 b; C
有些应用场景下,ADC硬件触发转换结束后会进行系统的关键程序的计算,比如电机的FOC算法,电源的电流环控制等,当客户使用的芯片速度没有足够快,比如使用了STM32F0xx(48MHz主频),或者PWM波太快,比如电源60KHZ的PWM波,在一个PWM波周期内无法完成ADC转化以及核心算法计算,这时候需要在2个PWM周期或者是多个PWM周期进行ADC的触发转化,此时就需要将ADC的硬件触发转化变为间隔采样;
( a0 I0 [$ M& u3 C6 Y 43.jpg # a, m# ]( L! N$ W4 c
* T* s: y# b; y8 O8 \( ^4 S  Z1 ^3 t% G
PWM波中心点间隔触发ADC设定
; g+ B1 n" x+ |7 U# P4 l在STM32Fxxx中最直接有效的设定,使用Repetition寄存器,同时设定Timer1的update信号作为触发输出,图一的蓝色箭头即为此种情况的触发点设定
+ C6 P6 p! c) K! b1 o/ V$ }# j# h# E 44.jpg
& \9 t$ v2 T: h0 \1 y/ k0 v8 g
0 j, |5 `4 ~4 y, O+ V- _, I可改变采样点的间隔触发ADC设定
' a2 p) o/ t6 q7 b4 T8 l; z可改变采样点的间隔ADC触发,即图一中的绿色箭头,使用TIM1_CH4这种方式不能实现纯硬件触发采样,这种情况下有两种方法可实现这个采样方式:
) D4 u' R8 q& Q# ~: n一,硬件触发+软件计数方式( \) N1 y8 _# H# ?7 G5 Y, [1 ~* J. l
ADC的采样及转化时间很短,基本上需要间隔采样方式,时间基本上都是消耗在算法实现上,所以可以采用每个PWM周期都进行硬件触发ADC,但算法计算则是间隔实现,使用全局变量的计数方式,也就是在ADC转换完成结束后,进行计数,当计数值达到间隔采样数据后才进行算法计算,这种方法即兼容了ADC可改变采样点以及间隔计算的目的,比较实用;5 |7 U4 ~, i# z$ x; V" V
二,纯硬件方式
: J- O8 j, ]& v- l/ a- a$ |此时需要引入辅助Timer来实现,辅助Timer的频率设定为Timer1的倍数关系,倍数的数值设定为间隔周期,辅助Timer的比较寄存器数据设定为采样点的数据(比如上面所说的TIM1_CCR4)4 v& p! i0 @* B' u  u7 x! M
45.png
5 k) k8 m: V6 f. S8 t0 g, e- X, G
( a# i9 T" C  u% K) a+ r& C8 N, f# |" R' M

. ~4 T( B5 ^  p文档下载
7 [  y, c+ D8 J+ l: y6 m: X3 q& z' W0 T' l' }
更多实战经验
收藏 3 评论12 发布时间:2017-1-4 17:05

举报

12个回答
leo121_3006061 回答时间:2017-1-4 20:24:10
谢谢分享,非常好的资料
五哥1 回答时间:2017-1-4 23:07:08
学习了,这个以后会用到
5265325 回答时间:2017-1-5 08:39:12
dear祝子 回答时间:2017-1-5 08:59:03
电机控制领域用的特别多,l你这是要干啥,
andypanfan 回答时间:2017-1-5 09:01:46
谢谢分享
TaoTaoCome 回答时间:2017-10-25 19:46:26
我用中心对齐pwm 定时器的 TRGO信号触发adc 每个pwm周期 有两次
1 Y. Q3 @6 Z5 @$ J. Z2 Y怎么设置为一次啊, 高电平中间触发adc采样
goodyhb031 回答时间:2018-4-24 19:51:11
首先非常感谢您的这篇文章,其次,请问zero99兄,TIMER2/3/4如何设定PWM波中心点触发ADC?谢谢!
sys001 回答时间:2018-5-3 13:23:25
谢谢分享
sys001 回答时间:2018-5-3 13:23:45
谢谢分享
hip~hop 回答时间:2018-8-25 14:45:13
大佬您好,我是使用的48兆的M0内核单片机,因为ADC硬件触发条件中关于定时器1的只有123个捕获比较通道,但这三个通道我都用于产生互补PWM波了,于是我用定时器1使能触发定时器3,实现两个定时器同步,然后定时器3的更新设置为TRGO信号,硬件触发ADC,实验证明都是正确的,但是,我发现,当我在ADC完成中断中加入电机驱动算法的时候,ADC采集出现跳变,会出现时不时少触发一次ADC采集,这是为什么?
lmyyjx 回答时间:2019-4-20 09:20:08
必须顶一个,可能要用到
电子邱工 回答时间:2019-4-24 08:17:47
谢谢分享

所属标签

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