2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
程序员文章站
2022-09-17 20:34:56
程序设计方案我们采用的是STM32F103RCT6芯片来产生超声波信号超声波信号 为STM32F103RCT6芯片产生的PWM方波频率为40KHZ 占空比为50%STM32F103RCT6内部定时器■ 多达11个定时器− 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入− 2 个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数器− 2 个1...
程序设计方案
我们采用的是STM32F103RCT6芯片来产生超声波信号
超声波信号 为STM32F103RCT6芯片产生的PWM方波
频率为40KHZ 占空比为50%
STM32F103RCT6内部定时器
■ 多达11个定时器
− 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入
− 2 个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器
− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数器
− 2 个16位基本定时器用于驱动DAC
PWM的产生方式
PWM配置模式
利用STM32 CCR寄存器和ARR寄存器产生PWM
PWM的输出引脚
信号输出引脚1 PA1 TIM2_CH2
信号输出引脚2 PA7 TIM3_CH2
程序设计
信号输出引脚1 PA1 配置过程
void TIM3_PWM_Init(void)
{
uint16_t PrescalerValue = 0;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
PrescalerValue = (uint16_t) (72000000 / 24000000) - 1;
TIM_TimeBaseStructure.TIM_Period = 600-1;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 300;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
信号输出引脚2 PA7 配置过程
void TIM2_PWM_Init(void)
{
uint16_t PrescalerValue = 0;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
PrescalerValue = (uint16_t) (72000000 / 24000000) - 1;
TIM_TimeBaseStructure.TIM_Period = 600-1;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 300;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
本文地址:https://blog.csdn.net/m0_46179894/article/details/109012160
上一篇: 哈尔滨每年1亿元支持云计算产业