win10电脑前面的win10耳机插孔没声音音怎样设置

下次自动登录
现在的位置:
& 综合 & 正文
STM32F103定时器输出PWM波控制直流电机
这个暑假没有回家,在学校准备九月份的电子设计竞赛。今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题。。
要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念。。一个定时器可以支持一个PWM,要支持多个,就需要各路PWM周期相同而占空比不同。。利用定时器的通道这一概念就可以实现。STM32单片机定时器有四个通道,每个通道的TIM1——CCRx(x=1、2、3、4)存放一个值。。计数器从0开始计数,此时PWM输出为0。。当计数值达到寄存值时,此时PWM电平发生翻转,输出1。。所以设置四个不同的占空比的值,就可以产生四路PWM波。
本例程使用高级定时器TIM1输出两路PWM波分别控制左边两个轮子轮和右边两个轮子。TIM1时钟频率是72MHz,如果要输出20KHz的PWM波,,应该把TIM1_Period设为3600-1。具体如下所示:
void TIM_Configuration(vu16 CCR1,vu16 CCR2)
TIM1_TimeBaseInitTypeDef
TIM1_TimeBaseS
TIM1_OCInitTypeDef
TIM1_OCInitS
TIM1_CtrlPWMOutputs(DISABLE);
/* TIM1 Peripheral Configuration */
TIM1_DeInit();
/* Time Base configuration */
TIM1_TimeBaseStructure.TIM1_Prescaler = 0;
TIM1_TimeBaseStructure.TIM1_CounterMode = TIM1_CounterMode_Up;
TIM1_TimeBaseStructure.TIM1_Period = 3599;
TIM1_TimeBaseStructure.TIM1_ClockDivision = 0;
TIM1_TimeBaseStructure.TIM1_RepetitionCounter = 0;
TIM1_TimeBaseInit(&TIM1_TimeBaseStructure);
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM1_OCInitStructure.TIM1_OCMode = TIM1_OCMode_PWM2;
TIM1_OCInitStructure.TIM1_OutputState = TIM1_OutputState_E
TIM1_OCInitStructure.TIM1_OutputNState = TIM1_OutputNState_E
TIM1_OCInitStructure.TIM1_Pulse = CCR1;
TIM1_OCInitStructure.TIM1_OCPolarity = TIM1_OCPolarity_L
TIM1_OCInitStructure.TIM1_OCNPolarity = TIM1_OCNPolarity_L
TIM1_OCInitStructure.TIM1_OCIdleState = TIM1_OCIdleState_S
TIM1_OCInitStructure.TIM1_OCNIdleState = TIM1_OCIdleState_R
TIM1_OC1Init(&TIM1_OCInitStructure);
TIM1_OCInitStructure.TIM1_Pulse = CCR2;
TIM1_OC2Init(&TIM1_OCInitStructure);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
/* Main Output Enable */
TIM1_CtrlPWMOutputs(ENABLE);
最后可以调用这个函数实现小车的前进,后退,左转,右转。。好的,,今天就写到这里,希望地大家有用。。
&&&&推荐文章:
【上篇】【下篇】&>&&>&&>&&>&STM32的TIM3输出相位差0~360可调的PWM波形
STM32的TIM3输出相位差0~360可调的PWM波形
上传大小:1.57MB
使用STM32的TIM3输出相位差0~360可调的PWM波形,使用的是国信长天的CT117E开发板,有需要的可自行下载和使用。
综合评分:0(0位用户评分)
所需积分:1
下载次数:31
审核通过送C币
创建者:tox33
创建者:chengdong1314
创建者:qianleikuihai
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
STM32的TIM3输出相位差0~360可调的PWM波形
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:> Stm32产生两路相位差为180度的pwm
Stm32产生两路相位差为180度的
By derrick wang
由于上次用高级定时器产生的两路互补带死区的信号不能满足应用需求。如标题所示需要的是两路相位差为180度的pwm信号,占空比和频率都是相同的,只是相位不同。仔细重读高级定时器的数据手册,发现产生的两路互补信号达不到这个要求。然后必然要考虑用两个通道产生了(两路互补属于一个通道)。仔细搜罗最终确定了两种发案可以实现,这两种方式具有异曲同工之妙但也有各自的不同。相同之处在于同采用定时器计数的中央对齐模式,不同就在于输出选择的模式不同(对TIM_CCMRX寄存器中OCXM位进行配置)。 下面待我一一详解。生成的波形图如下:
方案一:定时器计数采用中央对齐模式,两路输出配置为pwm的输出比较模式。
1)配置定时器的计数器为中间对齐计数,即先向上计数再向下计数。
2)在该定时器上选择2个通道,并分别配置为输出比较模式,要输出如上图波形须把两路输出极性设置为不同。
3)配置自动重装载寄存器TIMx_ARR为要求输出频率的一半。
4)假定CC1为第一个输出信号的通道,再假定第一个信号的正脉冲宽度对应为W1,则配置TIMx_CCR1为TIMx_ARR-W1/2。
5) 同4),假定CC2为第二个输出信号的通道,正脉冲宽度对应为W2,配置TIMx_CCR2为W2/2。
下面我要产生频率为50khz,占空比为20%的两路pwm信号。TIMx_ARR==720;
TIMx_CCR1=720-720*0.2=576;TIMx_CCR2=720*0.2=144;
为什么这样算请看下图:
①和②对应得值就是576. ③和④对应得值就是144。但是他们之间的距离是相等的,也就保证了两路pwm产生的占空比是一样的。
具体配置代码如下所示:
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBaseS
TIM_OCInitTypeDef TIM_OCInitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
/********TIM3_CH1 引脚配置*********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOA,&GPIO_InitStructure2);
/********TIM3_CH2 引脚配置*********/
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
//设置为复用浮空输出
GPIO_Init(GPIOA,&GPIO_InitStructure2);
/************定时器基本配置***************/
TIM_TimeBaseStructure.TIM_Period=720-1; // 自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler=0; // 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned3;//中央对齐计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重复寄存器,用于自动更新pwm占空比
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/**************pwm通道1输出配置*************/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
//设置为pwm1输出模式
TIM_OCInitStructure.TIM_Pulse=200;
//设置占空比时间
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_L
//设置输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_E
//使能该通道输出
//下面几个参数是高级定时器才会用到
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_L
//设置互补端输出极性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_E//使能互补端输出
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_S
//死区后输出状态
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_S//死区后互补端输出状态
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
//按照指定参数初始化
/**************pwm通道2输出配置*************/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//设置为pwm1输出模式
TIM_OCInitStructure.TIM_Pulse=520;
//设置占空比时间
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_L
//设置输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_E
//使能该通道输出
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM3,ENABLE);
//打开TIM2
TIM_CtrlPWMOutputs(TIM3, ENABLE);
//pwm输出使能,一定要记得打开&/span&
转载请注明转自电子创客营:!
or分享 (0)

我要回帖

更多关于 电脑声音插孔设置 的文章

 

随机推荐