我是靠谱客的博主 要减肥百合,最近开发中收集的这篇文章主要介绍cubexMx配置STM32产生特定数目的PWM波驱动步进电机同时触发DMA传输的ADC同步采样一、背景二、引脚设置三、AD参数设置四、TIM4参数设置五、TIM5参数设置六、代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、背景

 步进电机在每个PWM信号的上升沿时转动一步,同时要求在每移动一步之前的一段时间或者之后的一段时间进行ADC采样,这里用的是内部ADC,如下图1洋红色的上升沿触发步进电机转动,黄色的上升沿触发AD采样,这里注意STM32的AD的外部触发只能是上升沿,在《STM32中文参考手册》中,有关于这部分的内容如图2,写本文时用的是STM32VET6。

                                                                                           图1

                                                                                          图2

另外ADC的外设框图如下图3所示:

                                                                                      图3

本文采用的是ADC1的通道13(PC3)采集外部模拟信号。TIM4为主模式控制PWM的频率,其通道2输出PWM,即配置为PWM Generation CH2(PD13);通道4触发ADC,也配置成PWM模式,即PWM Generation CH4,其实在我的项目中通道4的引脚有其他用途,本想配置成PWM Generation CH4 No Output,但是这样配置以后没法触发ADC进行采样,猜测是这种模式不只是不从外部引脚输出,而且内部也没有输出,我最后的做法是将该IO(PD15)的复用模式只能强制配置成了普通推挽输出。TIM5为从模式接收TIM4的ITR2触发源,用于控制PWM的个数。

二、引脚设置

AD的引脚配置如下图4所示,只选择了IN13。

                                                                            图4

定时器的引脚选择如下,注意这里TIM5的Salve MOde及Trigger Source的选择:

                                                                 图5

三、AD参数设置

AD的参数设置如下,注意要正确选择外部触发源,这里选择的是Timer 4 Capture Compare 4 event

AD的DMA设置如下,这里尝试了Mode不管是Normal还是Circular都可以,暂不知本文的应用中设置不同是否有影响:

四、TIM4参数设置

TIM4的参数设置如下:

五、TIM5参数设置

TIM5配置如下,TIM5需要使能全局中断:

六、代码

启动AD开始转换:HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adcData,1000);

启动定时器输出PWM同时触发AD转换:    

    htim5.Instance->ARR = 1000;   //演示直接这样改PWM的个数
    HAL_TIM_Base_Start_IT(&htim5); 
    HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);

在定时器5的中断回调里关闭PWM及AD的触发

    HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);

    HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4);

    HAL_TIM_Base_Stop(&htim5);

在AD传输完成中断里处理数据:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if(hadc == &hadc1)
    {
        //AD传输完成,可以开始处理数据了
    }
}
注意调用HAL_ADC_Start_DMA时传入的传输个数不能比PWM的个数多,否则一次启动将填不满想要的个数也不好触发中断,可以用宏定义把它们设置成一致。

 

 

 

最后

以上就是要减肥百合为你收集整理的cubexMx配置STM32产生特定数目的PWM波驱动步进电机同时触发DMA传输的ADC同步采样一、背景二、引脚设置三、AD参数设置四、TIM4参数设置五、TIM5参数设置六、代码的全部内容,希望文章能够帮你解决cubexMx配置STM32产生特定数目的PWM波驱动步进电机同时触发DMA传输的ADC同步采样一、背景二、引脚设置三、AD参数设置四、TIM4参数设置五、TIM5参数设置六、代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部