《基于STC15F104W的互补PWM输出器》
1.所需器件:
 (1)单片机:STC15F104W。
 ①最小系统板链接:【淘宝】https://m.tb.cn/h.5WnLl9X?tk=qSGrdCWm0PW「STC15F104W STC15W204S单片机模块 系统板 核心板 学习板 开发板」点击链接直接打开 或者 淘宝搜索直接打开
 ②系统板:LED接P3.3,按键接P3.2
 
(2)微秒B转TTL调试线或者模块。
2.烧录方式:
 (1)板载TTL电平串口,RXD(连接至P3.0)及TXD(连接至P3.1),5V供电,GND接GND
 (2)使用STC系列烧录软件:软件在项目文件夹中
 
3.功能需求:
 (1)输出一对频率为20KHz,占空比为50%的互补PWM波
4.代码说明:
 (1)均在代码注释中
 (2)算法说明:
 周期(秒)= 1 / 频率(赫兹)
 周期(毫秒)= 周期(秒) * 1000
1.频率为20KHz,占空比为:50%
 20KHz对应的周期是0.00005秒 = 0.05毫秒,当占空比为50%的时候说明高低电平分别持续了0.025毫秒 = 25微秒。
 所以我们只需要让定时器每隔25微秒中断一次就行。
 
把以上红框这俩行复制粘贴到源代码中即可。

2.频率为15KHz,占空比为:50%
 15KHz对应的周期是0.00006667秒 =0.0667毫秒,当占空比为50%的时候说明高低电平分别持续了0.03335毫秒 ≈ 33微秒。
 所以我们只需要让定时器每隔33微秒中断一次就行。
 
把以上红框这俩行复制粘贴到源代码中即可。
 
3.频率为15KHz,占空比为:45%
 15KHz对应的周期是0.00006667秒 =0.0667毫秒
 当占空比为45%的时候说明:
 高电平持续了0.030015毫秒 ≈ 30微秒。
 低电平持续了0.036685毫秒 ≈ 36微秒。
 30与36的最大公约数为:6
 所以我们只需要让定时器每隔6微秒中断一次就行。
 用一个变量来记录进入中断的次数,一个中断就代表时间过去6微秒。
 在中断里判断:
 当计数值小于等与4(0~4是5个计数,56=30微秒),引脚拉高。
 当计数值大于4时,引脚拉低。
 当计数值大于10(总过是11个计数,116=66微秒),一个PWM周期已过,重新计数。
 
说明:
成品设计不易,详情关注闲鱼店铺:数字梦想家,查看评论区。
 