[STM32F1] STM32F103C6T6 步进电机控制

[复制链接]
1275|17
 楼主| o88ne 发表于 2023-7-26 15:45 | 显示全部楼层 |阅读模式

本程序用于控制步进电机,每转16圈变向。

代码如下

  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"

  3. int main(void)
  4. {
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  6.        
  7.         GPIO_InitTypeDef GPIO_InitStructure;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  12. int i=1;
  13. int a=0;
  14. int b=0;       
  15.         while (1)
  16.         {       
  17.     b++;               
  18.                 if (i==1)
  19.                 {
  20.                         GPIO_SetBits(GPIOA, GPIO_Pin_0);
  21.                         GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  22.                         GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  23.                         GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  24.                         Delay_ms(1);
  25.                 }
  26.                 if (i==2)
  27.                 {
  28.                 GPIO_SetBits(GPIOA, GPIO_Pin_0);
  29.                 GPIO_SetBits(GPIOA, GPIO_Pin_1);
  30.                 GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  31.                 GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  32.                 Delay_ms(1);
  33.                 }
  34.                 if (i==3)
  35.                 {
  36.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  37.                 GPIO_SetBits(GPIOA, GPIO_Pin_1);
  38.                 GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  39.                 GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  40.                 Delay_ms(1);
  41.                 }
  42.                 if (i==4)
  43.                 {
  44.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  45.                 GPIO_SetBits(GPIOA, GPIO_Pin_1);
  46.                 GPIO_SetBits(GPIOA, GPIO_Pin_2);
  47.                 GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  48.                 Delay_ms(1);
  49.                 }
  50.                 if (i==5)
  51.                 {
  52.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  53.                 GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  54.                 GPIO_SetBits(GPIOA, GPIO_Pin_2);
  55.                 GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  56.                 Delay_ms(1);
  57.                 }
  58.                 if (i==6)
  59.                 {
  60.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  61.                 GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  62.                 GPIO_SetBits(GPIOA, GPIO_Pin_2);
  63.                 GPIO_SetBits(GPIOA, GPIO_Pin_3);
  64.                 Delay_ms(1);
  65.                 }
  66.                 if (i==7)
  67.                 {
  68.                 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  69.                 GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  70.                 GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  71.                 GPIO_SetBits(GPIOA, GPIO_Pin_3);
  72.                 Delay_ms(1);
  73.                 }
  74.                 if (i==8)
  75.                 {
  76.                 GPIO_SetBits(GPIOA, GPIO_Pin_0);
  77.                 GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  78.                 GPIO_ResetBits(GPIOA, GPIO_Pin_2);
  79.                 GPIO_SetBits(GPIOA, GPIO_Pin_3);
  80.                 Delay_ms(1);
  81.                 }
  82.                 if (a==0)
  83.                 {
  84.                         i++;
  85.                         if(i==9)
  86.                         i=1;
  87.                 }
  88.                 if (a==1)
  89.                 {
  90.                         i--;
  91.                         if(i==0)
  92.                         i=8;
  93.                 }
  94.                 if(b==5000)
  95.                 {
  96.                         if(a==0)
  97.                         {a=1;
  98.                          b=0;}
  99.                 }
  100.                 if(b==65536)
  101.                 {
  102.                         if(a==1)
  103.                         {a=0;
  104.                          b=0;}
  105.                 }
  106.         }
  107. }


yiy 发表于 2023-7-26 20:29 | 显示全部楼层
这个方法只能用于演示。
zhanxiao 发表于 2023-8-28 13:54 | 显示全部楼层
有没有能够做量产的,看了那么多,没有一个可以用于产品的
yufe 发表于 2023-8-29 20:37 | 显示全部楼层
这个为啥不能量产
Stahan 发表于 2023-9-2 23:03 | 显示全部楼层
对啊,为啥不能用来量产?
MessageRing 发表于 2023-9-3 21:32 | 显示全部楼层
好多if
Bowclad 发表于 2024-5-12 22:34 | 显示全部楼层
轮询效率太低了
帛灿灿 发表于 2024-9-16 08:27 | 显示全部楼层

当电路出现异常过压并达到其击穿电压时
Bblythe 发表于 2024-9-16 09:30 | 显示全部楼层

例如下图中在SPI信号线上串联电阻就是为了改善匹配情况
周半梅 发表于 2024-9-16 11:26 | 显示全部楼层

即原/副边交错通断。
Pulitzer 发表于 2024-9-16 12:29 | 显示全部楼层

般只要关注值、精度、额度功率
Wordsworth 发表于 2024-9-16 15:28 | 显示全部楼层

ESD静电保护器基本上都是通过静电进行吸收和耗散
Clyde011 发表于 2024-9-16 16:31 | 显示全部楼层

这类型灌封胶一般分为A、B双组份在进行1:1的配比后再进行灌封的操作
公羊子丹 发表于 2024-9-16 17:24 | 显示全部楼层

然后在专用站中检查每个半孔,
万图 发表于 2024-9-16 18:27 | 显示全部楼层

同时把异常高压箝制在一个安全水平之内
Uriah 发表于 2024-9-16 19:30 | 显示全部楼层

从而抑制电路的振荡。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

426

帖子

3

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