完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
做的PWM直流电机调速,我用定时器0定时产生PWM脉冲,定时器1计时50msTMOD = 0x11;
TH0 = 0x0FF; TL0 = 0x9C;//100us TH1=0x3C; TL1=0x0B0;//50ms EA = 1; ET0 = 1; TR0 = 1; ET1 = 1; TR1 = 1; 关了T1PWM波形正常,但是只要开了T1波形就不对了,像图中那样,中间会有一端高电平。外部中断1检测速度脉冲,这个没啥影响。求各位大佬这个怎么解决啊 void time_0()interrupt 1 { TR0=0; num++; if(num else ENA=0; if(num>100) num=1; TMOD = 0x01; TH0 = 0x0FF;//100us TR0=1; } void INT0_INTERRUPT()interrupt 0 { EX0=0; velocity++; EX0=1; } void time_1()interrupt 3 { TR1=0; count++; if(count==51) { sprintf(dsp,"%3d", velocity); display_string(7,4,dsp); ldelay(100); count=1; velocity=0; } TH1=0x3c; TL1=0x0b0; TR1=1; }
|
|
相关推荐
6个回答
|
|
没太看出来什么问题,需要确定几个问题,pwm持续高电平时,单片机有没有其他动作出现,比如显示什么的,另外在定时器0里更改了tmod的值,并只更新了th0的值。再试试设置中断优先级,虽然有缺省值,但现在在解决问题,就把需要明确的值都明确了
最佳答案
|
|
|
|
试试设置定时器0的中断优先级高于定时器1
|
|
|
|
|
|
|
|
人中狼 发表于 2017-4-6 10:54 定时器0里更改了tmod的值,并只更新了th0的值,属于手误,应该th0th1都更新,谢谢提醒;然后我似乎找到了持续高电平的原因,T1中断函数里有个延时函数看到了吧,我把它去掉就正常了,反正目前看是挺正常。我一会儿在设置下优先级试试,只求更稳定。我再鼓捣一会儿,看看会还有什么问题。另外谢谢大佬的关注! |
|
|
|
人中狼 发表于 2017-4-6 10:54 后来又出现了冲突问题,貌似是和外部中断0的,我把T0优先级设置最高,问题果然解决了,谢谢 |
|
|
|
设置优先级排序并不代表中断冲突不存在,只是区分轻重缓急,能用一个中断处理的任务就不要开两个中断。你的两个定时中断的时间有倍数关系,只要添加一个计数变量就可以合用一个定时中断。中断里通常只产生标识,不处理任务,更不能有长延时,叫做打一枪就跑,任务放在主循环里处理。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11976 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 07:33 , Processed in 0.562516 second(s), Total 53, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号