当前位置: 移动技术网 > 科技>人工智能>嵌入式 > 2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计

2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计

2020年10月11日  | 移动技术网科技  | 我要评论
程序设计方案我们采用的是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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网