foc配置篇——ADC注入组使用定时器触发采样的配置

这篇具有很好参考价值的文章主要介绍了foc配置篇——ADC注入组使用定时器触发采样的配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

foc配置篇——ADC注入组使用定时器触发采样的配置

foc驱动板都会用到电流采样,本篇就针对三电阻低测采样来讲一讲如何配置ADC。

一、基本原理

在此之前,或许大家使用ADC都是建立一个大数组,然后DMA无脑开着将数据搬到数组里,等到要用到时候就取出来做一个均值滤波。

​ 这种方法用在foc电流采样上行不行呢?答案是看情况,如果你的硬件用的是低采,这种方法是行不通的。因为低采的采样电阻在下桥臂到地之间,当下桥臂关闭时,电流是不能通过下桥臂流向地的,此时采样电阻自然也不会有电流经过(除了漏电流之类的)。因此,低采就是要当下桥臂开启的时候采样。

​ 如果我们还用无脑采,采样点在任意一个地方都是有可能的,可能采在下桥臂关闭的时候,也可能采在mos开启关闭的瞬间,具体在哪我们是不知道。因此我们就需要触发采样,必须非常明确地在下桥臂开启的时候采样。

二、CubeMX配置

下面就以最常见的STM32F405RG为例:

1、首先是正常配置时钟树,将主频配置为168M。

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

2、配置TIM1输出六路24KHz的PWM信号

(1)

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

解释:

  1. 这里的通道四用作ADC的触发源,一般情况不需要它输出,不过初学时为了方便调试及理解,也可以配置成 PWM Generation CH4。但一定要看清楚是 PWM Generation 开头的,切记切记不要选成 Output Compare 开头的!!!

(2)

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

说明:

  1. Counter Settings
    • Presclar :预分配系数,为了不损失定时器的分辨率,一般都设为0
    • Counter Mode :这里一定要选择中心对齐模式,至于是123无所谓,因为这个只会影响到捕获比较中断,而这个中断我们用不到。
    • Counter Period :装载值,计算公式为 定时器频率/PWM频率/2 = 168000000/24000/2 = 3500 。中心对齐模式的装载值需要除以2,但不需要减1。

其余全部默认即可。

(3)这里可以使能溢出中断,然后在中断里翻转io便于调试。

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

3、配置ADC

(1)根据自己板子的硬件连接去选择ADC通道,这里假设连接通道0、1、2

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

(2)ADC基本配置

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

​ 全部默认即可

(3)ADC规则组的配置

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

​ 全部默认即可。不过这里特别说明一下,使用CubeMX配置ADC,即使用不到规则组,它也会强制你用一个规则通道。这里可以随便选择一个,只要后续我们不开启规则转换,这个通道也不会被规则组影响。或者实在是不放心的,可以选个内部温度通道。

(4)ADC注入组的配置

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

说明:

  1. Number Of Conversions :使用到注入组的通道个数。默认是0的,需要我们加到3,然后点击旁边空白地方一下,就会自动多出下面三个 Injected Rank 。
  2. External Trigger Source :外部触发源,这里我们便使用前边说的定时器1的通道四作为触发源。
  3. External Trigger Edge :外部触发极性。这个极性怎么去理解呢?我们可以想象一下定时器1的通道四输出pwm,而pwm是有上升沿和下降沿的。我们这里选择下降沿,意思就是在通道4输出pwm的下降沿的瞬间,触发ADC进行AD转换。(这个后边会细讲)
  4. Injected Conversion Mode :这个默认即可。
  5. Injected Rank :这个就是注入序列,一旦ADC开始注入转换,就会按照Rank1-2-3-4的顺序依次进行采样,每个rank只能选择一个对应的通道,一个通道可以被多个rank选择。而在本例中,一旦定时器1通道4的pwm产生下降沿,ADC1就会对通道0进行一次采样,然后对通道1采样,最后对通道2采样。三个序列采样完成后,注入组会停下来等待下一个下降沿来临。
  6. Sampling Time :采样时间,因为foc电流采样是一个分秒必争的过程,所以采样时间尽可能的要短,这里选择3周期,最大也不要大于15周期。
  7. Injected Offset :默认即可。

4、生成工程

生成工程后,在main函数的这个地方添加如下代码:

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

	HAL_ADCEx_InjectedStart(&hadc1);
	__HAL_ADC_ENABLE_IT(&hadc1, ADC_IT_JEOC);
	
	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
    
    HAL_TIMEx_OCN_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIMEx_OCN_Start(&htim1, TIM_CHANNEL_2);
    HAL_TIMEx_OCN_Start(&htim1, TIM_CHANNEL_3);
	
	__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);

然后编译,点击仿真按钮,下载并仿真。再打开ADC1的相关寄存器:

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

我们发现注入组相关的几个数据寄存器都为0,是不是没有开启转换?

