你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

肯请大师提供比较完整的步进电机(直流电机)C语言代码

[复制链接]
fangqiu9717 提问时间:2019-4-19 09:32 /
肯请大师提供比较完整的步进电机(直流电机)C语言代码。学生正在学习STM8电机控制程序。想看真正实用的程序(用STM板上按键加电机控制芯片来对电机部分进行控制)。
收藏 评论4 发布时间:2019-4-19 09:32

举报

4个回答
mmuuss586 回答时间:2019-4-19 09:44:18

你在与非网站搜下,很多的;
七哥 回答时间:2019-4-19 12:18:14
本帖最后由 toofree 于 2019-4-19 12:45 编辑

步进电机不能叫直流电机。
一般所说的直流电机是指有刷直流电机,磁体固定,线圈在转;
步进电机更像是无刷直流电机,永磁体在转,线圈固定。

用的哪种步进电机和对应的驱动电路?
一般常用的入门学习步进电机有,2相4线4拍,3相4线6拍(或3拍),这两种的驱动电路是完全不同的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

请叫我小阳 回答时间:2019-4-22 17:22:28
写的很菜,用的STD库,但是稍微改一下就能用
  1. /*这是步进电机驱动程序,本程序使用STM8S003F3系列单片机的 【GPIOC】外设
  2. * 需要占用的GPIO管脚分别是:GPIOC 3~6
  3. * 步进电机逆时针旋转,八拍方式驱动,线序为:A、AB、B、BC、C、CD、D、DA
  4. * 步进电机步脚距7.5/85度,减速比1/85
  5. */

  6. #include "moto_driver.h"

  7. unsigned int steps = 0;//定义变量:总部步数

  8. void moto_timer_init(void)//使用定时器4,
  9. {
  10.     CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,ENABLE);//使能TIMER4外设时钟
  11.    
  12.     TIM4_DeInit();//恢复TIME4寄存器默认值
  13.     TIM4_TimeBaseInit(TIM4_PRESCALER_128,80);//设置预分频数128,,计数器初值256,256/(16M/8/128)= 60.1hz
  14.     TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//向上溢出中断,中断函数向量号为25
  15.     TIM4_SetCounter(0x00);//
  16.     TIM4_ARRPreloadConfig(ENABLE);
  17.     TIM4_Cmd(DISABLE);
  18.     //TIM4_Cmd(ENABLE);//使能TIME4,参数ENABLE、DISABLE
  19.     //enableInterrupts();//使能中断总开关
  20. }

  21. void moto_pin_init(void)//电机驱动IO初始化,开漏输出:PC3\PC4\PC5\PC6
  22. {
  23.     GPIO_DeInit(GPIOC);
  24.     GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);
  25.     GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_OUT_PP_HIGH_SLOW);
  26.     GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_SLOW);
  27.     GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW);
  28. }

  29. void steps_0(void)//步进0:1000
  30. {
  31.     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
  32.     GPIO_WriteLow(GPIOC,GPIO_PIN_4);
  33.     GPIO_WriteLow(GPIOC,GPIO_PIN_5);
  34.     GPIO_WriteLow(GPIOC,GPIO_PIN_6);
  35. }

  36. void steps_1(void)//步进1:1100
  37. {
  38.     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
  39.     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  40.     GPIO_WriteLow(GPIOC,GPIO_PIN_5);
  41.     GPIO_WriteLow(GPIOC,GPIO_PIN_6);
  42. }

  43. void steps_2(void)//步进2:0100
  44. {
  45.     GPIO_WriteLow(GPIOC,GPIO_PIN_3);
  46.     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  47.     GPIO_WriteLow(GPIOC,GPIO_PIN_5);
  48.     GPIO_WriteLow(GPIOC,GPIO_PIN_6);
  49. }

  50. void steps_3(void)//步进3:0110
  51. {
  52.     GPIO_WriteLow(GPIOC,GPIO_PIN_3);
  53.     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  54.     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
  55.     GPIO_WriteLow(GPIOC,GPIO_PIN_6);
  56. }

  57. void steps_4(void)//步进4:0010
  58. {
  59.     GPIO_WriteLow(GPIOC,GPIO_PIN_3);
  60.     GPIO_WriteLow(GPIOC,GPIO_PIN_4);
  61.     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
  62.     GPIO_WriteLow(GPIOC,GPIO_PIN_6);
  63. }

  64. void steps_5(void)//步进5:0011
  65. {
  66.     GPIO_WriteLow(GPIOC,GPIO_PIN_3);
  67.     GPIO_WriteLow(GPIOC,GPIO_PIN_4);
  68.     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
  69.     GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
  70. }

  71. void steps_6(void)//步进6:0001
  72. {
  73.     GPIO_WriteLow(GPIOC,GPIO_PIN_3);
  74.     GPIO_WriteLow(GPIOC,GPIO_PIN_4);
  75.     GPIO_WriteLow(GPIOC,GPIO_PIN_5);
  76.     GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
  77. }

  78. void steps_7(void)//步进7:1001
  79. {
  80.     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
  81.     GPIO_WriteLow(GPIOC,GPIO_PIN_4);
  82.     GPIO_WriteLow(GPIOC,GPIO_PIN_5);
  83.     GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
  84. }

  85. void moto_off(void)//刹车停止电机运转函数
  86. {
  87.     TIM4_Cmd(DISABLE);//关闭定时器
  88.     TIM4_SetCounter(0x00);//清零定时器计数值

  89.     GPIO_WriteHigh(GPIOC,GPIO_PIN_3);//刹车堵转
  90.     GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  91.     GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
  92.     GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
  93. }

  94. void moto_on(void)//启动电机运转函数
  95. {
  96.     TIM4_SetCounter(0x00);//清零定时器计数值
  97.     TIM4_Cmd(ENABLE);//开启定时器
  98. }

  99. void moto_run(char steps_)//电机单步运转函数,传入总步数
  100. {
  101.   switch(steps_ % 8)//单步细分
  102.   {
  103.       case 0:steps_0();break;
  104.       case 1:steps_1();break;
  105.       case 2:steps_2();break;
  106.       case 3:steps_3();break;
  107.       case 4:steps_4();break;
  108.       case 5:steps_5();break;
  109.       case 6:steps_6();break;
  110.       case 7:steps_7();break;
  111.   }
  112. }

  113. void moto_init(void)
  114. {
  115.   steps = 0;
  116.   moto_pin_init();
  117.   moto_timer_init();
  118. }  
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版