完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个程序是实验PWM功能的,输入就是一个RA0的模拟量输入,通过电位器可调节,来改变输出的波形的占空比。RC2输出。这也是书本上的一个例子,但是按照例子的上面写得,最终还是有问题,但是确实找不出问题出在哪里了,麻烦各位高手看看,最好能试着运行下,我出现的问题是,随着电位器的调节输入变大,然后输出的波形占空比变大,但是到某个点之后占空比有变得很小,然后再慢慢变大。很奇怪,用MPLAB仿真的时候发现数据也有问题,但是不知道问题在哪里怎么改正,希望大家能帮忙看看,指点指点,谢谢,下面是程序
/* Main.c file generated by New Project wizard * * Created: 星期四 一月 23 2014 * Processor: PIC16F877A * Compiler: HI-TECH C for PIC10/12/16 */ #include #define u8 unsigned char #define u16 unsigned int __CONFIG(DEBUGEN&HS); u16 adresult=0,adx,ontime,x; void init_adc() { TRISA0=1; //A0作为模拟信号输入// ADCS2=0; ADCON0=0b01000001; //AD频率1/8F,模拟通道选择A0,开启AD电源/ ADCON1=0b10000010; //结果右对齐,V+V-为参考电压,A0为模拟输入口// // ADGO=1; // while(ADGO); //开启AD转换并且,等待转换结束// // adresult=(int)((ADRESH<<8)+ADRESL); } void init_pwm() { TRISC2=0; //RC2/CCP1配置为PWM输出// CCP1M3=CCP1M2=1; //CCP1配置为PWM模式// //根据PWM period=2500us={[(PR2)+1]*4*Tosc*TMR2预分频值},先求出TMR2预分频值,和PR2// //TMR2是8位的,所以PR2+1最大值位256,Tosc为振荡周期4M晶振是0.25us,所以TMR2最小分频比是// //K>2500/(256*4*0.25)=9.765,然而在分频比1,4,16中只能取16,// T2CKPS1=1; //TMR2ON=1; PR2=155; //设置PWM占空比 PWM duty cycle 通过写 CCPR1L 和 CCP1CON<5,4>// TMR2ON=1; } void delay(u8 x) { u8 i,j; for(i=x;i>0;i--) for(j=71;j>0;j--); } void main(void) { TRISD=0x00; TRISC=0x00; init_adc(); delay(10); init_pwm(); while(1) { adx=adresult; ADGO=1; while(ADGO); //开启AD转换并且,等待转换结束// adresult=(int)((ADRESH<<8)+ADRESL); if(adresult!=adx) { ontime=2500UL*adresult/1023; //ontime=x*Tosc*K=x*1us*16// //x=ontime/16 ,x为定时设定值// x=ontime/16; CCPR1L=(u8)x>>2; CCP1X=(bit)(x>>1);//取倒数第二位// CCP1Y=(bit)x; //取最低位// } } } |
|
相关推荐
|
|
占空比尽量不大于PR2*4,我自己总结的,不知道对不对。
adresult=(int)((ADRESH<<8)+ADRESL);这样写可能会导致数字溢出,也是我自己总结的,不知道对不对,至少我这样做的时候不行。 可以先adresult=ADRESH; adresult=((adresult<<8)+ADRESL); 这样肯定是没有问题的。 |
|
|
|
|
|
占空比尽量不大于PR2*4,这句话怎么理解?设置PR2的值不就是设置周期的吗?占空比也没必要大于一个周期的啊?还有一点我有点疑问,PWM Period = [(PR2) + 1] *4 *Tosc*(TMR2 Prescale Value)
PWM Duty Cycle =(CCPR1L:CCP1CON<5:4>) *TOSC *(TMR2 Prescale Value)这是说明书里的 问题是为什么占空比的计算PWM Duty Cycle里面Tosc不需要乘以4? |
|
|
|
|
|
753012849 发表于 2014-1-27 17:48 那是脉冲宽度 |
|
|
|
|
|
因为本人是新手,麻烦你能跟我说下设计思路是怎样的,周期是随便设的吗,占空比为AD转化值除以4*(PR2+1),如果AD转化值大于分子呢,谢谢
|
|
|
|
|
|
因为本人是新手,麻烦你能跟我说下设计思路是怎样的,周期是随便设的吗,占空比为AD转化值除以4*(PR2+1),如果AD转化值大于分子呢,谢谢
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2063 浏览 1 评论
3307 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2312 浏览 2 评论
2737 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
3984 浏览 5 评论
931浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6323浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 07:00 , Processed in 0.997608 second(s), Total 86, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号