找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2804|回复: 4
收起左侧

SEC15W PCA/PWM驱动步进电机问题

[复制链接]
回帖奖励 9 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
ID:76158 发表于 2016-7-15 07:58 | 显示全部楼层 |阅读模式
想采用STC15W408AS的 PCA/PWM来驱动步进电机
PCA的时钟源采用定时器的溢出率作为PCA的时钟源
目前,输出频率以及PWM都正常,唯独就是有一个地方出现了问题,请版主或者各位看下,哪里出了问题
首先看代码:
#include<STC15F2K60S2.H>          //24MHZ
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar i=2;
uint num,x,y;
bit fig=0;

void pwminit()  //初始化PWM模块与系统
{
        AUXR=0x80;         //定时器时钟频率为1T模式
        TMOD=0X02;         //定时器为8位自动重装 模式
        TH0=160;         //初值设定 定时器溢出率为 256-TH0/TL0的值
        TL0=160;         //初值设定                 定时器0溢出频率为24000000/(256-160)=250000Hz

        
        CMOD=0X84;         //PCA模块空闲模式停止计数,设置采用定时器0的溢出率作为PCA模块的时钟源 时钟源=F/(256-定时器初值)/256
                                 //那么PCA的频率应该等于250000/256=976 HZ
        CCON=0;                 //PCA计数器启动控制寄存器
        CL=250;                 //PCA模块初值
        CH=250;                 //PCA模块初值        5个脉冲就PCA计数器溢出


        CCAPM0=0X42; //PCA模块允许比较, PCA作为PWM输出功能使用
        CCAP0H=127;  //PWM占空比设定

        CCAPM1=0X42; //PWM2
        CCAP1H=127;  //PW2

        EA=1;                 //总中断开关打开
        TR0=1;                 //启动定时器0
        CR=1;                 //启动PCA计数器
}

void time0()         //脉冲定数记录子函数,记录脉冲个数,用来决定步进电机的行程
{
  if(CF==1)    //问题就处在这个子函数上面  这里是判断PCA是否记满数量 溢出标志位,如果是 那么说明5个脉冲满了,NUM+1, 如果我NUM为10
  {                //那么应该是50个脉冲,而实际就不止50个脉冲了
           CF=0;
        num++;        
        if(num==10)     //上面PCA的计数器初值是250 到了5个脉冲就会溢出一次,而我这里NUM==1的时候,我测试过,确实是5个脉冲就停掉了
                                 //示波器上面看过了,NUM=1 就是5个脉冲  一但NUM不是为1的时候脉冲就不对
                {               //但是如果我这里写NUM==10 出来的脉冲数量就不对了,估计都有上千的脉冲数量,大家看出来是哪里出了问题吗
                 num=0;
                 CR=0;
                }
  }
}

void main() //主函数入口
{
  pwminit();
  while(1)
  {
   time0();        
  }

}
回复

使用道具 举报

ID:76158 发表于 2016-7-15 10:33 | 显示全部楼层
有人帮我看出问题来吗
回复

使用道具 举报

ID:114108 发表于 2016-7-19 14:29 | 显示全部楼层

回帖奖励 +1 黑币

看不来
回复

使用道具 举报

ID:202278 发表于 2017-7-15 14:15 | 显示全部楼层
没有,同在学PCA输出PWM
回复

使用道具 举报

ID:325933 发表于 2018-6-23 15:14 | 显示全部楼层
我看的芯片上说CL由0增至255后会溢出;我的理解是在这期间CL会与CCAP0L的值相比较,溢出时CCAP0H的值装载在CCAP0L上。您会不会是误以为CH=250装载在CL上,使得CL从250开始计数了吧?难道是不同芯片运行方式不一样?说错不要打我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表