STM32电机控制代码框架搭建(三)——配置Stm32CubeMx进行ADC采样

电机控制另一个关键的模块就是ADC采样,这个模块配置的好坏决定了采样电流和电压的精准度,因此有必要对其进行深入学习。

简介:

STM32 在片上集成的ADC 外设非常强大。STM32F103xC、STM32F103xD 和STM32F103xE增强型产品内嵌3个12位的ADC,每个ADC 共用多达 21 个外部通道,可以实现单次或多次扫描转换。如 STM32F103VET6,属于增强型的CPU,它有18个通道可测量 16 个外部和2个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行ADC 的结果可以左对齐或右对齐方式存储在 16 位数据存器中,模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低闹值。

STM32的ADC模块的几个特点:

  • 12位分辨率,指AD转换器对输入信号最小变化的灵敏度,表示数字输出最低位对应的模拟信号。计算公式:信号量程/((2^n)-1)。STM32微控制器为12位分辨率。
  • 转换时间可编程。采样一次至少要用 14 个ADC 时钟周期,而ADC 的时钟频率最高为14 MHz,它的采样时间最短为 1us。
  • 输入电压范围为 0~VREF+,其中VREF+一般为3.3V
  • 收到触发信号才开始转换。
  • 读取可通过两种方式:CPU和DMA读取。将其读到内存中存储。
  • 数据格式分为左对齐和右对齐。STM32的ADC为12位ADC,转换后的结果为12位的数据,而数据寄存器为16位,所以转换后的数据在数据寄存器中右两种对其方式,左对齐和右对齐,进行数据转换的时候需要注意。
  • 在了解了一些基础的STM32的ADC知识后,熟悉一下CubeMx中ADC的配置界面,如下图所示,第一步:选择通道。选择PC1作为采样接口,选择ADC采样模块1,并且选择通道11。

    第二步:配置ADC参数,时钟分频、工作模式、数据对齐方式、触发源、输出模式等

    如下链接时ADC参数的中文注释:中文注解:STM32CubeMX ADC参数配置页-物联沃-IOTWORD物联网

     (1)选择工作模式,由于本实验是同一个引脚是只有一个ADC在采样信号,因此选择独立模式,当一个引脚有多个ADC采样信号的时候,再配置其他模式。

    (2)选择时钟分频,选择时钟分频为PCLK2的2分频,一般默认选择2分频,看自己采样率的需求,这里可以选择他的4/8分频。

    (3)数据对齐方式为右对齐

    (4)扫描转换模式,就一个通道不需要打开,当有多个通道需要采集信号时必须开启扫描模式,此时ADC将会按设定的顺序轮流采集各通道信号

    (5)连续转换模式,本次小实验通过TIM2的定时器触发采样,因此转换完一次之后等待下一次触发之后再次开始转换,选择模式为不使能。

    (6)选择通道数目,此时选择为1。

    (7)选择触发源,配置为定时器TIM2的比较事件,触发电平为上升沿。

     第三步:配置TIM2定时器,为ADC提供触发源。

    在完成ADC自身模块的配置后,需要对触发源进行合理配置,否则无法正常采样。TIM2的配置如下图所示,选择4通道作为输出通道,此时TIM2的时钟源为72M,根据前面定时器模块知识需要要想实现72分频,PSC值设置为71,设置比较值为499时对应采样间隔时间为 (499+1)/1000000 =0.0005s,采样频率为2kHz。 

    第四步:打开DMA搬运功能并在主函数中打开以上外设,选择上图中的DMA setting选项卡,打开其功能,并且在主函数的用户代码中打开DMA功能,如下代码所示:

     HAL_TIM_OC_Start(&htim2,TIM_CHANNEL_4);
     HAL_ADC_Start(&hadc2);
     HAL_ADC_Start(&hadc1);
     HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)&g_adc_value,1);
     LL_DMA_DisableIT_HT(DMA2,LL_DMA_STREAM_0);

     第五步:上面DMA将ADC转换的数据存到了g_adc_value变量中,我们设置的是右对齐方式并且有效数据位为12位,因此需要乘以系数 3.3/4096。

    根据右对齐方式定义,需要将ADC采样值生成代码后进行测试得到如下结果:

     

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32电机控制代码框架搭建(三)——配置Stm32CubeMx进行ADC采样

    发表评论