小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 12245|回复: 17

[求助] 步进电机L298N控制程序编制问题

[复制链接]
发表于 2014-4-13 16:28:01 | 显示全部楼层 |阅读模式

近日准备制作一个WiFi小车,有两个直流电机一个步进电机,利用论坛上的源码进行修改,直流电机没问题,步进电机单独一直正转或反转也没问题,就不知怎么控制?本人编程菜鸟,折腾了几天没成功,希望各位大侠相助,帮我把代码改下,谢谢!

硬件配置: 论坛一代驱动板,芯片STC11F32XE;L298N 电机驱动模块;2相4线步进电机,型号35HS2808A4.
目标动作:上位机控制步进电机正反转,停止。(比如FF020200FF等三个指令)
问题:如何用一个上位机指令去控制4个端口驱动步进电机动作?

1、实物接线图:
20140413_153825.jpg

2、config.h 增加内容:
sbit SMOTOR_A=P2^0;
sbit SMOTOR_B=P2^1;
sbit SMOTOR_A1=P3^6;
sbit SMOTOR_B1=P3^7;

3、main.c 文件:
/*
版权声明:
WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
By WIFI机器人网·机器人创意工作室
*/
#include "stc_new_8051.h"
#include "motor.h"
#include "uart.h"
#include <stdio.h>
#include "type.h"
#include "timer.h"

#define uint unsigned int

uint y,z;
void delayms(uint);


void main(void)
{
        UART_init();
        
        /* 定时器0作为舵机专用,不建议更改配置 */
        Timer0_Init();
        /* 定时器1为自由状态,用户可灵活使用 */
        Timer1_Init();
        Motor_Init();

       if(y==1)
        {
        while(1)
        {
    SMOTOR_A=1;
    SMOTOR_B=1;
    SMOTOR_A1=0;
    SMOTOR_B1=0;
        delayms(10);
     SMOTOR_A=0;
    SMOTOR_B=1;
    SMOTOR_A1=1;
    SMOTOR_B1=0;
        delayms(10);
        SMOTOR_A=0;
    SMOTOR_B=0;
    SMOTOR_A1=1;
    SMOTOR_B1=1;
        delayms(10);
        SMOTOR_A=1;
    SMOTOR_B=0;
    SMOTOR_A1=0;
    SMOTOR_B1=1;
        delayms(10);
        }
}
    else if (z==1)
   {
    while(1)
        {
        SMOTOR_A=1;
    SMOTOR_B=0;
    SMOTOR_A1=0;
    SMOTOR_B1=1;
        delayms(10);
        SMOTOR_A=0;
    SMOTOR_B=0;
    SMOTOR_A1=1;
    SMOTOR_B1=1;
        delayms(10);
        SMOTOR_A=0;
    SMOTOR_B=1;
    SMOTOR_A1=1;
    SMOTOR_B1=0;
        delayms(10);
        SMOTOR_A=1;
    SMOTOR_B=1;
    SMOTOR_A1=0;
    SMOTOR_B1=0;
        delayms(10);
        }
        }

}

void delayms(unsigned int xms)
{
   uint i, j;
   for(i=xms;i>0;i--)
   for(j=100;j>0;j--);
}

4、Motor.h 文件:
/*
版权声明:
WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
By WIFI机器人网·机器人创意工作室
*/
#ifndef _MOTOR_H_
#define _MOTOR_H_

#include "type.h"
#include "config.h"

void Motor_Init(void);

