打印

2812没有PWM波形,为什么……

[复制链接]
1200|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-11-12 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
EvaRegs.T1CON.bit.TMODE=2;  // 设定模式为连续增模式产生不对称的PWM波形

        EvaRegs.T1CON.bit.TPS=0;    //T1时钟输入预订标位 TCLK=HIPCLK=75Mhz

        EvaRegs.T1CON.bit.TENABLE=0; //暂时禁止定时器的操作,等到全部设定完毕再启动定时器

        EvaRegs.T1CON.bit.TCLKS10=0;   // 定时器1使用内部时钟

        EvaRegs.T1CON.bit.TCLD10=0;  //当计数器值为0时重载

        EvaRegs.T1CON.bit.TECMPR=1;  //使能定时器的比较操作.
        EvaRegs.T1CON.bit.FREE=1;
        EvaRegs.T1CON.bit.SOFT=1;
        EvaRegs.GPTCONA.bit.T1PIN=2;                //定时器1比较输出极性高电平有效
        EvaRegs.GPTCONA.bit.T1CMPOE=1;                //


        EvaRegs.T1CNT=0x0000;
        EvaRegs.T1PR=11718;
        EvaRegs.T1CMPR=3000;        //

        EvaRegs.T1CON.bit.TENABLE=1;  //使能定时器操作开始产生PWM波形
知道的朋友给指点一下, 如此设置为什么T1PWM引脚没有波形输出啊?

相关帖子

沙发
zhangmangui| | 2013-11-12 11:12 | 只看该作者
我用过的  你可以对比一下
void InitEv(void)
{
       
        EvaRegs.DBTCONA.all = 0x0530;        //使能死区定时器,分频40/16=2.5M,死区时间5*0.4us=2us
       
        EvaRegs.T1CNT = 0;                                //定时器1初值设为0
        EvaRegs.T1PR = 4652;            //1K(4650)       
        EvaRegs.ACTR.all = 0x0066;                //PWM2低有效,PWM1高有效,改变设置可使电机反转
        EvaRegs.CMPR1=0;
    EvaRegs.CMPR2=0;
           EvaRegs.COMCONA.all = 0xA600;        //比较器控制A
//        EvaRegs.T1CMPR = 2400;          //定时器1比较值
//        EvaRegs.T1CON.all = 0x144E;     //连续增模式,TPS系数40M/16=2.5M,T1使能
        EvaRegs.T1CON.all = 0x1442;     //定时器输入预定标时钟HSPCLK/16
         
/*配置通用定时器2用于正交编码QEP模块和捕获单元模块CAP */
    EvaRegs.T2CON.all=0x1830;      //仿真停挂起,双向递增/减计数,禁止定时器操作,定时器时钟来源QEP
                                       //定时器重载条件保留,禁止定时器比较操作
    EvaRegs.T2PR = 0xFFFF;                   //定时周期0xFFFF
    EvaRegs.T2CNT = 0x7FFF;                 //设置定时初值为0x7FFF

/*配置通用定时器3用于精确时间测量,服务于M/T测速     */
    EvbRegs.T3CNT = 0;             //定时器3初始值,用于测量高频脉冲个数,M/T测速
    EvbRegs.T3PR = 0xFFFF;         
        EvbRegs.T3CON.all = 0x1000;        //连续增模式,输入时钟预定标为0(HSPCLK=75M,周期为13.33ns)

        EvaRegs.CAPCONA.all=0;         //复位捕获单元寄存器,QEP电路清0
    EvaRegs.CAPCONA.bit.CAP1EDGE=1;//捕获单元检测上升沿
    EvaRegs.CAPCONA.bit.CAP12TSEL=0;//捕获单元选择定时器为定时器2
        EvaRegs.CAPFIFO.bit.CAP1FIFO=0; //清空CAP1FIFO
//        EvaRegs.CAPCONA.bit.CAPRES = 0;         //清除所有捕获单元寄存器,QEP电路清0
        EvaRegs.EVAIFRC.bit.CAP1INT=1;  //清中断标志位
    EvaRegs.EVAIMRC.bit.CAP1INT=1;  //CAP1中断使能
        EvaRegs.CAPCONA.bit.CAPQEPN = 0;         //禁止捕获单元1和2
//        EvaRegs.T2CON.bit.TENABLE = 1;           //使能定时器2
        EvaRegs.T2CON.bit.TCLKS10 = 3;          //启动T2计数QEP
}       
此句调节占空比
EvaRegs.CMPR1 = EvaRegs.T1PR*speed1;

使用特权

评论回复
板凳
wangdezhi| | 2013-11-12 15:07 | 只看该作者
还得有GPIO设置吧

使用特权

评论回复
地板
wangdezhi| | 2013-11-12 15:07 | 只看该作者
不知道楼主是否设置了

使用特权

评论回复
5
拿起书本| | 2013-11-13 10:33 | 只看该作者
楼主检查一下是否把引脚配置为PWM管脚了?

使用特权

评论回复
6
jxmzzr|  楼主 | 2013-11-20 15:21 | 只看该作者
首先谢谢楼上各位朋友的热心解释,我找到问题了EvaRegs.GPTCONA.bit.T1CMPOE=1;  这句改成EvaRegs.GPTCONA.bit.TCOMPOE=1;就行了应该是位定义的问题。结贴了。

使用特权

评论回复
7
zhangmangui| | 2013-11-20 22:22 | 只看该作者
jxmzzr 发表于 2013-11-20 15:21
首先谢谢楼上各位朋友的热心解释,我找到问题了EvaRegs.GPTCONA.bit.T1CMPOE=1;  这句改成EvaRegs.GPTCONA. ...

谢谢分享   

使用特权

评论回复
8
tianli1980| | 2013-12-5 15:40 | 只看该作者
呵呵,仔细学习了一下,唉,还是编程马虎造成的啊%

使用特权

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

本版积分规则

460

主题

2188

帖子

12

粉丝