打印

dspic30f2010电机PWM程序探讨

[复制链接]
5807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kindwyw|  楼主 | 2011-7-12 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次用PIC的DSP片子,仿真调试电机PWM模块子程序,发现PWMH和PWML口都没有输出的,调试进入了死胡同,请同行帮忙分析下面程序是否有问题,谢谢
**********************************************/
#include"p30f2010.h"
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define RB0 PORTB,0
#define RD0 PORTD,0
uint rec_counter,kgbzw,pwmbzw,spwmbzw,adval;
/*****************PWM 初始化子程序 *******************************/
void init_PWM()
{
     INTCON1bits.NSTDIS=1    ;   //中断嵌套禁止
     //INTCON2bits.ALTIVT=0    ;   //使用标准向量表(默认)
     //IPC9=0x6000            ;   //电机脉宽调制中断优先控制等级为6
     //IPC10=0x7000           ;   //故障A输入中断优先等级7
     
     LATE=0x0000             ;
     PTCON=0x0000            ;   /*PWM时基控制寄存器*/
    // PTMR=0x0000             ;   //PWM时基寄存器,0-14bit为时基寄存器记数值
     PTPER=50              ;   //PWM时基周期寄存器,20KHz(50uS)
     //SEVTCMP=0x0000          ;   //特殊事件比较寄存器
     //PHASE1=0x0000            ;   //
     PWMCON1=0x0077         ;   //PWMxH,PWMxL使能为互补输出模式
     //FCLCON1=0x0003          ;   //禁止故障输入
  
     //PWMCON2=0x0002          ;   //控制寄存器2
     DTCON1=0x000F            ;   //死区时间控制寄存器1
     // DTR1=0x0040             ;   //死区时间
    //DTCON2=0X000F          ;   //死区时间控制寄存器2
     FLTACON=0X0000          ;   //故障A控制寄存器
    //FLTBCON=0X008F         ;   //故障B控制寄存器
     OVDCON=0X0009           ;   //改写控制寄存器
     PDC1=50                 ;   //PWM占空比寄存器1,为50
     PDC2=50                 ;   //PWM占空比寄存器2,为50
     PDC3=50                 ;
     OC1CON=0x0000           ;    //关闭比较器输出
     //IOCON1=0xC000           ;    //PWM IO控制寄存器
    // PTCON=0xF000            ;   //PWM启动     
    PTCON=0x8000               ;   //PWM启动  
}
/*****************************延时程序***********************************/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
  for(b=110;b>0;b--);
}
/*********************************I/O初始化************************/
void init_io()
{
     TRISB=0x003F;
     TRISC=0xE000;
     TRISD=0x0003;
     TRISE=0x00CF;
     TRISF=0x000C;
     
     PORTB=0;
     PORTC=0;
     PORTD=0;
     //PORTE=0;
     PORTF=0;
}
/*****************************PWM调节*****************************/
void pwm_adj(void)
{
   // if(kgbzw)                 //判断kgbzw=1?
// {
   //   if(pwmbzw)
    //   {
         PTPER=adval ;          //周期寄存器
     //  }  
     //    if(spwmbzw)
      //    {
      //     PDC1=rec_counter ;  
      //     PDC2=PDC1 ;               
      //     PDC3=PDC1 ;
        //  }  
  //}
}
/***************** MAIN ROUTINE(主程序)**************************/
int main()
{
    TRISEbits.TRISE0=0;       //设置RE0-RE3为输出8、
    TRISEbits.TRISE1=0;
    TRISEbits.TRISE2=0;
    TRISEbits.TRISE3=0;
   
    LATEbits.LATE0=0;
    LATEbits.LATE1=0;
    LATEbits.LATE2=0;
    LATEbits.LATE3=0;
   
    init_io();
    init_PWM();
    while(1)
    {
       if(IFS2bits.PWMIF=1)
        {
           IFS2bits.PWMIF=0;
           
        }  
    }   
}
沙发
kindwyw|  楼主 | 2011-7-12 16:42 | 只看该作者
谢谢各位同行,自己搞定了 ,一个寄存器配置出错引起

使用特权

评论回复
板凳
zl366090808| | 2012-12-18 17:07 | 只看该作者
kindwyw 发表于 2011-7-12 16:42
谢谢各位同行,自己搞定了 ,一个寄存器配置出错引起

请问你的PDC=PETER时占空比是50%!为什么这样才是50%?

使用特权

评论回复
地板
home1123abc| | 2013-6-5 12:26 | 只看该作者

使用特权

评论回复
5
LZR_1212| | 2015-7-27 09:37 | 只看该作者
请问 你是哪个寄存器配置出错了呀?

使用特权

评论回复
6
一口西北风| | 2016-12-14 14:47 | 只看该作者
zl366090808 发表于 2012-12-18 17:07
请问你的PDC=PETER时占空比是50%!为什么这样才是50%?

同问啊,为什么啊

使用特权

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

本版积分规则

21

主题

55

帖子

2

粉丝