wrcluomo 发表于 2023-8-11 11:48:42

占空比调速步进电机不明显

#include "stc32g.h"
#include        "STC32G_UART.h"
#include        "STC32G_NVIC.h"
#include        "STC32G_Switch.h"
////////////////////////////////////////////////////
u16nDuty=500;
unsigned int f=2000 ;   //设置周期值
unsigned long lcount=0;
sbit x=P2^6;
/*************        本地函数声明        **************/

void UART_config(void);
void PWMA_config(void);
/**********************************************/
void main(void)
{
        WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXSFR();                //扩展SFR(XFR)访问使能
        CKCON = 0;      //提高访问XRAM速度
        UART_config();       
        PWMA_config();
        while (1)
        {

        }//while(1)
}


//========================================================================
// 函数: void PWMA_config(void)
// 描述: PPWM配置函数。
// 参数: noe.
// 返回: none.
// 版本: V1.0, 2021-5-10
// 备注:
//========================================================================
void PWMA_config(void)
{
        u8        ccer1;
        u8        ccer2;
        u8        ps;
        u8        eno;
        u8 PWMA_ISR_En=0;
        P_SW2 |= 0x80;                //SFR enable   
        PWMA_ENO    = 0;        // IO输出禁止
        PWMA_IER    = 0;        // 禁止中断
        PWMA_SR1    = 0;        // 清除状态
        PWMA_SR2    = 0;        // 清除状态
        ccer1 = 0;
        ccer2 = 0;
        ps    = 0;
        eno   = 0;
        PWMA_ISR_En = 0;
        PWMA_PSCRH = 0;                // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_PSCRL = 0;
        f=2000 ;
        PWMA_ARRH = (u8)(f >> 8); //设置周期时间
        PWMA_ARRL = (u8)f;
       
       
        //nDuty=0.1*f;
        nDuty=0.9*f;
        PWMA_CCR4H= (u8)(nDuty >> 8);
        PWMA_CCR4L= (u8)(nDuty );
       
       
        PWMA_CCMR4= (3<<4);                // 通道1模式配置, 禁止预装载. 0: 无输出, 1:匹配时输出高, 2:匹配时输出低, 3:匹配时输出翻转.
        ccer2 |= 0x10;                        // 开启比较输出, 高电平有效
        ps    |= (1<<6);                // 选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.3 P3.4
        eno   |= 0x40;                        // IO输出允许,bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,bit3: ENO2N,bit2: ENO2P,bit1: ENO1N,bit0: ENO1P
        PWMA_ISR_En|= 0x10;                // 使能中断

        PWMA_CCER1= ccer1;        // 捕获/比较使能寄存器1
        PWMA_CCER2= ccer2;        // 捕获/比较使能寄存器2
        PWMA_PS   = ps;                // 选择IO
        PWMA_IER    = PWMA_ISR_En;        //设置允许通道1~4中断处理

        PWMA_EGR    = 0x01;                //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
        PWMA_BKR    = 0x80;                //主输出使能 相当于总开关
        PWMA_CR1    = 0x01;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
        PWMA_ENO    = eno;                // 允许IO输出

}
上面这个是我根据梁工的代码改了一下,P26接动器,发现占空比0.1和0.9电机转速差不多,没有调频率来的明显,请问问题出在那里。

梁工 发表于 2023-8-11 21:21:53

步进电机不是用占空比调速的,请先仔细学习一下步进电机的原理。
页: [1]
查看完整版本: 占空比调速步进电机不明显