电机控制另一个关键的模块就是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采样值生成代码后进行测试得到如下结果:
文章来源:https://www.toymoban.com/news/detail-542149.html
文章来源地址https://www.toymoban.com/news/detail-542149.html
到了这里,关于搭建stm32电机控制代码框架(三)——Stm32CubeMx配置ADC采样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!