没错是的。大家还记得之前提到的通道四pwm的下降沿吗?我们现在定时器1的CCR4的值为0,也就是它一直都在输出低电平,自然就没有下降沿,没有下降沿ADC也不会被触发。于是我们现在给定时器1的CCR4寄存器随便赋个值(1-3499的任意值),然后再看ADC1的这几个寄存器:

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

可以看到,它们已经有数值了,而且不断地在跳动、更新。如果我们将这个通道连接到3.3V,数据会变成4095左右;连接到地,数值会变成0左右。到了这里,我们的ADC可以说已经配置成功了。

三、调试

前文虽然调通了ADC注入组触发采样,但还不能直接应用于低侧采样,因为还有一个重要的东西没讲,那就是触发位置。触发位置的设置是触发采样的灵魂所在,触发位置设置的不对,触发采跟无脑采也就没什么两样了。

1、什么是触发位置

前文铺垫的已经够多了,现在便让各位直观地感受一下什么叫触发位置。

我们使用逻辑分析仪连接单片机的三个IO口,连接关系如下:

通道0 -> 定时器1中断函数中翻转IO
通道1 -> 定时器1的pwm通道1(非互补通道)
通道2 -> 定时器1的pwm通道4
通道3 -> ADC1中断函数中翻转IO

然后我们将pwm通道1的占空比设为25%,pwm通道4的占空比设为50%,测一组波形:

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

通过通道1(蓝色)的波形,我们可以看到此时定时器1的通道1输出的pwm的频率为24KHz左右,占空比为百分之25左右,与我们的设置相符。

通道2(绿色)的波形则是定时器1的通道4输出的pwm,我们可以发现在它的下降沿后的一段时间,通道3(黄色)产生了一个脉冲,也就是进入了ADC注入中断,这代表着ADC已经完成了一组采样。而这段延时,由ADC采集三个通道的采样时间和响应中断的延时组成,而ADC单次采样时间我们可以从手册中找到。

通道0(紫色)的波形反映了定时器1进入中断的频率,我们可以发现这个频率是48KHz,比pwm频率快一倍,这是为什么?因为我们用到了中心对齐模式,这个模式下定时器上溢和下溢都会进入一次中断(和中心对齐模式123没有关系)。如果我们希望进入中断的频率和pwm同频,我们就需要给重复计数寄存器RCR赋值,值为1即同频。(但要注意,定时器是上溢进入中断还是下溢进入中断可能会不确定,与我们写入RCR寄存器的时机有关系)

2、低采的触发位置

低采是触发位置是在ABC三相pwm同时处于低电平的时刻,也就是定时器三个通道(正常通道不是互补通道)输出的pwm同时处于低电平的时刻。

那么什么时候会出现三个pwm同时为低电平?

hal_adcex_injectedstart,单片机,stm32,嵌入式硬件

如图所示,中间蓝色竖线的地方就是三相都为低电平的地方(前提是三相占空比都小于100%)。三相中占空比最大的相的低电平时间,就是留给我们ADC采样的时间。如果某一相的占空比过大,留给我们的时间已经小于采样时间了,那ADC可能会无法采样到电流,或者在mos开启关闭的附近时间采样,这个时候会采到非常严重的尖峰,此时电流采样已经无法正常进行。因此,低采需要限制最大占空比。

那么低采的触发位置设置在什么地方比较合理?我们再看上图,假如定时器通道1(蓝色波形)是三相中占空比最大的那个,那么我们的采样位置可以放在它下降沿处靠右一点的位置,就比如图中的绿色波形。

那么,在我们前面配置都一样的前提下,CCR4寄存器的值设为多少合适?因为我们的装载值是3500,如果我们设为3500,通道四就会一直处于高电平,没有下降沿也就无法触发ADC。因此我们可以设置成比3500小一点的数,比如3450,但前提是三相最大的装载值不会超过3400左右。不过这里只是打个比方,具体还是要根据自己手上的硬件去细调。

问题解答:

1、为什么一定要用注入组,用规则组加触发行不行?

​ 这样也是可以的,关键在于触发而非规则还是注入。不过规则组仅有一个数据寄存器,因此多通道采集还需要DMA的配合。而注入组的四个通道都有独立的数据寄存器,要用的时候直接从寄存器里面取即可。同时,注入组可以打断规则组,因此可以配置规则组进行一些温度采样,注入组进行电流采样,合理分配。所以,在ADC支持注入组的情况下,强烈建议使用注入组进行电流采样。

2、可不可以多个ADC使用同一个触发源?

