定时器同步+触发三ADC采样+输出6路PWM波

使用STM32F407DIS进行实验,通过TIM1高级定时器同步TIM8,实现三路ADC采样,并输出6路PWM波控制三相电机。配置过程中涉及定时器基础设置、通道映射、死区设置、主从模式选择、ADC三重模式配置、DMA传输等。验证结果显示定时器和ADC工作正常。
摘要由CSDN通过智能技术生成

为了熟悉定时器定时器和ADC

用STM32F407DIS做了一个简单的工程:

通过高级定时器TIM1溢出更新时间作为触发输出信号(TRGO),触发TIM8开始计数;

同时TIM1的通道1、2、3以及分别的互补通道输出6路PWM波用于控制三相电机;

TIM1的通道4用于触发ADC1的注入通道;

TIM8的通道1用于触发三个ADC的的规则通道;

TIM8的通道2用于触发ADC2的注入通道;

最后采样结果通过DMA传输到数组内保存起来;

为此,绘制了程序框图:

由框图来看工程更加清晰,更便于理解;

接下来配置工程,实现该任务:

首先配置定时器:

1     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
2     TIM_OCInitTypeDef  TIM_OCInitStructure;3     TIM_BDTRInitTypeDef TIM_BDTRInitStructure;      
4     GPIO_InitTypeDef GPIO_InitStructure;

开启时钟以及基础设置

 1     // TIM1 clock enable
 2     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
 3     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE);
 4 
 5     // Time Base configuration
 6     TIM_TimeBaseStructure.TIM_Prescaler = 0;   //时钟频率除数的预分频值
 7     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
 8     TIM_TimeBaseStructure.TIM_Period = 4200;         //ARR
 9     TIM_TimeBaseStructure.TIM_ClockDivision = 0;    //时钟分割
10     TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
11     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

 

通道设置

 1     // Channel 1, 2 and 3 Configuration in PWM mode
 2     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
 3     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
 4     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
 5     TIM_OCInitStructure.TIM_Pulse = TIM1->ARR / 2;                  //待装入捕获比较寄存器的值  5000
 6     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      //输出比较极性 高
 7     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //互补输出极性 高
 8     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;        //空闲状态期间输出比较引脚状态
 9     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
10 
11     TIM_OC1Init(TIM1, &TIM_OCInitStructure);
12     TIM_OC2Init(TIM1, &TIM_OCInitStructure);
13     TIM_OC3Init(TIM1, &TIM_OCInitStructure);
14     TIM_OC4Init(TIM1, &TIM_OCInitStructure);
15 
16     TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
17     TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
18     TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
19     TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);

 

死区设置

1     TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
2     TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
3     TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
4     TIM_BDTRInitStructure.TIM_DeadTime = 60;                  // 60个周期时间
5     TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
6     TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
7     TIM_BDTRInitStructure.TIM_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值