打印
[活动专区]

用N32G45XVL-STB开发板驱动步进电机

[复制链接]
10874|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ddllxxrr 于 2023-4-10 09:30 编辑

本来想用N32G430芯片来驱动步进电机,可是手头上正好有一个N32G45XVL-STB开发板,于是就用它来驱动一下。
      原理是一样地。我用定时器输出通道来输出PWM波,用板子上的按键来控制允许和方向。

      那么到板子上就是PA6输出脉冲,PA2,PA3控制允许和方向。

   
void GPIO_Configuration(void)
{
    GPIO_InitType GPIO_InitStructure;

    /* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function push-pull */
    GPIO_InitStructure.Pin        = GPIO_PIN_6 ;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

   
        
           GPIO_InitStructure.Pin = GPIO_PIN_2 | GPIO_PIN_3;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
}


main.c如下:
int main(void)
{
    /* System Clocks Configuration */
    RCC_Configuration();

    /* GPIO Configuration */
    GPIO_Configuration();

    /* -----------------------------------------------------------------------
    TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:
    TIM3 Frequency = TIM3 counter clock/(AR + 1)
    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100
    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100
    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100
    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100
    ----------------------------------------------------------------------- */
    /* Compute the prescaler value */
    PrescalerValue = (uint16_t)(SystemCoreClock / 24000000) - 1;
    /* Time base configuration */
    TIM_TimeBaseStructure.Period    = 665;
    TIM_TimeBaseStructure.Prescaler = PrescalerValue;
    TIM_TimeBaseStructure.ClkDiv    = 0;
    TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;

    TIM_InitTimeBase(TIM3, &TIM_TimeBaseStructure);

    /* PWM1 Mode configuration: Channel1 */
    TIM_OCInitStructure.OcMode      = TIM_OCMODE_PWM1;
    TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
    TIM_OCInitStructure.Pulse       = CCR1_Val;
    TIM_OCInitStructure.OcPolarity  = TIM_OC_POLARITY_HIGH;

    TIM_InitOc1(TIM3, &TIM_OCInitStructure);

    TIM_ConfigOc1Preload(TIM3, TIM_OC_PRE_LOAD_ENABLE);

   
    /* TIM3 enable counter */
    TIM_Enable(TIM3, ENABLE);

    while (1)
    {
                        if(GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_4)==0)
                        {
                                GPIO_SetBits(GPIOA,GPIO_PIN_2);
                                GPIO_ResetBits(GPIOA,GPIO_PIN_3);
                        }
                        else if((GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_5)==0))
                        {
                                GPIO_ResetBits(GPIOA,GPIO_PIN_2);
                                GPIO_ResetBits(GPIOA,GPIO_PIN_3);
                        }
                        else if((GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_6)==0))
                        {
                                GPIO_SetBits(GPIOA,GPIO_PIN_2);
                                GPIO_SetBits(GPIOA,GPIO_PIN_3);
                        }
    }
}



需要注意的是选择第几个PWM通道的函数是:

TIM_InitOc1(TIM3, &TIM_OCInitStructure);

如果选第二个通道那么就写为:

TIM_InitOc2(TIM3, &TIM_OCInitStructure);

当然得初始化通道2

先上个照片:


视频

使用特权

评论回复
沙发
qcliu| | 2023-5-5 15:55 | 只看该作者
步进电机动作的精细程度取决于哪个参数呢

使用特权

评论回复
板凳
drer| | 2023-5-5 16:27 | 只看该作者
qcliu 发表于 2023-5-5 15:55
步进电机动作的精细程度取决于哪个参数呢

你问的是精度吧  ?一般步进电机的精度为步距角的3-5%

使用特权

评论回复
地板
coshi| | 2023-5-5 17:09 | 只看该作者
步进电机单步的偏差并不会影响到下一步的精度,因此步进电机精度不累积

使用特权

评论回复
5
tpgf| | 2023-5-5 17:20 | 只看该作者
这是通过调节频率还是调节幅值来控制的呢

使用特权

评论回复
6
kxsi| | 2023-5-6 08:11 | 只看该作者
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗

使用特权

评论回复
7
wiba| | 2023-5-6 10:47 | 只看该作者
kxsi 发表于 2023-5-6 08:11
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗

感觉上不能把  要不也不能分调频和调幅两种了

使用特权

评论回复
8
ddllxxrr|  楼主 | 2023-5-6 14:30 | 只看该作者
kxsi 发表于 2023-5-6 08:11
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗

不可以,增大幅值只能改变扭距

使用特权

评论回复
9
caigang13| | 2023-5-6 21:59 | 只看该作者
这个是42步进电机哇?

使用特权

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6956

帖子

67

粉丝