找回密码
 注册
关于网站域名变更的通知
查看: 386|回复: 4
打印 上一主题 下一主题

PWM输出不能控制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-14 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
各位大佬,请教下用一个定时器做PWM输出,按键控制时,如果定时器时间设5US初值(即200KHZ频率时),按键不能控制PWM停止输出,帮看看下面的程序这样设置有没问题?谢谢!. Y8 F  ^( N+ v0 H7 |% {4 [
" g1 R/ S4 ?' \) C

8 {7 ~, B% Y  Y; R$ s
  • #include<51.h>
  • #define uint unsigned int
  • #define uchar unsigned char
  • bit ti_flag=0,Led_new_flag=0,Pwm_off_on=0,time_10f_flag=0,P_IO_flag=0;time_20f_flag=0,NTC_ON_OFF_flag=0,Roie_flag;
  • volatile uint time_te_flag=0,count=0;Cont=0,j=0,s=0;
  • volatile uint T_PCA2,I_samp=0,I_vaue=0,Time_200us_flag=200;
  • volatile uint TIME_200ms_flag=0,TIME_ACC_flag=0; //LED闪所采集时间标志
  • volatile uchar num=0,Tim_1ms_flag=0;
  • volatile double ZKB;
  • sbit PM_out=P3^6;
  • /***********定时器0初始化***************/
  • void Init(void)
  • {
  •         AUXR|=0x80; //定时器时钟1T模式
  • TMOD|=0x00; //设置定时器模式
  • TL0=0xc4; //设置定时初值5US
  •         TH0=0xff; //设置定时初值
  • TF0=0; //清除TF0标志
  • ET0=1;
  •         EA=1;
  •         TR0=1;
  • /***************定时器0****************/
  • void timer0(void) interrupt 1
  • {
  • Time_200us_flag--;
  • if(Time_200us_flag==0) //1ms
  • {
  • Time_200us_flag=200;
  • ti_flag=1;
  • keyScan();  //按键扫描
  •   j++;
  •         }
  • if(Pwm_off_on)
  • {
  • num++;
  • if(num>=2)
  • num=0;
  • if(num<ZKB) //产生PWM
  • PM_out=1;
  • else
  • {
  • PM_out=0;
  •     }
  •    }
  • }
  • /*************按键扫描及处理***************/
  • void keyScan()
  • {
  • static bit key1_lock=0;
  • static uchar count1=0;
  •         if(0==key)
  •         {
  • if((count1++>=25)&&(key1_lock==0)&&(PINT==1))//延时滤波25ms
  •         {
  •         key1_lock=1;
  •         Pwm_off_on=~Pwm_off_on;
  •         if(Pwm_off_on==0)
  •         PM_out=0;
  •    }
  •         }
  • else
  • {
  •         key1_lock=0;//按键自锁标志清0
  • count1=0; //消抖计数清0
  • }
  • if(PINT==0)
  • {
  •         Power=0;
  •         }
  •         }
  • /***************主程序****************/
  • void main(void)
  • {
  • Init();
  • while(1);
  • }

  • : a! s7 H& f' }0 q3 p: h

/ v4 a' z4 ^+ m( M- c6 \6 F3 y% q7 Q% o( _5 }# j

& e7 M$ K: ^3 T8 ?' i! ]7 F: _3 r

该用户从未签到

2#
发表于 2020-4-14 18:36 | 只看该作者
一直在中断,检测不到按键操作

点评

因为如果把频率调到低于30KHZ,在控温时输出到发热芯那里会吱吱响  详情 回复 发表于 2020-4-14 19:56
除了降低频率(时间设大),有没其它办法?  详情 回复 发表于 2020-4-14 18:37

该用户从未签到

3#
 楼主| 发表于 2020-4-14 18:37 | 只看该作者
行者~ABC 发表于 2020-4-14 18:36
; O+ T0 d. i, l+ }一直在中断,检测不到按键操作
2 W  r* `- E. R  M8 @, q$ R
除了降低频率(时间设大),有没其它办法?
2 I* E# u) u" \2 E

点评

1.优化程序,很简单的PWM程序写的有点啰嗦。 2.提高MCU时钟频率,加快运行速度。 3.中断只留必须的任务,其它非即时响应的任务放在主函数运行。比如按键扫描。 4.中断周期按预估中断任务所需时间不小于200%,留足  详情 回复 发表于 2020-4-15 10:29

该用户从未签到

4#
 楼主| 发表于 2020-4-14 19:56 | 只看该作者
行者~ABC 发表于 2020-4-14 18:360 _" G0 y1 D. ~0 @" \( q; @
一直在中断,检测不到按键操作

; E' G. f4 [/ d6 m% K因为如果把频率调到低于30KHZ,在控温时输出到发热芯那里会吱吱响# o: N# r7 W5 H5 d+ x1 L5 a' ]

该用户从未签到

5#
发表于 2020-4-15 10:29 | 只看该作者
Quiescent_521 发表于 2020-4-14 18:37
  A. O% }3 Q: u3 [- ]) K2 J除了降低频率(时间设大),有没其它办法?
7 o; H, V8 h7 H6 K# ]
1.优化程序,很简单的PWM程序写的有点啰嗦。& Q9 c) ]" n7 H/ c7 ]
2.提高MCU时钟频率,加快运行速度。
1 X( L* U8 L4 O& f4 o0 s+ h* G& s- I3.中断只留必须的任务,其它非即时响应的任务放在主函数运行。比如按键扫描。3 f( t6 ~: w8 {; w
4.中断周期按预估中断任务所需时间不小于200%,留足够时间给主程序使用。  c( p6 s$ j4 H# [$ ^( }: E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-19 16:01 , Processed in 0.125000 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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