搜索
bottom↓
回复: 5
打印 上一主题 下一主题

PWM占空比更新的问题

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2021-5-22 09:29:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


1,我现在的应用是这样的,我需要一个定频62.5K,
2,根据函数输入的值,输出一个对应的占空比不同的8位连续脉冲
3,但是实际输出的8个脉冲有时占空比没有按正常输出,
4,我在想可能的主要问题是更新占空比的时间选择的不正确认,也就是当上一个占空比没有更新完成后,又去更新其它值了,
5,我的问题是,当我更新占空比后,如何知道占空比已经更新完成了呢,当知道更新完成后,再重新更新其它值就不会出现占空更新不正确的情况 了吧



PR2=255;  
T2CON=0b00000100;//1000/((255+1)*4*(1/64)*1))=62.5K   最大脉冲宽度 4*(255+1)=1024
CCP2CON=0b00001100;

void Send_2812(unsigned char data)
{  
     unsigned char i=0;
     for(i=0;i<8;i++)
     {
      if(data&0x80) CCPR2L=12;else CCPR2L=7;
      CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT(); //等占空比更新完成
      data=data<<1;
     }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

2
发表于 2021-5-22 11:39:05 | 只看该作者
你可以试试在TMR2中断中更新,每个PWM周期其实就是TMR2的一个完整循环

出0入0汤圆

3
 楼主| 发表于 2021-5-24 16:29:17 | 只看该作者
谢谢二楼大哥哥
判定DUTY更新带完成,
while(!TMR2IF)CLRWDT();TMR2IF=0;

出0入0汤圆

4
发表于 2021-5-27 05:15:26 来自手机 | 只看该作者
pwm更新是靠自动重装,任何时候发重装值都是在当前pwm结束后重装

出0入0汤圆

5
 楼主| 发表于 2021-5-27 08:30:03 | 只看该作者
老大,如何才能知道上一次PWM已经更新完成了呢,

出0入0汤圆

6
发表于 2021-5-28 10:42:01 | 只看该作者
PWM带缓存寄存器的会周期结束才更新,没带的看能不能使能周期结束中断,在中断里更新
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 07:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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