5028|8

38

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

怎么PIC16F1827打开PWM功能在RA3上输出 [复制链接]

下面的代码能开启PWM吗?我试了好像不行

void initPWM()
{
INTCON = 0x00; //关闭总中断和外部中断
TRISA=0xFF;  //ADD BY CHEN
PR2 = 0xff;  //写入PR2寄存器设置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
CCP1CON = 0x3C;  //设置PWM占空比低2位为11,设置为PWM模式
CCPR1L = 0x00; //设置PWM占空比高8位
// TRISC = 0xfb;  //设置CCP1口为输出
// T2CON = 0x02;  //设置TMR2预分频为16;
        T2CON = 0x06;  //ADD BY CHEN 设置TMR2预分频为16并且打开TIMER2;
        TRISA=0;  //ADD BY CHEN
}

是否PWM功能要开中断?

最新回复

我在这个帖子里说了的: https://bbs.eeworld.com.cn/forum. ... 1&page=1#pid2104066 重点是: 这种输出频率不是采用PWM输出的,而是用数控振荡器或调节芯片的振荡频率来完成的. 当然,如果有PWM模块,应该设置其为合适的输出频率(例如2MHz)的方波输出,通过调节芯片的主振荡频率来完成从1.5~2.5MHz调节的.  详情 回复 发表于 2016-12-16 15:09
点赞 关注
 

回复
举报

419

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
可以不开中断
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我现在还是没正常开启PWM?帮忙看哪里出问题了?!
非常感谢

点评

你的雾化输出频率,个人认为,采用PWM输出是不合适的(我也试过,包括其它开发人员测试不行,才将这个项目要我帮忙的) 主要是频率的分辨率不够,PWM能做到从1.8~2.4M的50K~200KH步进调节吗? 否则极不容易找到最佳的中  详情 回复 发表于 2016-12-16 14:52
 
 
 

回复

638

帖子

2

TA的资源

版主

4
 
本帖最后由 dingzy_2002 于 2016-12-16 14:55 编辑
and01 发表于 2016-12-16 13:54
我现在还是没正常开启PWM?帮忙看哪里出问题了?!
非常感谢

你的雾化输出频率,个人认为,采用PWM调节频率输出是不合适的(我也试过,包括其它开发人员测试不行,才将这个项目要我帮忙的,不过,要用PWM模块来作为固定脉宽的输出配置)
主要是频率的分辨率不够,PWM能做到从1.8~2.4M的50K~200KH步进调节吗?
否则极不容易找到最佳的中心谐振频率.

点评

请版主帮忙建议用什么方法比较合适,我看到之前我的样机上是用一个芯片输出的方波来控制的?非常感谢  详情 回复 发表于 2016-12-16 15:05
 
 
 

回复

638

帖子

2

TA的资源

版主

5
 
请按数据手册要求进行程序设置:
以下文字摘录处1827的数据手册中PWM设置部分:
24.3.2 设置 PWM 工作模式
当配置CCP模块使之工作于标准PWM模式时应遵循以
下步骤:
1. 通过将相应的 TRIS 位置 1 禁止 CCPx 引脚输出
驱动器。
2. 将 PWM 周期值装入 PRx 寄存器。
3. 通过将合适的值装入 CCPxCON 寄存器来配置
CCP 模块使之工作于 PWM 模式。
4. 将 PWM 占空比值装入 CCPRxL 寄存器和
CCPxCON 寄存器的 DCxBx 位。
5. 配置并启动 Timer2/4/6:
• 通过设置 CCPTMRS 寄存器中的
CxTSEL<1:0> 位,选择用于生成 PWM 的
Timer2/4/6 资源。
• 清零 PIRx 寄存器的 TMRxIF 中断标志位。
请参见下面的 “注”。
• 使用定时器预分频值配置 TxCON 寄存器的
TxCKPS 位。
• 通过将 TxCON 寄存器的 TMRxON 位置 1
来使能定时器。
6. 使能 PWM 输出引脚:
• 等待定时器溢出并且 PIRx 寄存器的 TMRxIF
位置 1。请参见下面的 “注”。
• 通过将相应的 TRIS 位清零使能 CCPx 引脚输
出驱动器。
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

6
 
dingzy_2002 发表于 2016-12-16 14:52
你的雾化输出频率,个人认为,采用PWM调节频率输出是不合适的(我也试过,包括其它开发人员测试不行,才将这个 ...

请版主帮忙建议用什么方法比较合适,我看到之前我的样机上是用一个芯片输出的方波来控制的?非常感谢

点评

我在这个帖子里说了的: https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=508711&page=1#pid2104066 重点是: 这种输出频率不是采用PWM输出的,而是用数控振荡器或调节芯片的振荡频率来完成的. 当然,如果  详情 回复 发表于 2016-12-16 15:09
 
 
 

回复

638

帖子

2

TA的资源

版主

7
 
and01 发表于 2016-12-16 15:05
请版主帮忙建议用什么方法比较合适,我看到之前我的样机上是用一个芯片输出的方波来控制的?非常感谢

我在这个帖子里说了的:
https://bbs.eeworld.com.cn/forum. ... 1&page=1#pid2104066
重点是:
这种输出频率不是采用PWM输出的,而是用数控振荡器或调节芯片的振荡频率来完成的.
当然,如果有PWM模块,应该设置其为合适的输出频率(例如2MHz)的方波输出,通过调节芯片的主振荡频率来完成从1.5~2.5MHz调节的.
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢大家的热情帮忙,我终于能启动PWM了!

改成这样就好了(其实已经启动只是高电平时间为“0”,所以一直输出低)
void initPWM()
{
INTCON = 0x00; //关闭总中断和外部中断
TRISA=0xFF;  //ADD BY CHEN
PR2 = 0;  //写入PR2寄存器设置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
CCP3CON = 0x2C;//CCP1CON = 0x3C;  //设置PWM占空比低2位为11,设置为PWM模式
CCPR3L = 0x00;//CCPR1L = 0xAA; //设置PWM占空比高8位
// TRISC = 0xfb;  //设置CCP1口为输出
// T2CON = 0x02;  //设置TMR2预分频为16;
        T4CON=0x04;
        T6CON=0x04;
        T2CON = 0x04;  //ADD BY CHEN 设置TMR2预分频为16并且打开TIMER2;
        TRISA=0;  //ADD BY CHEN
}
     

可是问题又来了我本来是使用32MHz的内部高频RC,是最高输出的PWM频率是2M?

感觉有点纳闷!按计算应该是8M才对!

主时钟是4分频来启动PWM,
PWM周期=[(PRX)+1]x4xTOSCx(TMRX预分频值)]

我当前已经让PR2=0 / TMRX预分频值=1了,可是好象是16分频了

可是我的好象有两次4分频?没找到原因?
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

9
 
单周期语句是不是按FOSC/4跑的?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表