STMCU小助手
发布时间:2022-2-25 19:56
|
前言 在各种应用场景中,比如电机,电源,变频器等应用中,ADC 的采样点会有很严格的要求,如果采样点选择错误,会给整个控制系统造成严重后果,本文针对 STM32Fxxx 的 PWM 波硬件间隔 ADC 采样实现方式做简要介绍;* ], _+ v- Q7 a& `+ R# w PWM 硬件触发 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
TIM1_CH4 作为 ADC 的触发信号设定:. j7 c( C/ Q/ V3 f6 ]$ ]; s) l
$ 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 的硬件触发转化变为间隔采样;
5 g6 P# {4 K6 x 图一:间隔 ADC 采样触发点 9 s1 M+ t( G* j+ } PWM 波中心点间隔触发 ADC 设定 I& }7 L& g; n X, @: F$ Z' F$ [ T 在 STM32Fxxx 中最直接有效的设定,使用 Repetition 寄存器,同时设定 Timer1 的 update 信号作为触发输出,图一的蓝色箭头即为此种情况的触发点设定
可改变采样点的间隔触发 ADC 设定# W, x% m) v" Q+ j5 u. C" ?2 g% A* S 可改变采样点的间隔 ADC 触发,即图一中的绿色箭头,使用 TIM1_CH4 这种方式不能实现纯硬件触发采样,这种情况下有两种方法可实现这个采样方式: 一,硬件触发+软件计数方式 ADC 的采样及转化时间很短,基本上需要间隔采样方式,时间基本上都是消耗在算法实现上,所以可以采用每个 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
! M- r7 s+ r4 P. W/ J$ L1 b% c |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版