OpenEdv-开源电子网

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

分享下刚写的pwm连续脉宽(0%-100%)调节程序!(附代码)!(其实是在搞舵机的,舵机资料不齐,没搞出来~~)

[复制链接]

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
发表于 2013-8-13 02:24:12 | 显示全部楼层 |阅读模式

/******************** (C) COPYRIGHT 2012 **************************
 * 文件名  :main.c
 * 描述    :定时器TIM3产生PWM波输出。
 *           - PA.06: (TIM3_CH1)
 *
 * 作者    :Orange
**********************************************************************************/
#include "stm32f10x.h"
#include "pwm_output.h"
/*
 * 函数名:main
 * 描述  :主函数
 * 输入  :无
 * 输出  :无
 */
int main(void)
{
 /* TIM3 PWM波输出初始化,并使能TIM3 PWM输出 */
 TIM3_PWM_Init();
 /* TIM3 PWM输出占空比变化波中断配置*/
 NVIC_Config();
 
 while (1)
 {}
}


/******************* (C) COPYRIGHT 2012 *****END OF FILE************/


 

/******************** (C) COPYRIGHT 2012 **************************
 * 文件名  :pwm_output.c
 * 描述    :        
 * 硬件连接:---------------------
 *          |  PA.06: (TIM3_CH1)  |
 *           ---------------------       
 * 库版本  :ST3.5.0
 * 作者    :Orange
**********************************************************************************/
#include "pwm_output.h"

/*
 * 函数名:TIM3_GPIO_Config
 * 描述  :配置TIM3复用输出PWM时用到的I/O
 * 输入  :无
 * 输出  :无
 * 调用  :内部调用
 */
static void TIM3_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

 /* TIM3 clock enable */
 //PCLK1经过2倍频后作为TIM3的时钟源等于72MHz
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  /*GPIOA Configuration: TIM3 channel 1 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      // 复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}

/*
 * 函数名:TIM3_Mode_Config
 * 描述  :配置TIM3输出的PWM信号的模式,如周期、极性、初始占空比
 * 输入  :无
 * 输出  :无
 * 调用  :内部调用
 */
static void TIM3_Mode_Config(void)
{
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;

 /* PWM信号电平跳变值 */
 u16 CCR1_Val = 1;       
/* -----------------------------------------------------------------------
    TIM3CLK = 72 MHz, Prescaler = 0x0, TIM3 counter clock = 72 MHz
    TIM3 ARR Register = 199 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
    TIM3 Frequency = 72 KHz.
    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%
  void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)改变频率
  void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)改变占空比
  ----------------------------------------------------------------------- */

  /* Time base configuration */  
  TIM_TimeBaseStructure.TIM_Period = 199;       //当定时器从0计数到199,即为200次,为一个定时周期20ms 50Hz
  TIM_TimeBaseStructure.TIM_Prescaler = 7199;     //设置预分频:72MHz/7200
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频。
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
 TIM_ClearFlag(TIM2,TIM_FLAG_Update);

//清除定时器中断标志
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//使能中断
 TIM_Cmd(TIM3,ENABLE);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;     //配置为PWM模式1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;    //设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平

  TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //使能通道1
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能预装载寄存器
  TIM_ARRPreloadConfig(TIM3, ENABLE);    // 使能TIM3重载寄存器ARR
  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                   //使能定时器3 
}

/*
 * 函数名:TIM3_PWM_Init
 * 描述  :TIM3 占空比连续变化输出PWM波
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用
 */

void NVIC_Config(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//选择TIM3中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能
 NVIC_Init(&NVIC_InitStructure);
}


/*
 * 函数名:TIM3_PWM_Init
 * 描述  :TIM3 输出PWM信号初始化
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用
 */
void TIM3_PWM_Init(void)
{
 TIM3_GPIO_Config();
 TIM3_Mode_Config(); 
}

 

 

/******************* (C) COPYRIGHT 2012 *****END OF FILE************/


 /**********pwm_output.h头文件****************/

#ifndef __PWM_OUTPUT_H
#define __PWM_OUTPUT_H

#include "stm32f10x.h"

void TIM3_PWM_Init(void);
void NVIC_Config(void);

#endif /* __PWM_OUTPUT_H */


 


/**************中断函数***************/

void TIM3_IRQHandler(void)

 if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)


 /*m--;
 if(m==0)//持续pwm波形输出1s
 {
  TIM_SetCompare1(TIM3,i++);
  m=50;
 }
 if(i==20) 1000us-2000us
  i=10;  */
 TIM_SetCompare1(TIM3,i++);
 if(i==200)
  i=0;
 TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);//必须清除中断标志位否则一直中断
}

}


 

 

PWM连续可调.zip

307.66 KB, 下载次数: 1137

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

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-8-13 08:25:10 | 显示全部楼层
PWM无需使用中断,定时器自带PWM功能。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-13 09:44:36 | 显示全部楼层
回复【2楼】Tardis:
---------------------------------
改变占空比
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-8-13 12:49:22 | 显示全部楼层
谢谢分享,STM32一个定时器能产生4路PWM可调脉冲,一共4个通用定时器。。。高级定时器可产生7路,一个2个。
我已经做了一个6自由度的机械手了。
一直努力就很好。
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-14 12:14:13 | 显示全部楼层
回复【4楼】qq942266575:
---------------------------------
用力那些材料、?
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-8-14 12:36:40 | 显示全部楼层
虾米??
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-14 21:22:22 | 显示全部楼层
回复【6楼】qq942266575:
---------------------------------
用了什么材料做机械手
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-8-16 08:28:45 | 显示全部楼层
回复【3楼】Orange:
---------------------------------
是的
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-16 19:34:20 | 显示全部楼层
为什么很多的TIM产生PWM不需要产生中断,你这里为什么又可以用中断。(本人新手,求大神教)
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-16 20:29:49 | 显示全部楼层
回复【9楼】海_海行者:
---------------------------------
中断改变占空比
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-8-13
在线时间
0 小时
发表于 2013-8-17 12:26:29 | 显示全部楼层
回复【楼主位】Orange:
---------------------------------
你也参加电设?
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-17 15:22:47 | 显示全部楼层
回复【11楼】bjyddx:
---------------------------------
参加~
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2013-8-19 00:47:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-19 01:42:32 | 显示全部楼层
回复【13楼】qq371833846:
---------------------------------
DMA怎么做、??
回复 支持 反对

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-8-13
在线时间
0 小时
发表于 2013-8-19 18:59:17 | 显示全部楼层
回复【12楼】Orange:
---------------------------------
求联系方式 一起讨论讨论呗 我是个学渣
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2013-8-19 20:35:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-19 22:12:33 | 显示全部楼层
回复【15楼】bjyddx:
---------------------------------
QQ466175335
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2013-8-5
在线时间
0 小时
 楼主| 发表于 2013-8-29 00:43:45 | 显示全部楼层
。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2013-12-20
在线时间
8 小时
发表于 2015-8-17 16:42:33 | 显示全部楼层
回复【4楼】qq942266575:
---------------------------------
老师,用STM32做六自由度机械手的资料可以分享给我学习一下吗?1752219598@qq.com
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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