#define MOTOR_GO_FORWARD   MOTOR_A_CON1=0;MOTOR_A_CON2=1;MOTOR_B_CON1=0;MOTOR_B_CON2=1;LED1=0;LED2=1;LED3=1;LED4=1                                    
#define MOTOR_GO_BACK           MOTOR_A_CON1=1;MOTOR_A_CON2=0;MOTOR_B_CON1=1;MOTOR_B_CON2=0;LED1=1;LED2=0;LED3=1;LED4=1
#define MOTOR_GO_RIGHT           MOTOR_A_CON1=1;MOTOR_A_CON2=0;MOTOR_B_CON1=0;MOTOR_B_CON2=1;LED1=1;LED2=1;LED3=0;LED4=1
#define MOTOR_GO_LEFT           MOTOR_A_CON1=0;MOTOR_A_CON2=1;MOTOR_B_CON1=1;MOTOR_B_CON2=0;LED1=1;LED2=1;LED3=1;LED4=0
#define MOTOR_GO_STOP           MOTOR_A_CON1=0;MOTOR_A_CON2=0;MOTOR_B_CON1=0;MOTOR_B_CON2=0;LED1=1;LED2=1;LED3=1;LED4=1
#define SMOTOR_FORWARD     y=1;
#define SMOTOR_BACK              z=1;
#define SMOTOR_STOP        SMOTOR_A=0;SMOTOR_B=0;SMOTOR_A1=0;SMOTOR_B1=0;

#endif

5、Uart.c 增加内容
        else if(buffer[0]==0x02)
        {
                switch(buffer[1])
                {
                        case 0x01:SMOTOR_FORWARD; return;
                        case 0x02:SMOTOR_BACK;    return;
                        case 0x00:SMOTOR_STOP;    return;
                        default: return;
                }        
        }

6、Keil 4 错误提醒:

11.JPG



回复

使用道具 举报

发表于 2014-4-14 10:27:31 | 显示全部楼层
本帖最后由 白鹭湖 于 2014-4-14 13:23 编辑

define用法错了,在config.h中定义一下y和z两个变量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-14 17:53:43 | 显示全部楼层
谢谢指教,是不是config.h中加入下面两行? 但是试了,还是同样的错误,谢谢!

#define uint y
#define uint z
回复 支持 反对

使用道具 举报

发表于 2014-4-15 12:19:23 | 显示全部楼层
加入这行
unsigned int y, z;
回复 支持 反对

使用道具 举报

发表于 2014-4-15 12:48:22 | 显示全部楼层
define后面是没有分号的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-15 19:04:52 | 显示全部楼层
已经加入,把;号也去掉了,出现新的错误如下:   另外请问下,这个程序修改的思路对吗?

Build target 'Target 1'
compiling main.c...
compiling motor.c...
compiling timer.c...
compiling uart.c...
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Z
    MODULE:  motor.obj (MOTOR)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Y
    MODULE:  motor.obj (MOTOR)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Z
    MODULE:  timer.obj (TIMER)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Y
    MODULE:  timer.obj (TIMER)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Z
    MODULE:  uart.obj (UART)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Y
    MODULE:  uart.obj (UART)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAY_MS?TIMER
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_UART_SEND?UART
Program Size: data=47.0 xdata=0 code=1302
Target not created
回复 支持 反对

使用道具 举报

发表于 2014-4-16 12:18:40 | 显示全部楼层
你定义的变量yz是主函数变量,不是全局变量。。所以
这一行“unsigned int y, z;”要放到main函数里面吧。。。。个人意见。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-16 12:19:56 | 显示全部楼层
针对你那个报错信息你参考一下下面的网址,貌似是因为变量重复定义。。。

http://www.cnblogs.com/hnrainll/archive/2011/01/23/1942411.html
回复 支持 反对

使用道具 举报

发表于 2014-4-16 12:21:47 | 显示全部楼层
还有就是楼主你定义的管脚在程序的其他部分有没有被使用。。。。楼主需要加强C的学习。。。。顶顶楼主。。。思路还不错
回复 支持 反对

使用道具 举报

发表于 2014-4-16 18:19:41 | 显示全部楼层
你若在一个C文件中使用另一个C文件中定义的变量,需要用extern 关键字申明。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 05:11 , Processed in 1.086288 second(s), 22 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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