完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
MPLAB-XW/XC8C汇编语言,我正在学习如何使用CCM的PWM模式。我正在用APC12F63做直流-直流电源。我需要在10000和100000赫兹之间产生一个方波。其驱动2个4013s,每个分频两个,然后Q和QY不到MOSFET线驱动器芯片。因此,占空比并不重要。首先,我在一个循环中,用一个输出来交替输出一个输出。这很好。因此,我决定学习如何用CCMI打印和RePIC12F63数据表页75到79多次。我已经工作在769250kHz从表11-3的值硬编码-在79页底部的示例PWM频率。在我的示波器上,我可以看到表中列的频率的1/2的方波。现在我有一些关于CCM/PWM的通用问题,这些问题适用于大多数的微芯片U.问题频率1∶1/2…对吗?我是在做工作周期还是解决问题?问题#2:查看我的初始化代码和中断服务例程……void Init_CCP_PWM(){T2CON=0;//clear不确定是否需要这里是TRISIO=0;//Clear..是否需要这里是CCPR1L=0b000010;CCP1CON=0x3C;//Enable PWM on CCP1 T2CON=0x04;//Enable TMR2预分频器=1PR2=19;//PWM=(OSC/(4*presc*Freq))-1PIE1=0;//清除外围中断启用PIR1=0;//清除外围中断标志PIR1bits.TMR2IF=0;//清除TMR2中断标志T2CONbits.TMR2ON=1;IE1bits.T2IE=1;//启用TMR2中断INTCONbits.GIE=1;//启用global中断INTCONbits.PEIE=1;//启用外围中断T2CONbits.TMR2ON=1;//启动TMR2}无效中断isr(){if(PIR1bits.TMR2IF){PIR1bits.TMR2IF=0;//清除TMR2中断标志}在高频下,这浪费了处理能力的分配。它所做的一切都是重置标志。这个ISR(中断服务例程)是必要的吗?当我删除这个ISR的输出引脚低卡住。是否可以得到没有ISR的交变输出?如果答案是肯定的,那就是我在Init()codeQUEST.#3:void Set_CCP_PWM(int freq_khz){...}中做错了什么?我需要C代码将频率设置为kHz,从10k到100k的合理范围。但是我很困惑。不确定这是否是一个神话。在我看来,应该有一些抽象的C代码可以基于期望的频率、占空比和分辨率来计算这些PWM值。在我的例子中,这个特殊的项目……占空比和分辨率并不重要,因为输出经过两个4013s除以2-它们总是输出一个50%的占空比到mosfet驱动芯片。有人能提供一些C代码给任何PIC UC,它采用一个期望的频率参数,然后设置寄存器?丹斯特。路易斯,美国密苏里
|
|
相关推荐
3个回答
|
|
|
嘿,达里奥…你不必说ISR不是必要的。只是问:“如果你不需要中断,为什么会启用中断?”你的意思是你可以得到一个没有ISR的方波,它会起作用。不要在init代码中设置位,也不要编译中断服务例程吗?你是那个意思吗?在我工作的时候,我是一个呆在家里的爸爸/工程师,看着我20个月大的工作。相信我,我有很多没有PUN意图的中断-所以任何代码片段,将自动设置频率/周期从C参数将非常感激?从1到200的无符号字符指定kHz非常有用。Set_PCM(无符号字符freq_kHz){//Darrio超级智能编码器说......}
|
|
|
|
|
|
至于创建与其他值相关的PWM占空比,我同意Ian的建议。我刚刚指出这个ISR没有意义!PWM模块应该自己工作,而不需要IRQ。
|
|
|
|
|
|
我在没有ISR的情况下工作。我还找出并编写了一个简单的短C函数,它用1k增量的一个未标记的期望频率的字符。它工作范围从199左右,使用65283;define来计算和设置寄存器,通过乘以(_XTAL_FREQ/4000)得到1khz的增量。下面的代码是PIC12F684_._XTAL_FREQ 8000000void SetPCM(无符号char khz){/*PIC12F684*PWM寄存器配置*Fosc= 4000000Hz*Fpwm=47619.05Hz(请求:48000Hz)*占空比=50%*分辨率是6比特*压力计是1*确保你的PWM管脚配置为数字输出*参见*这个源代码按原样提供的更多细节,*以你自己的风险使用它*47619/2==2390*//这假定_XTAL_FR8MHz#定义PWM_KHZ_DIV1_PWM_KHZ_DIV1(_XTAL_FREQ/4000)无符号字符X=(PWM_KHZ_DIV1/KKH1/4000)无符号字符x=(PWM_KHHZ_DIV1/XTAL_4000/4000)无符号字符x=(PWM_XXTAM_4000/4000)x-1;PR2=x-1;PR2=x;/**上述工作从约4至90**//T2CON*/T2CON*T2CON=0T2CON=0B0000000000000000000*///T2CON*/T2CON=0b210000000000000000000000000清除TRISIObits.TRISIO2=0;//禁用CCP1通过设置TrIS SETPCM(95);//设置频率Py1=0;/ /清除外围中断Enable PiR1=0;/ /清除外围中断标志PIR1BIT.TMR2IF=0;//清除TMR2中断标记2TCONTITS。TMR2ON=1;//启动TMR2} AdBROSEC/C++程序员自第一千九百八十八以来。路易斯,美国密苏里
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
501 浏览 0 评论
5811 浏览 9 评论
2350 浏览 8 评论
2237 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3543 浏览 3 评论
1159浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1120浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
888浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
501浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 05:35 , Processed in 0.697136 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4339