OpenEdv-开源电子网

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

求助!!!,关于PWM输出频率以及占空比的设置

[复制链接]

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
发表于 2020-7-22 16:46:00 | 显示全部楼层 |阅读模式
10金钱
新手上路!!!
我需要的是将2KHZ,占空比为20%的PWM波通过串口在上位机中显示,
我的计算方式是:
频率=72MHZ/(arr+1)*(psc+1);            
占空比=CCR1/(arr+1);
下面是我的main.c代码.
输出结果为:
497us
2012HZ
想问一下大家我的问题在哪???
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "timer.h"
  5. #include "usart.h"

  6. extern u8  TIM2CH1_CAPTURE_STA;                //输入捕获状态                                                   
  7. extern u16        TIM2CH1_CAPTURE_VAL;        //输入捕获值
  8. int main(void)
  9. {         
  10.         u32 temp=0;
  11.   u32 Frequency=0;
  12.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  13.         delay_init();                                                     //延时函数初始化       
  14.         uart_init(9600);                                               //9600         
  15.         LED_Init();                                                    //初始化与LED连接的硬件接口
  16.         TIM1_PWM_Init(499,71);                               //分频。arr=499;psc=71;
  17.         TIM2_Cap_Init(0XFFFF,72-1);                       //以1Mhz的频率计数
  18.            while(1)
  19.         {
  20.                 delay_ms(10);
  21.                 TIM_SetCompare1(TIM1,100);                                       //ccr1=100
  22.                 if(TIM_GetCapture1(TIM1)==300)TIM_SetCompare1(TIM1,0);                 
  23.                 if(TIM2CH1_CAPTURE_STA&0X80)                                //成功捕获到了一个完整的PWM波
  24.                 {
  25.                   
  26.                         temp=TIM2CH1_CAPTURE_STA&0X3F;
  27.                         temp*=65536;                                                           //溢出时间总和
  28.                         temp+=TIM2CH1_CAPTURE_VAL;
  29.       Frequency=1.0/temp*1000000;                               
  30.                         printf("PWM波周期为:%d us\r\n",temp);                      //打印总周期
  31.                         printf("PWM波频率为:%d HZ\r\n",Frequency);              //打印总频率
  32.                         TIM2CH1_CAPTURE_STA=0;                                       //开启下一次捕获
  33.                 }
  34.         }
  35. }
复制代码

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2020-7-23 02:15:44 | 显示全部楼层
你用什么测试的?示波器么?示波器测量频率有一定误差,2Khz应该是准确的才对。
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-7-23 08:11:24 | 显示全部楼层
正点原子 发表于 2020-7-23 02:15
你用什么测试的?示波器么?示波器测量频率有一定误差,2Khz应该是准确的才对。

我就是用mini板的捕获实验改的
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-7-23 08:13:16 | 显示全部楼层
正点原子 发表于 2020-7-23 02:15
你用什么测试的?示波器么?示波器测量频率有一定误差,2Khz应该是准确的才对。

利用TIM2_CH1来做输入捕获,我们将捕获PA0上的高电平脉宽,并将脉宽时间通过串口打印出来,同时,本实验将保留上一个实验的PWM输出,大家可以通过杜邦线连接PA0和PA8,来观
测PWM输出。
回复

使用道具 举报

0

主题

15

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-15
在线时间
7 小时
发表于 2020-7-23 09:32:19 | 显示全部楼层
帮顶!!
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-7-23 16:17:53 | 显示全部楼层
别凉了啊
回复

使用道具 举报

34

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
912
金钱
912
注册时间
2019-7-5
在线时间
189 小时
发表于 2020-7-23 16:23:30 | 显示全部楼层

你是串口打印出来的频率和周期不对,还是示波器输出的PWM波形不对?
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-7-23 16:29:28 | 显示全部楼层
liaohaijian 发表于 2020-7-23 16:23
你是串口打印出来的频率和周期不对,还是示波器输出的PWM波形不对?

我是通过串口来检测PWM波是否正确输出
回复

使用道具 举报

34

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
912
金钱
912
注册时间
2019-7-5
在线时间
189 小时
发表于 2020-7-23 16:53:18 | 显示全部楼层
ruiii 发表于 2020-7-23 16:29
我是通过串口来检测PWM波是否正确输出

看看定时器的引脚配置有没有正确,有没有选错引脚,大概率是定时器初始化没搞好。
回复

使用道具 举报

5

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2020-5-11
在线时间
42 小时
 楼主| 发表于 2020-7-23 17:40:35 | 显示全部楼层
liaohaijian 发表于 2020-7-23 16:53
看看定时器的引脚配置有没有正确,有没有选错引脚,大概率是定时器初始化没搞好。

定时器的初始化就是用的正点原子的,没有改动
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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