找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请教用大循环发送PWM,慢一点原因

查看数: 2478 | 评论数: 9 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-2-28 10:11

正文摘要:

本帖最后由 happy2058 于 2022-2-28 10:16 编辑 请教一下,下面写法,大循环跑不动原因    用定时器反转一个标志位,大循环判断发送。8H1K08   24M     开了串口1串口2 ...

回复

ID:401564 发表于 2022-2-28 22:35
happy2058 发表于 2022-2-28 22:08
A板就输出两路PWM 2K的 占空比10%可调,用一个定时器,尽量不要过多的操作,后期方便移值,因为后期一个 ...

2KHZ的%10就是50uS,那就是说最坏的情况就是两次中断的间隔是50uS,整体就是每500uS进入定时器中断两次,如果定时器中断做的事情太多了,主函数就会慢下来了
进入定时器中断尽可能的不要处理太多东西,但凡是能在主函数处理的,就不要在中断中处理
定时器优先等级设定为最高,这样就保证PWM占空比的稳定
串口的波特率要尽量的设定低一点,这样就不会丢数据
个人感觉,如果量不大的话,就换成STC8G1K08的,这个有片上PWM,能省事很多,价格也就高了那么一两毛的而已
ID:734017 发表于 2022-2-28 22:08
Y_G_G 发表于 2022-2-28 20:43
如果不是商业机密,就把完整的代码上传
如果是不方便,你至少是要说明,现在要做什么,一共要做几个任务,或 ...

A板就输出两路PWM 2K的 占空比10%可调,用一个定时器,尽量不要过多的操作,后期方便移值,因为后期一个定时器要干几个功能。
ID:401564 发表于 2022-2-28 20:43
happy2058 发表于 2022-2-28 20:21
谢谢这位大哥,这个你之前已经教过我了,再次感谢。现在是一个定时器处理多个任务。

如果不是商业机密,就把完整的代码上传
如果是不方便,你至少是要说明,现在要做什么,一共要做几个任务,或者是要给个电路图看一下是怎么一回事
不然的话,大多的网友其实是不知道你要做什么的
ID:734017 发表于 2022-2-28 20:21
Y_G_G 发表于 2022-2-28 19:09
1,你要设定要好各个中断的优先等级,100uS的定时器中断时间是很短的,你要根据你自己的实际要求来设定好优先 ...

谢谢这位大哥,这个你之前已经教过我了,再次感谢。现在是一个定时器处理多个任务。
ID:401564 发表于 2022-2-28 19:09
1,你要设定要好各个中断的优先等级,100uS的定时器中断时间是很短的,你要根据你自己的实际要求来设定好优先等级,默认的等级都是一样的,但查询是有先后顺序的,当定时器进入中断之后,串口中断就被阻断了
2,更改PWM占空比在主函数更改,定时器只作一个加载的,调节会慢一点,但不会有太大影响的,给个代码参考一下

void timer1_pwm()interrupt 3                        //利用t1定时器产生PWM波形
{       
        TF1 = 0;                                                        //清除TF1标志
                        if(HI)
                        {
                                TH1=pwm_l_H; //低电平时间
                                TL1=pwm_l_L; //
                                HI=0;
                                PWM=0;
                        }
                           else
                        {
                                TH1=pwm_h_H;                 //高电平时间
                                TL1=pwm_h_L;                 //
                                HI=1;
                                PWM=1;
                        }
        TR1 = 1;                        //定时器1开始计时                                                                
}
在主函数调节pwm_l_H和pwm_l_L这两个全局变量就可以了
ID:8222 发表于 2022-2-28 16:47
为什么不是发送控制参数,让从机按参数要求产生PWM?
ID:734017 发表于 2022-2-28 16:26
yzwzfyz 发表于 2022-2-28 14:32
提示:
1、PWM的基础时钟取自何处?(假设来自于事件A。)
2、A事件在其它中断发生时,会不会受到影响?( ...

是啊,我试了好久,发现不能这写设到T0最高级  TO做100us标志位反转,时间基准
事件A 在while(1)判断标志位,自加,反转输出,反转标志位,为下一次TO中断判断。

输出不一至的原因,可能是事件A 在while(1)顺序,他不是中断后马上判断,造成延迟了。
ID:123289 发表于 2022-2-28 14:32
提示:
1、PWM的基础时钟取自何处?(假设来自于事件A。)
2、A事件在其它中断发生时,会不会受到影响?(其它中断更高级,会打断A!)

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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