OpenEdv-开源电子网

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

STC8G1K08A-8PIN如何PWM输出自己想要的频率呢?比如想输出120khz、121khz、125khz

[复制链接]

28

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2021-8-13
在线时间
43 小时
发表于 2022-7-4 10:33:47 | 显示全部楼层 |阅读模式
5金钱
STC8G1K08A-8PIN如何PWM输出自己想要的频率呢?比如想输出120khz、121khz、125khz

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

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-7-4 10:36:30 | 显示全部楼层
专治疑难杂症
回复

使用道具 举报

28

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2021-8-13
在线时间
43 小时
 楼主| 发表于 2022-7-4 11:56:51 | 显示全部楼层

用这个输出了想要的频率  但是这个是不是没法改占空比啊  我用PCA输出PWM能修改占空比但是没法输出自己想要的频率
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-7-4 13:35:35 | 显示全部楼层
YXB190728 发表于 2022-7-4 11:56
用这个输出了想要的频率  但是这个是不是没法改占空比啊  我用PCA输出PWM能修改占空比但是没法输出自己想 ...

参考18.4.4的范例程序,在中断里改变匹配值即可得到需要的高电平宽度、低电平宽度。
专治疑难杂症
回复

使用道具 举报

28

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2021-8-13
在线时间
43 小时
 楼主| 发表于 2022-7-4 15:12:10 | 显示全部楼层
LcwSwust 发表于 2022-7-4 13:35
参考18.4.4的范例程序,在中断里改变匹配值即可得到需要的高电平宽度、低电平宽度。

我就是照着范例程序写的,能说下这个匹配值如何计算吗,比如占空比10% ,我不太会算。
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-7-4 15:30:34 | 显示全部楼层
YXB190728 发表于 2022-7-4 15:12
我就是照着范例程序写的,能说下这个匹配值如何计算吗,比如占空比10% ,我不太会算。

CMOD选择时钟源,CH、CL就会按这个时钟来计数,当它们与CCAP0H、CCAP0L相等时就发生匹配中断并使PCA脚翻转。时钟频率知道了,就知道了周期,周期乘以计数值不就是时间么。
简单说,你改下例程,根据引脚高低电平状态计算下次的匹配值(CCAP0H、CCAP0L)就行了;
例程中不是有一句“value += T38K4HZ;”,如果你把它改为这次“value += 10”,下次“value += 90”,那么占空比就变了。

专治疑难杂症
回复

使用道具 举报

28

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2021-8-13
在线时间
43 小时
 楼主| 发表于 2022-7-4 16:02:59 | 显示全部楼层
LcwSwust 发表于 2022-7-4 15:30
CMOD选择时钟源,CH、CL就会按这个时钟来计数,当它们与CCAP0H、CCAP0L相等时就发生匹配中断并使PCA脚翻 ...

我还是没太懂  可以用具体的数给我举例吗
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-7-4 16:27:01 | 显示全部楼层
YXB190728 发表于 2022-7-4 16:02
我还是没太懂  可以用具体的数给我举例吗

假如IRC频率为12MHz,CMOD的CPS位配置为“系统时钟 /12”,那么你的PCA计时频率为1MHz,周期为1us,
如果当前CH=0,CL=0,CCAP0H=0,CCAP0L=n;那么在n*1us后将会发生匹配。
专治疑难杂症
回复

使用道具 举报

28

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2021-8-13
在线时间
43 小时
 楼主| 发表于 2022-7-8 11:29:05 | 显示全部楼层
LcwSwust 发表于 2022-7-4 16:27
假如IRC频率为12MHz,CMOD的CPS位配置为“系统时钟 /12”,那么你的PCA计时频率为1MHz,周期为1us,
如 ...

这个是不是只能输出占空比50%,不管我改变什么值都只是改变了频率,而占空比没有发生变化,一直是50%
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2022-7-8 11:41:48 | 显示全部楼层
YXB190728 发表于 2022-7-8 11:29
这个是不是只能输出占空比50%,不管我改变什么值都只是改变了频率,而占空比没有发生变化,一直是50%

不是,需要程序控制每次匹配的值,去得到需要的高电平宽度、低电平宽度。
  1. void PCA_Isr() interrupt 7
  2. {
  3. static char s=0;
  4. CCF0 = 0;
  5. CCAP0L = value;
  6. CCAP0H = value >> 8;
  7. s=(s+1)&1;
  8. if(s==0)
  9. {
  10.   value += 100;
  11. }
  12. else
  13. {
  14.   value +=200;
  15. }
  16. }
复制代码
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 15:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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