it编程 > 硬件开发 > stm32

定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

73人参与 2024-08-06 stm32

adc基础知识http://t.csdnimg.cn/x6phu

一、(单通道)使用定时器触发的adc单通道转换

我用的单片机是stm32f103cbtx

定时器中cubemx配置:

c50fe6156bd84ffba36b089adc5eb16e.png

2ccd60693a12402bae46a6c9b258b518.png

pwm模式1和模式2区别:

以下是使用逻辑分析仪观察到的pwm输出情况

c665e23e417947b4a7376cd3a067a2f8.png

137b6339728a4e51b11a9c8b6a2d94fe.png

adc中cubemx配置: 

a2554d931b4f447e994f58c0fad6cd46.png

dma模式选择: 

参考别人的试了用了circular模式,完全没问题,可以成功测出电压值。

我自己也试了normal模式,不行,只能测一次,后面没反应了。

a8d2ba26f6304b67b830a6bc98196a48.png

 代码:

uint8_t adcconvend=0;

int main()
{
  uint16_t adc_value[4]= 0;

  hal_tim_base_start(&htim1);
  hal_tim_pwm_start(&htim1, tim_channel_2);

  hal_adcex_calibration_start(&hadc1);//自动校准
  hal_adc_start_dma(&hadc1, (uint32_t *)adc_value, 4);


  while(1)
  {
      if(adcconvend)
      {
          uint16_t averagevalue = 0;
          for(int i = 0; i < 4; i++)
          {
              averagevalue += adc_value[i];
              printf("adc_value[%d]:%.3f\r\n",i,(float)adc_value[i]*3.3f/4096);
          }
          adcconvend=0;

          averagevalue/=4;
          printf("averagevalue:%d\r\n",averagevalue);
      }
}

void hal_adc_convcpltcallback(adc_handletypedef* hadc)
{
    if(hadc==&hadc1)
    {
        adcconvend=1;
    }
}

结果:

b14f3b94fe984e4cb342b1e8ca014931.png

二、(双通道)使用定时器触发的adc通道转换 

adc中cubemx配置: 

2bbbb2326c00463286845cbe99cb6a6c.png

三、关于pwm的频率或周期的计算

ef4c8d32cb554af9918b6697581516ac.png

*注 :* arr和psc都是16位的寄存器, 数值一定要在0~65535这个范围。

当我们设置了当前机器设置的是 72mhz和 72分频,定时器输入时钟频率是72mhz / 72 = 1mhz:

若重装载值 (period 或 arr)设置为 500。也就是0.1us*500=500us,对于当前 pwm 周期为 500us,也就是500us发生一次中断。

四、寄存器timx_arr、timx_ccrx 、timx_cnt

8e27aba90c9a4ff18d20c25dda041fb2.png

上图可以看出:

timx_cnt值达到arr时,定时器溢出,重新向上计数...循环此过程至此一个pwm周期完成

上图更加形象的说明了

信号频率由 timx_arr 寄存器值决定。

占空比则由 timx_ccrx 寄存器值决定。

参考:

stm32 hal库:adc+dma应用(连续采样、触发采样)_hal adc dma-csdn博客

【stm32】定时器tim触发adc采样,dma搬运到内存(超详细讲解)-csdn博客

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

STM32之DHT11温湿度传感器

08-06

探索STM32与OLED显示屏:SSD1306库使用指南与实战

08-06

完整的手把手带你创建STM32工程(HAL库)

08-06

FT2232作为JTAG烧录器的使用步骤详解

08-06

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

08-06

STM32 CUBEMX主从定时器配置PWM任意相位可调,占空比以及频率可调(学习记录)

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论