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

2019-08-07 18:23发布

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引脚没有波形输出啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
zhangmangui
1楼-- · 2019-08-07 22:59
我用过的  你可以对比一下
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
2楼-- · 2019-08-08 02:53
还得有GPIO设置吧
wangdezhi
3楼-- · 2019-08-08 03:22
不知道楼主是否设置了
拿起书本
4楼-- · 2019-08-08 08:33
 精彩回答 2  元偷偷看……
jxmzzr
5楼-- · 2019-08-08 11:48
首先谢谢楼上各位朋友的热心解释,我找到问题了EvaRegs.GPTCONA.bit.T1CMPOE=1;  这句改成EvaRegs.GPTCONA.bit.TCOMPOE=1;就行了应该是位定义的问题。结贴了。
zhangmangui
6楼-- · 2019-08-08 14:14
jxmzzr 发表于 2013-11-20 15:21
首先谢谢楼上各位朋友的热心解释,我找到问题了EvaRegs.GPTCONA.bit.T1CMPOE=1;  这句改成EvaRegs.GPTCONA. ...

谢谢分享   

一周热门 更多>