打印
[PIC®/AVR®/dsPIC®产品]

PIC33FJ系列,PWM输出,关于时基中断如何使用的问题

[复制链接]
715|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
galjewf|  楼主 | 2020-7-29 15:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 galjewf 于 2020-7-29 15:43 编辑

最基本的PWM输出已经完成了,看到手册上写着可以根据PWM脉冲产生中断事件于是想尝试写个例程,但是找了一会也没找到这个中断入口函数名呀。
1.难道这个中断功能,使用方法和外部中断这种不一样吗,请各位指教?2.我想在中断发生后,停止这一通道的PWM波发生,有什么方法吗?
芯片是PIC33FJ64MC506


使用特权

评论回复
沙发
galjewf|  楼主 | 2020-7-29 17:51 | 只看该作者
或者告诉在下,怎么控制PWM输出固定数量的脉冲数。主要是用来控制带驱动芯片的两相步进电机

使用特权

评论回复
板凳
ynwa| | 2020-7-30 09:43 | 只看该作者
数据手册TABLE 7-1: INTERRUPT VECTORS里有,PWM – PWM Period Match中断

使用特权

评论回复
评论
galjewf 2020-8-3 14:14 回复TA
@ynwa :没有呀,这个芯片的gld里面一个PWM相关的文本都没有。。 
ynwa 2020-7-31 13:22 回复TA
@galjewf :中断函数名就是PWMInterrupt,你看GLD文件的话,里面也有。 
galjewf 2020-7-30 10:07 回复TA
这个向量表找到了,但是具体函数名在下不会编写,以前在下写中断都是打开器件.gld文件找的函数名,但是没搜到PWM相关的中断入口函数。能否再指教一下? 
地板
CoolSilicon| | 2020-7-31 14:49 | 只看该作者
MCC好像支持这个系列, 自动生成中断的,就不用自己去找了...

使用特权

评论回复
5
galjewf|  楼主 | 2020-8-3 14:46 | 只看该作者

手册这里的时基中断具体配置方法或者例程能不能讲一下,求求了

使用特权

评论回复
6
ynwa| | 2020-8-4 09:56 | 只看该作者
galjewf 发表于 2020-8-3 14:46
手册这里的时基中断具体配置方法或者例程能不能讲一下,求求了

中断要配置什么?你选择使能或禁止就可以了。
你贴图的这一页,写的很清楚,每种工作模式下中断产生方式。也就是说中断产生的方式取决于工作模式!因此,你要配置的是工作模式。
工作模式通过PTMOD选择,至于选哪种工作模式,应该问用的人自己。

使用特权

评论回复
7
galjewf|  楼主 | 2020-8-4 14:30 | 只看该作者
ynwa 发表于 2020-8-4 09:56
中断要配置什么?你选择使能或禁止就可以了。
你贴图的这一页,写的很清楚,每种工作模式下中断产生方式 ...

你好,在上面你说的中断函数名是PWMInterrupt,但是本人找对应的gld文件搜索连PWM这个字眼都没有。
还有一个就是查找手册中断这一章时,本人只看到PWM错误事件和故障事件。
在代码中定义PWMInterrupt也没报错,但是也没有进入PWMInterrupt函数。下面是在下写的代码。
void pwm1_init()//RE0,RE1
{
        PTPER=3125-1;//控制周期,越大频率也越小,14位寄存器,最大取值=2^14=16384

        PTCONbits.PTEN = 1;                        //PWM time base is on
        PTCONbits.PTMOD = 0b01;                // operates in a Free-Running mode
        PTCONbits.PTCKPS = 0b11;        // PWM time base input clock period is TCY (1:64 prescale)
        PWMCON1bits.PMOD1 = 1;                //PWM I/O pin pair is in the Independent PWM Output mod
       
        PWMCON1bits.PEN1H = 1;                //PWMxH pin is enabled for PWM output
        PWMCON1bits.PEN1L = 1;                //PWMxL pin is enabled for PWM output
       
        PWMCON2bits.SEVOPS = 0;                //PWM Special Event Trigger Output Postscale
        PWMCON2bits.IUE = 1;                // Updates to the active PDC registers are immediate
       
        PDC1 = PTPER;                        //控制占空比,范围是(0~2)*PTPER
}
void pwmINT_init()
{
        IPC14bits.PWMIP = 0b001;
        IEC3bits.PWMIE        = 0b1;
        IFS3bits.PWMIF        = 0b0;
       
}
void __attribute__((interrupt, no_auto_psv)) _PWMInterrupt()
{
        if(IFS3bits.PWMIF == 1)
        {
                PTCONbits.PTEN = 1;
                IFS3bits.PWMIF = 0;
        }       

}       
int main()
{
       pwmINT_init();
        pwm1_init();
    while(1);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

41

帖子

0

粉丝