完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
手边单片机只有一个向上计数的8位重装定时器,工作频率8MHz,我想输出一个40Khz的占空比可调的PWM信号,占空比可以从1-100%连续可调,调节步长1%。请大家指点一下如何编写,下面是我的定时器中断程序,Phase_data是控制占空比的变量,如果要想做到40K,则PWM周期要25us,做到100阶调整则定时器要0.25us中断一次了,中断程序无法实现,所以咨询一下要如何更改
void ISR_PWM(void) // 定时器中断程序 { if(Switch_Flag==1) { if (Phase_Counter<=Phase_data) { LED=1 ; } else { LED=0; } if (Phase_Counter>=100) { Phase_Counter=0; } Phase_Counter++; } } |
|
相关推荐
10个回答
|
|
顶一下,别沉了~~~~~~~~~~~~~·
|
|
|
|
|
|
|
|
用有WPM模块的芯片做
如STC15W系列 void STC15W_PWM_Init() { P_SW2 |= 0x80; //使能访问XSFR PWMCFG = 0x00; //配置PWM的输出初始电平为低电平 PWMCKS = 0x00; //选择PWM的时钟为Fosc/(0+1) PWMC = CYCLE; //设置PWM周期 1-32767 即频率 PWM5T1 = 1; //设置PWM5第1次反转的PWM计数 PWM5T2 =240; //设置PWM5第2次反转的PWM计数 占空比为(PWM2T2-PWM2T1)/PWMC PWM5CR = 0x06; //选择PWM5输出到P2.3,PWM5的T1匹配发生波形翻转时开启中断控 PWMCR = 0xc0; //使能PWM信号输出 使能PWM5模块 EA = 1; P_SW2 &= ~0x80; } void PWM_isr() interrupt 22 using 1 { PWMIF = 0x00; P_SW2 |= 0x80; PWM5T2 = ;//中断改变此处的值就改变脉宽 P_SW2 &= ~0x80; } |
|
|
|
void PWM_isr() interrupt 22 using 1
{ PWMIF = 0x00; if(PWM25_1>PWM25) PWM25_1=PWM25_1-1; if(PWM25_1 P_SW2 |= 0x80; PWM5T2 = PWM25_1; P_SW2 &= ~0x80; } |
|
|
|
首先你可以计算一下,如果不分频的话,看看你的单片机速度能否跟的上,可以的话你这个0.25us 的步进值就需要严格赋值了,外面按键设置计时时间的加减,中断中只设置一个flag标志,取出时间值,然后翻转,程序尽可能短,不然等到下个中断到来,现在的中断就会被淹没
|
|
|
|
单片机的最高速度只有8Mhz,试了一下,因为没有PWM模块,使用定时器初值重装,占空比可调区间很小,暂时不考虑使用软件模拟了,选一个带PWM模块的单片机吧
|
|
|
|
中断速度太快,单片机基本都跑中断了,资源消耗太大
|
|
|
|
楼主好人
|
|
|
|
楼主这样想,单片机是8MHz的工作频率,也就是工作周期是0.125us,如果想实现40KHz的PWM波,就要确定单片机的单指令周期型还是多指令周期型。如果是单指令周期型,那么定时器计数一次就是0.125us,计满值最大时间就是32us,所以要实现0.25us的中断就没问题;但是如果是多指令周期型单片机,情况就不一样了,假如这个单片机是6指令周期的单片机,那么定时器计数一次就是0.75us,想要实现0.25us的中断就会有问题。
还有这个程序中Phase_Counter应该是控制占空比的变量,Phase_data应该是周期(这个值应该在全局给定值)。程序应该做如下修改: void ISR_PWM(void) // 定时器中断程序 { if(Switch_Flag==1) { if (Phase_Counter<=Phase_data) { LED=1 ; } else { LED=0; } if (Phase_Counter>=Phase_data) { Phase_Counter=0; } else { Phase_Counter++; } } } 如能够解决楼主的问题,还请采纳哟,祝楼主调试成功。 |
|
|
|
1406093611 发表于 2017-11-20 13:54 回复晚了,我是4周期指令的单片机,这个感觉中断速度太快了,占用资源太多,已经放弃使用中断来做了,寻了一个自带PWM模块的单片机,问题已经解决了,依然谢谢啦 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11790 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 18:18 , Processed in 0.695960 second(s), Total 61, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号