​ 可以,而且更加合理。虽然我们的ADC采样时间很短(3个通道加起来可能不过5us,不过前提是采样周期为3周期),但是占空比高的时候留给我们采样的时间也很短。如果使用3个ADC同时触发,可以一次采样时间采完三相电流。而且,虽然连续采样的间隔很短,但仍然是有时间差的,这样我们采集到的三相电流就不是同一时刻的,这一点在追求细节的时候是不可忽视的。文章来源地址https://www.toymoban.com/news/detail-790734.html

到了这里,关于foc配置篇——ADC注入组使用定时器触发采样的配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F系列项目定时器配置-中断触发源详解

    1.以高级定时器为例:  2.触发源选择与极性选择:   3.触发源介绍 (282条消息) 【STM32技巧】(1)STM32定时器8种触发源之ITR0~ITR3说明_stm32 定时器触发定时器_小石头有大内涵的博客-CSDN博客 ITR0 内部触发0 ITR1 内部触发1 ITR2 内部触发2 ITR3 内部触发3 ITR3  

    2024年02月11日
    浏览(52)
  • STM32 ADC+定时器+DMA+FFT

    本次实现的功能为单片机DAC输出一个正弦波,然后ADC定时采样用DMA输出,最后对DAC输出的波形进行FFT。 单片机STM32F103ZET6 内部时钟 一、配置ADC ADC端口为PA1,采用DMA输出,定时器3触发 定时器时钟64M,分频后为102.4KHz ADC采样时间为102.4KHz/100=1.024KHz 二、配置DAC DAC端口PA4 DMA传输

    2024年02月13日
    浏览(44)
  • 【STM32】- 定时器+DMA+ADC 双重模式

    目录   1 前言 2 ADC介绍 2.1 多重工作模式 2.2 多重ADC框图 2.3 规则同时模式 3 程序设计 3.1 时序图 3.2 初始化流程图 3.3 初始化代码 4 结论        关于ADC,相信大家都比较了解,关于STM32的学习教程都会有所讲解,但以查询方式、单通道讲解的较多,主要告诉大家基本的原理。

    2024年02月10日
    浏览(56)
  • STM32F407 ADC+DMA+定时器 定时采样模拟量

    项目中需要对多个通道的电压进行一定频率的AD采样,由于采样过程贯穿整个任务,为了使采样过程尽可能不占用CPU资源,采用定时器触发的多通道ADC扫描采样,且采样数据由DMA传到RAM中的缓存。 这样做有以下几个好处:1、由定时器触发ADC采样,这样采样的频率可控,且定时

    2024年02月14日
    浏览(50)
  • F407标准库之定时器触发AD转换

    关于ADC转换,正点原子的标准库开发中讲的是:软件触发一次转换,然后获取一个数据,没提及外部触发,也没提及ADC中断。 如果要多次读取数据,可以通过循环+延时来实现。 这种情况就是通过多次调用,轮询读取。 其实,可以结合定时器来触发ADC转换,然后在ADC中断函数

    2024年02月08日
    浏览(37)
  • STM32 HAL库定时器触发DMA并口数据传输

    STM32与FPGA通讯,通过8位并口线进行通讯,16byte的数据在10us之内通过8位并口数据线传给FPGA,FPGA读取该数据。 时钟采用80MHz,由于16byte的数据要在10us之内传完,那么10/(16*2)=0.3125us/次,也就是传输频率得≥3.2MHz。 定时器设置:为了方便起见,先选用了4MHz的传输频率。80MHz

    2024年02月02日
    浏览(73)
  • 【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC

    MSP430 是德州仪器(TI)一款性能卓越的超低功耗 16 位单片机,自问世以来,MSP430 单片机一直是业内公认的功耗最低的单片机。除采用先进的制造工艺使芯片的静态电流尽可能降低外,MSP430 的独立可配置的时钟系统是其低功耗的基石之一。在追求绿色能源的今天,MSP430 超低功

    2024年02月02日
    浏览(69)
  • STM32使用CubeMx配置定时器输出PWM

            项目中经常使用到STM32来输出PWM,每次配置过后过不了多久就会忘记,稍微需要对配置做出修改时都要翻很久的手册,所以决定结合实例把PWM配置的详细步骤记录下来,这样在下次配置时可以很快的捡起来。         本文档的行文结构如下,首先,说明实际需

    2024年02月03日
    浏览(70)
  • STM32定时器(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,配置使用

    2.1 时钟来源 计数器时钟可以由下列时钟源提供: ·内部时钟(CK_INT) ·外部时钟模式1:外部输入脚(TIx) ·外部时钟模式2:外部触发输入(ETR) ·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

    2024年02月02日
    浏览(55)
  • 同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?

    在同一线程中,如果线程正在忙过程中,定时器的触发事件会被延迟,直到线程空闲下来才会被触发。这是因为在QT中,线程和定时器的处理都是通过事件循环来完成的。当线程处于忙碌状态时,事件循环将会被阻塞,直到线程执行完当前的工作才会继续运行事件循环,处理

    2024年03月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包