[活动专区] 用N32G45XVL-STB开发板驱动步进电机

[复制链接]
 楼主| ddllxxrr 发表于 2023-4-10 06:49 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2023-4-10 09:30 编辑

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

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

   
  1. void GPIO_Configuration(void)
  2. {
  3.     GPIO_InitType GPIO_InitStructure;

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

  8.     GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

  9.    
  10.         
  11.            GPIO_InitStructure.Pin = GPIO_PIN_2 | GPIO_PIN_3;
  12.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  13.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.           GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
  15. }


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

  5.     /* GPIO Configuration */
  6.     GPIO_Configuration();

  7.     /* -----------------------------------------------------------------------
  8.     TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:
  9.     TIM3 Frequency = TIM3 counter clock/(AR + 1)
  10.     TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100
  11.     TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100
  12.     TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100
  13.     TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100
  14.     ----------------------------------------------------------------------- */
  15.     /* Compute the prescaler value */
  16.     PrescalerValue = (uint16_t)(SystemCoreClock / 24000000) - 1;
  17.     /* Time base configuration */
  18.     TIM_TimeBaseStructure.Period    = 665;
  19.     TIM_TimeBaseStructure.Prescaler = PrescalerValue;
  20.     TIM_TimeBaseStructure.ClkDiv    = 0;
  21.     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;

  22.     TIM_InitTimeBase(TIM3, &TIM_TimeBaseStructure);

  23.     /* PWM1 Mode configuration: Channel1 */
  24.     TIM_OCInitStructure.OcMode      = TIM_OCMODE_PWM1;
  25.     TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
  26.     TIM_OCInitStructure.Pulse       = CCR1_Val;
  27.     TIM_OCInitStructure.OcPolarity  = TIM_OC_POLARITY_HIGH;

  28.     TIM_InitOc1(TIM3, &TIM_OCInitStructure);

  29.     TIM_ConfigOc1Preload(TIM3, TIM_OC_PRE_LOAD_ENABLE);

  30.    
  31.     /* TIM3 enable counter */
  32.     TIM_Enable(TIM3, ENABLE);

  33.     while (1)
  34.     {
  35.                         if(GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_4)==0)
  36.                         {
  37.                                 GPIO_SetBits(GPIOA,GPIO_PIN_2);
  38.                                 GPIO_ResetBits(GPIOA,GPIO_PIN_3);
  39.                         }
  40.                         else if((GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_5)==0))
  41.                         {
  42.                                 GPIO_ResetBits(GPIOA,GPIO_PIN_2);
  43.                                 GPIO_ResetBits(GPIOA,GPIO_PIN_3);
  44.                         }
  45.                         else if((GPIO_ReadInputDataBit(GPIOA,GPIO_PIN_6)==0))
  46.                         {
  47.                                 GPIO_SetBits(GPIOA,GPIO_PIN_2);
  48.                                 GPIO_SetBits(GPIOA,GPIO_PIN_3);
  49.                         }
  50.     }
  51. }



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

TIM_InitOc1(TIM3, &TIM_OCInitStructure);

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

TIM_InitOc2(TIM3, &TIM_OCInitStructure);

当然得初始化通道2

先上个照片:
ff3a43453b54c66190670d8c3c5fa951.jpg

视频

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 | 显示全部楼层
步进电机单步的偏差并不会影响到下一步的精度,因此步进电机精度不累积
tpgf 发表于 2023-5-5 17:20 | 显示全部楼层
这是通过调节频率还是调节幅值来控制的呢
kxsi 发表于 2023-5-6 08:11 | 显示全部楼层
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗
wiba 发表于 2023-5-6 10:47 | 显示全部楼层
kxsi 发表于 2023-5-6 08:11
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗

感觉上不能把  要不也不能分调频和调幅两种了
 楼主| ddllxxrr 发表于 2023-5-6 14:30 | 显示全部楼层
kxsi 发表于 2023-5-6 08:11
当pwm的占空比和频率一定的时候 改变幅值可以改变步进电机的速度吗

不可以,增大幅值只能改变扭距
caigang13 发表于 2023-5-6 21:59 来自手机 | 显示全部楼层
这个是42步进电机哇?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部