OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17633|回复: 16

TIM1配置PWM输出无反应

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
发表于 2011-7-25 11:40:05 | 显示全部楼层 |阅读模式
想用TIM1的ch1、ch2、ch3、ch4配置为pwm输出驱动小车的,但是配置好后测量PA8~PA11上电压都为0,但是DS0却是亮的,测量DS0上的电压为1.9v
一下是我配置的关键部分源码

TIM1配置
static void BSP_PWMInit(void)
{
RCC->APB2ENR|=1<<11;//使能tim1时钟
TIM1->SC=36000;
TIM1->ARR=1000;
// TIM1->DIER=0x0002;
TIM1->CCMR1=0x6868;
TIM1->CCMR2=0x6868;
TIM1->CCER=0x1111;
// TIM1->SMCR=0x0064;
TIM1->CCR1=300;
TIM1->CCR2=600;
TIM1->CCR3=900;
TIM1->CCR4=1000;
TIM1->EGR=0x0001;
TIM1->CR1=0x0081;
}


static void BSP_GPIOInit(void)
{
RCC->APB2ENR|=1<<2;//使能gpioA时钟
GPIOA->CRH&=0xffff0000;
GPIOA->CRH|=0x0000AAAA;//TIM1的ch1、ch2、ch3、ch4配置为推挽复用输出,2MHz
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-25 12:33:22 | 显示全部楼层
你先看一个行不行.再看一组.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
 楼主| 发表于 2011-7-26 10:39:46 | 显示全部楼层
不行啊,还是没反应,DS0灯还是亮的,但是PA8为什么测不到电压信号呢?我把CH1、CH2单独开启都试过了,可还是这样子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-26 10:42:05 | 显示全部楼层
就是你配置没正确,所以才没有输出.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2011-7-2
在线时间
3 小时
发表于 2011-7-26 11:42:08 | 显示全部楼层
LZ你的pwm输出驱动小车的电机是步进电机还是...?
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
 楼主| 发表于 2011-7-26 11:58:06 | 显示全部楼层
一般的小车直流电机
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
 楼主| 发表于 2011-7-26 14:50:43 | 显示全部楼层
再次研究了原子的代码,发现有一点和我写的不太一样
void WM_Init(u16 arr,u16 psc)
{    
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1;       //TIM3时钟使能    

GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
  
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出    
GPIOA->ODR|=1<<7;//PA7上拉

TIM3->ARR=arr;//设定计数器自动重装值 
TIM3->SC=psc;//预分频器不分频

TIM3->CCMR1|=7<<12;  //CH2 WM2模式  
TIM3->CCMR1|=1<<11; //CH2预装载使能    

TIM3->CCER|=1<<4;   //OC2 输出使能    

TIM3->CR1=0x8000;   //ARPE使能 
TIM3->CR1|=0x01;    //使能定时器3    
}  
为什么要将PA7上拉?我对参考手册里的GPIO原理框图的理解是,当选择复用输出时,odr寄存器就没有连接到输出引脚上,这样做不是多次一举么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-26 15:57:56 | 显示全部楼层
对,这里我是习惯性的加上了.你可以不加.确实是多此一举来的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
 楼主| 发表于 2011-7-26 17:20:59 | 显示全部楼层
哈哈!终于找到问题所在了!
原来TIM1高级定时器里面还有一个break and dead-time register (TIMx_BDTR)寄存器,
这个寄存器掌管着输出总开关。
开来还是要认真阅读手册
PS:我怎么觉得中文手册读起来不解渴呢,这个是我重新读英文手册发现的,并且以前好几次都是读英文手册才发现问题的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-26 17:28:54 | 显示全部楼层
呵呵,这个貌似我在不完全手册里面说了吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-7-25
在线时间
0 小时
 楼主| 发表于 2011-7-26 23:01:07 | 显示全部楼层
谢谢了!原子!
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-3-21
在线时间
23 小时
发表于 2015-3-28 22:32:29 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,定时器的CH3和CH4通道可以作为PWM输出口吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-28 23:24:29 | 显示全部楼层
回复【12楼】波波:
---------------------------------
可以的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-3-21
在线时间
23 小时
发表于 2015-3-29 11:27:02 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
好的,原子哥,我给步进电机驱动PWM,但是步进电机一直响但是不动,是怎么回事啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-29 23:08:39 | 显示全部楼层
回复【14楼】波波:
---------------------------------
 说明你给的不对啊,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-4-19
在线时间
2 小时
发表于 2015-12-16 10:40:22 | 显示全部楼层
回复【11楼】yxl1990z:
---------------------------------
/**********************************
@brief TIM_PWM_Config
* @param None
* @retval 配置pwm 参数
**********************************/
void TIM1_PWM_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure); 

//预定标的值TIM1_Period = (time定时器频率 / pwm的频率) - 1
TimerPeriod = (SystemCoreClock / 50000 ) - 1;
//Channel1Pulse的值可以按照下面的公式进行计算:
//ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100
//DutyCycle/100为占空比的值

//计算CCR1 跳转值 在占空比为50%时
/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 */
Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);
/* TIM1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);

//Time 定时基础设置
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//Time 定时设置为上升沿计算模式
TIM_TimeBaseStructure.TIM_Period = TimerPeriod;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_UpdateRequestConfig(TIM1,TIM_UpdateSource_Regular);
//频道1的PWM 模式设置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//选择输出比较状态
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//选择互补输出比较状态
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//设置输出极性
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//设置互补输出极性
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
//装载比较寄存器,判断什么时候发生PWM翻转
TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;//使能频道1配置
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
//使能TIM1 CCR2寄存器上的 载入
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);
TIM_ClearITPendingBit(TIM1,TIM_IT_CC1);

//装载比较寄存器,判断什么时候发生PWM翻转
TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;//使能频道2配置
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
//使能TIM1 CCR2寄存器上的 载入
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Disable);
TIM_ClearITPendingBit(TIM1,TIM_IT_CC1);
//使能ARR寄存器 加载
TIM_ARRPreloadConfig(TIM1,ENABLE);
//死区设置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; //运行模式下输出
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; //空闲模式下输出选择
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; //锁定设置,锁定级别1
TIM_BDTRInitStructure.TIM_DeadTime = 0x0F; //死区时间
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; //刹车功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low; //刹车输入极性,即刹车控制引脚接GND时,PWM停止
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; //自动输出使能

TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
TIM_Cmd(TIM1, ENABLE);
TIM_ITConfig(TIM1,TIM_IT_Update ,ENABLE);
TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE);
//TIM1 主输出使能
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}

中断部分


void TIM1_CC_IRQHandler(void)

{
TIM_OCInitTypeDef TIM_OCInitStructure;
if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
if(Num_tim1==500000)
{
Num_tim1=0;
if(PWM_num==5)
{
PWM_num=1;
SETPwmPulse(PWM_num);
//TIM_SetCompare1();
}
else
{
SETPwmPulse(PWM_num);
PWM_num++;
}
}
else 
{
Num_tim1++;
}
}
else if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
}
}
回复 支持 反对

使用道具 举报

18

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-4-19
在线时间
2 小时
发表于 2015-12-16 10:41:08 | 显示全部楼层

补充内容 (2016-5-28 15:53): TIM1配置PWM输出无反应
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 09:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表