OpenEdv-开源电子网

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

用单片机改变PWM占空比来控制LED灯渐熄渐灭

[复制链接]

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
发表于 2020-5-7 10:41:15 | 显示全部楼层 |阅读模式
程序部分int main(void)
{
  uint8_t        ch;
        int PWMvalue=0,FLag=1;
        init();
        Delay(20);
        //printf("EXTI_Line15");
        while(1)
  {
                if(FLag)
                 PWMvalue++;
                else
                 PWMvalue--;
   if(PWMvalue==200)
    FLag=0;
         if(PWMvalue==0)
                  FLag=1;
    TIM_SetCompare1(TIM3,PWMvalue);
  }
}

void init()
{
        EXTI15_Config();
        EXTI12_Config();
  Key_Config();
  UART1_Config();
  PWM_Config();
        LED_Config();
}

void PWM_Config(void)
{  
         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
         TIM_OCInitTypeDef TIM_OCInitStructure;
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟
  /***********设置TIM3的ARR和PSC**************/
   TIM_TimeBaseStructure.TIM_Period = 899;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值
   TIM_TimeBaseStructure.TIM_Prescaler = 0;//时钟频率的预分频值
   TIM_TimeBaseStructure.TIM_ClockDivision = 0x00;//时钟分割
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//设置为向上计数模式
   TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);

        /***********设置TIM3_CH3的PWM模式及通道方向,使能TIM3的CH3输出 **************/
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0;//设置待装入捕获比较寄存器的脉冲值
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
  TIM_OC3Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC3
        //TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH3 预装载使能
        TIM_ARRPreloadConfig(TIM3, ENABLE); //使能 TIM3 在 ARR 上的预装载寄存器
        TIM_Cmd(TIM3, ENABLE); //使能 TIM3
        //TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE );
}

void LED_Config(void)
{  
         GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE);

  /************配置PA.0为PWM输出***************/
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选PA.0为输出引脚
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//引脚速率
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设PA.O为复用推免输出
   GPIO_Init(GPIOA, &GPIO_InitStructure);

         /************配置PB.0为PWM输出***************/
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选PB.0为输出引脚
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//引脚速率
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设PB.O为复用推免输出
   GPIO_Init(GPIOB, &GPIO_InitStructure);
         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3复用功能部分映射
}硬件部分



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

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-27
在线时间
0 小时
发表于 2020-5-7 10:41:15 | 显示全部楼层
虽然解答不了,但还是帮顶,默默的走过
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-7 10:41:50 | 显示全部楼层
为什么不行啊  LED没得反应
回复 支持 反对

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3627
金钱
3627
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-5-7 18:28:47 | 显示全部楼层
参考一下这个

实验9 PWM输出实验.rar

2.31 MB, 下载次数: 15

回复 支持 反对

使用道具 举报

7

主题

105

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2016-1-28
在线时间
135 小时
发表于 2020-5-8 13:14:36 | 显示全部楼层
我想问的是楼主用的什么硬件连接?确定LED0和LED1连接在PA0 PB0上面了么?我看你PA0不在TIMER3上,PB0在TIME3 CH3上面。另外你设置完TIM_SetCompare1(TIM3,PWMvalue);后面加个300ms的延时再看看。
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-8 19:18:48 | 显示全部楼层
我用的是stm32f103c8t6这个单片机, PA.0没用  用的PB.0的复用功能是TIM3,CH3 还有就是
TIM_SetCompare1(TIM3,PWMvalue)这个函数我用的CH3用TIM_SetCompare1用这个”1”也可以吗
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-8 19:19:58 | 显示全部楼层
我想问下 那种直插式的发光二极管可以做这个实验吗
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-8 19:25:25 | 显示全部楼层
还有我这个没开中断  也没有写中断服务程序  可以吗
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-8 19:31:28 | 显示全部楼层
qjp1988113 发表于 2020-5-8 13:14
我想问的是楼主用的什么硬件连接?确定LED0和LED1连接在PA0 PB0上面了么?我看你PA0不在TIMER3上,PB0在TIM ...

我用的是stm32f103c8t6这个单片机, PA.0没用  用的PB.0的复用功能是TIM3,CH3 还有就是
TIM_SetCompare1(TIM3,PWMvalue)这个函数我用的CH3用TIM_SetCompare1用这个”1”也可以吗  我没有用中断有影响吗   还有就是我用的直插式的发光二极管这个可以吗
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2020-5-9 12:01:24 | 显示全部楼层
你要控制一个周期性的变化   你这一下就能加到200或者减到0  可以用定时器定时个10ms   每10ms加1或者减1 就可以了
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-9 14:14:55 | 显示全部楼层
程功之道 发表于 2020-5-9 12:01
你要控制一个周期性的变化   你这一下就能加到200或者减到0  可以用定时器定时个10ms   每10ms加1或者减1  ...

还是不行 TIM3 CH3的 PB.0引脚电压无变化 一直都是3.3v  LED灯能亮  亮得很暗 亮度没有变化
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4910
金钱
4910
注册时间
2017-7-6
在线时间
720 小时
发表于 2020-5-9 17:06:38 | 显示全部楼层
初级工程师 发表于 2020-5-9 14:14
还是不行 TIM3 CH3的 PB.0引脚电压无变化 一直都是3.3v  LED灯能亮  亮得很暗 亮度没有变化

还是没控制好   你这是分200份    灯灭到亮 小周期10ms   每10ms加大占空比  1、2、3、4。。。。。200  大的周期就是200*10ms = 2s   这2s会有变化的
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-9 18:25:53 | 显示全部楼层
程功之道 发表于 2020-5-9 17:06
还是没控制好   你这是分200份    灯灭到亮 小周期10ms   每10ms加大占空比  1、2、3、4。。。。。200   ...

我用的是直插式的LED灯 可能是功率不够 驱动不了
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-3-27
在线时间
36 小时
 楼主| 发表于 2020-5-11 09:24:00 | 显示全部楼层
PWM硬件电路怎么实现
回复 支持 反对

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2020-5-11 09:48:01 | 显示全部楼层
本帖最后由 y284858 于 2020-5-11 09:52 编辑

你把TIM_TimeBaseStructure.TIM_Period 设置成200,TIM_SetCompare1(TIM3,PWMvalue);设置后延时几个毫秒试试
回复 支持 反对

使用道具 举报

7

主题

105

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2016-1-28
在线时间
135 小时
发表于 2020-5-11 09:50:04 | 显示全部楼层
初级工程师 发表于 2020-5-8 19:31
我用的是stm32f103c8t6这个单片机, PA.0没用  用的PB.0的复用功能是TIM3,CH3 还有就是
TIM_SetCompare1 ...

不可以,你是CH3怎么能用TIM_SetCompare1呢,改成3
回复 支持 反对

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2020-5-11 09:54:24 | 显示全部楼层
qjp1988113 发表于 2020-5-11 09:50
不可以,你是CH3怎么能用TIM_SetCompare1呢,改成3

对对对,通道3不能用通道一的设置函数
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-3-7
在线时间
3 小时
发表于 2020-5-23 20:06:36 | 显示全部楼层

感谢分享!看看学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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