STM32
直播中

云达贞

7年用户 793经验值
私信 关注
[问答]

求助,关于编码盘与PWM的疑问求解

最近在做电机控制的项目,因为牵扯到电机的PI控制,所以想用到编码盘,但编码盘和PWM控制似乎都只能用TMR1来做,但似乎有冲突。附上程序编码盘初始化:

void  tiM1_Init(void)
{
    TIM1_CR1=0x00; //up count,interrupt not stop count
    TIM1_IER=0x00;
    TIM1_PSCRH=0x0; //PSC 10000 hz
    TIM1_PSCRL=0x0;

    TIM1_ARRH=0xFF;   //这里步数从-32767—32767
    TIM1_ARRL=0xFF;

    TIM1_CCMR1=0x01;
    TIM1_CCMR2=0x01;
    TIM1_CCER1=0x22;
    TIM1_SMCR=0x03;
    TIM1_CR1=0x01;  //counter enable
}


PWM初始化
void PwmTIM1(void)
{
    TIM1_EGR = 0x01;//初始化TIM1                  TIM1时基初始化
    TIM1_EGR |= 0x20;//重新初始化TIM1
    TIM1_CR1 = 0x80;//边沿对齐,向上计数,带缓冲***************
    TIM1_RCR = 0x01;//重复计数器***************************************
    TIM1_PSCRH = 0;   //预分频                         设置PWM频率
    TIM1_PSCRL = 0;
    TIM1_ARRH = 0x00; //设定重装载值      
    TIM1_ARRL = 150;


    TIM1_CCER1 = 0x55;//高/低电平有效(CCiP),使能PWM输出(CCiE)使能互补输出 (CCiNE),互补高/低电平有效(CCiNP)   
    TIM1_CCMR1 = 0X6C;
    TIM1_CCER2 = 0x55;//高/低电平有效(CCiP),使能PWM输出(CCiE)使能互补输出 (CCiNE),互补高/低电平有效(CCiNP)   
    TIM1_CCMR2 = 0x6C;//PWM模式1                  通道2PWM输出
    TIM1_CCMR3 = 0x6C;//PWM模式1                  通道3PWM输出
    TIM1_BKR = 0x80;//主使能
    TIM1_DTR = 0x12;//插入2us死区时间
    TIM1_CR1_CEN = 0x01;//计数使能                     
}


其中TIM1_ARRH 和TIM1_ARRL两个寄存器是重复定义的,不知道大家有其他办法么,我使用的芯片是STM8S105,望大神帮忙解答

回帖(1)

1652711011.026500

2024-4-30 17:08:12
在您的电机控制项目中,您提到了编码盘和PWM控制都使用TMR1,这可能导致冲突。为了解决这个问题,您可以考虑使用其他定时器(如TMR2、TMR3等)来实现编码盘和PWM控制的功能。

首先,我们需要了解编码盘和PWM控制的基本原理:

1. 编码盘:编码盘是一种用于测量电机转速和位置的传感器。它通常有两个输出信号,A相和B相,这两个信号是相位相差90度的方波。通过读取这两个信号的变化,可以计算出电机的转速和位置。

2. PWM控制:脉宽调制(PWM)是一种用于控制电机速度和方向的常用方法。通过调整PWM信号的占空比,可以控制电机的电压和电流,从而实现对电机速度的控制。

为了解决TMR1的冲突问题,您可以尝试以下步骤:

1. 使用另一个定时器(如TMR2)来实现编码盘的功能。您需要配置TMR2的输入捕获模式,以便读取A相和B相的信号变化。同时,您需要编写中断服务程序来处理这些信号变化,并计算电机的转速和位置。

2. 使用TMR1来实现PWM控制。您需要配置TMR1的输出比较模式,以便生成PWM信号。同时,您需要根据PI控制算法调整PWM信号的占空比,以实现对电机速度的控制。

3. 如果您的微控制器支持多个PWM输出通道,您还可以考虑使用不同的通道来实现编码盘和PWM控制的功能。这样,您可以避免使用同一个定时器,从而减少冲突的可能性。

4. 如果您的项目对实时性能要求较高,您还可以考虑使用外部硬件(如FPGA或专用电机控制芯片)来实现编码盘和PWM控制的功能。这样可以减轻微控制器的负担,提高系统的稳定性和实时性能。

总之,解决编码盘和PWM控制的冲突问题需要对您的项目进行一定的调整。您可以尝试使用不同的定时器或PWM输出通道,或者考虑使用外部硬件来实现这些功能。希望这些建议对您有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分