搜索
bottom↓
回复: 13

STM32 42步进电机程序,电机不转

[复制链接]

出0入0汤圆

发表于 2012-7-28 09:41:17 | 显示全部楼层 |阅读模式
本帖最后由 gongcheng111 于 2012-7-29 08:49 编辑

我的程序如下
#include "stm32f10x_it.h"
#include "stm32f10x_conf.h"
#include "stm32f10x.h"
#include <stdio.h>
#include "gpio.h"
#include "rcc.h"
#include"qudong.h"

void Init(void);          //初始化
void Forward(void);
void Backward(void);
void Left(void);
void Right(void);
void Stop(void);

/********1MS 延时程序*********/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
        Timer1=dly_ms;
        while(Timer1);
}

int i=10000;//暂定为10000个脉冲
int main(void)
{
   Init();
            
   while(1)
   {  
          Forward();//前进,电机转50圏                       
   }
}

/*电机驱动程序*/
/*前进程序*/
void Forward(void)
{  
    while(i--)
  {
   GPIO_Write(GPIOA,0x55);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x66);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0xaa);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x99);
  SysTickDelay (50);
   }
}
/*后退程序*/
void Backward(void)
{  
     while(i--)
  {
   GPIO_Write(GPIOA,0x99);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0xaa);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x66);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x55);
  SysTickDelay (50);
   }
}

/*左转程序*/

void Left(void)
{  
       while(i--)
  {
   GPIO_Write(GPIOA,0x59);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x6a);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0xa6);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x95);
   SysTickDelay(50);
   }
}

/*右转程序*/

void Right(void)
{  
    while(i--)
  {
   GPIO_Write(GPIOA,0x95);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0xa6);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x6a);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x59);
  SysTickDelay (50);
   }
}

/*小车停止*/
void Stop(void)
{
  GPIO_Write(GPIOA,0x00);
}

/*STM32与步进电机的接口设置*/
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}

我用的驱动板是L298.一号电机的A,A-,B,B-分别接L298的IN1,IN2,IN3,IN4,与A0,A1,A2,A3相连;二号电机的A,A-,B,B-分别接另一个L298的IN1,IN2,IN3,IN4,与A4,A5,A6,A7相连.但通电后步进电机一点反应都没有,小弟是新手,都不太懂。请大家多多指教!
用示波器测了下AO引脚,发现只会有高电平输出!没有低电平。这就是无法驱动步进电机的原因吧!是不是端口设置的问题?还是延时程序的问题?在主函数里面写入
GPIO_SetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);       
看看是缶有方波输出,结果还是输出高电平。如果只写GPIO_ResetBits(GPIOA,GPIO_Pin_0);则会输出低电平。小弟实在整不明白,请大家多多指教!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-7-28 12:17:24 | 显示全部楼层
怎么没人了,请大家来帮帮我啊

出0入0汤圆

 楼主| 发表于 2012-7-28 16:32:20 | 显示全部楼层
请大家帮帮忙啊,谢谢啊

出0入0汤圆

发表于 2012-7-28 16:41:05 | 显示全部楼层
需要使用PWM模式,调试出一个合适的频率,对于初学者建议先不用加减速!

出0入0汤圆

发表于 2012-7-28 16:42:32 | 显示全部楼层
gongcheng111 发表于 2012-7-28 16:32
请大家帮帮忙啊,谢谢啊

这个不一定是软件问题,最起码上电路图让大家知道你是用什么电路驱动的,用哪些端口,你这样只给个程序,谁也帮不了你。                     

出0入0汤圆

 楼主| 发表于 2012-7-28 20:12:52 | 显示全部楼层
ITOP 发表于 2012-7-28 16:41
需要使用PWM模式,调试出一个合适的频率,对于初学者建议先不用加减速!

您好,可以给一个例程参考吗?我第一次接触,什么都不太清楚,不知道怎么用

出0入0汤圆

 楼主| 发表于 2012-7-29 08:50:09 | 显示全部楼层
.titrwh 发表于 2012-7-28 16:42
这个不一定是软件问题,最起码上电路图让大家知道你是用什么电路驱动的,用哪些端口,你这样只给个程序, ...

嗯。我用示波器看了看,发现没法输出方波,还麻烦您再看看,是不是我的端口设置错误了?

出0入0汤圆

 楼主| 发表于 2012-7-29 08:51:10 | 显示全部楼层
把程序下载里面,电机不转,但用手转明显的感到阻力。

出0入0汤圆

 楼主| 发表于 2012-7-29 11:35:20 | 显示全部楼层
大侠们快来帮帮忙啊!我实在不明白了

出0入0汤圆

发表于 2012-8-5 23:12:55 | 显示全部楼层
解决了没有?我的看法:1,如果怀疑延时的问题,则用简单的延时,如:void delay(int t) { u8 i; u8 j; for(i=0;i<t;i++)  for(...)}. 一试便知。2,硬件问题,检测电路,查看L298 BLOCK DIAGRAM,查看分析IN1,IN2,IN3,IN4 引脚的波形等。3,软件仿真,直接用Keil 中的逻辑分析。呵呵,等待LZ的结果哦!

出0入0汤圆

 楼主| 发表于 2012-8-13 19:12:23 | 显示全部楼层
geiter001 发表于 2012-8-5 23:12
解决了没有?我的看法:1,如果怀疑延时的问题,则用简单的延时,如:void delay(int t) { u8 i; u8 j; for(i ...

似乎就是延时的问题。用系统定时器就是不好使,而用FOR循环则可以,真是想不明白,难道是库函数版本不同?

出0入0汤圆

发表于 2012-8-13 19:49:14 | 显示全部楼层
编译器优化问题,一般优化等级太高,或者自己关键变量未加 volatile 声明
自己查看对应的汇编就知道了

出0入0汤圆

发表于 2013-3-26 19:26:26 | 显示全部楼层
延时要弄好,要不就不会转

出0入0汤圆

发表于 2013-9-7 22:44:19 | 显示全部楼层
.titrwh 发表于 2012-7-28 16:42
这个不一定是软件问题,最起码上电路图让大家知道你是用什么电路驱动的,用哪些端口,你这样只给个程序, ...

求教您一个问题 我现在使用42步进电机 SWT-201驱动器 8细分 以前控制步进电机没有使用过细分驱动 现在不是很明白 我让一个端口产生PWM   然后做一个定时 然后把这个端口PWM占空比置0  我单次让他旋转相应的度数都没问题 但是如果让他正转一个度数 再反转的时候 感觉转不到相应度数 求教
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-4 02:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表