打印

小车终于能动了!

[复制链接]
17371|89
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxcscm|  楼主 | 2011-8-6 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自收到套件以来,就开始鼓捣这个小车。途中坏了一个电烙铁,万用表用光了电,少了个电容,跑了趟电子城,断断续续的,在吸收了二姨家各位大神经验的基础上,到现在终于实现了部分功能。
今天七夕节,也是俺和小s的第一次,依照二姨家各位大神的经验,尝试了各种方法,终于摸清了小s的底细,使得小车能够前后左右的跑了。
今后正式开始软件调试,接下来逐步实现测速、红外壁障、无线遥控……直到最后两轮站立,还要依仗各位大神的帮助啊。


此贴为证,今后逐一晒出俺的调试经历,也欢迎各位大神拍砖~

相关帖子

来自 2楼
zxcscm|  楼主 | 2011-8-8 09:14 | 只看该作者

附件传不了,源码也贴不上!!!

本帖最后由 zxcscm 于 2011-8-8 09:24 编辑

附件怎么传不上来呢?老是说:请求来路不正确,无法提交!  这是肿么了???


#include <SH88F2051.H>
#define uchar unsigned char
#define uint unsigned int

/* L293D控制口定义 */
sbit MA=P4^0;  
sbit MB=P4^1;
sbit MC=P4^2;
sbit MD=P3^7;
sbit EN12=P3^5;
sbit EN34=P3^2;
#define LMotor_Forward {MA = 1;MB = 0;EN12 = 1;} //左电机前进
#define RMotor_Forward {MC = 1;MD = 0;EN34 = 1;} //右电机前进
#define LMotor_Backward {MA = 0;MB = 1;EN12 = 1;} //左电机后退
#define RMotor_Backward {MC = 0;MD = 1;EN34 = 1;} //右电机后退
#define LMotor_Stop {MA = 0;MB = 0;EN12 = 0;} //左电机1停
#define RMotor_Stop {MC = 0;MD = 0;EN34 = 0;} //右电机2停
/*******变量定义*******/
unsigned char tmp1,tmp2;  //PWM控制变量
unsigned char m1,m2,t;    //m1,m2控制占空比,t控制周期。
unsigned char key_value;  //按键值
unsigned char temp;
void delay10ms(void) //延时10ms子程序
{
unsigned char i,j,z;
for(z=5;z>0;z--)
for(i=4;i>0;i--)
for(j=248;j>0;j--);
}
void delay(unsigned int n)
{
  unsigned char i,j;
while(n --)
for(i = 200;i > 0;i --)
for(j = 200;j > 0;j --);
}
void Accelerate(unsigned char speed1) //加速
{
    m2=0;
    for(m1=0;m1<=speed1;m1++)
    {
        delay10ms();
delay10ms();
        m2++;
    }
}
void Decelerate(unsigned char speed1) //减速
{
    for(m1;(m1>speed1)||(m2>speed1);m1--)
    {
        delay10ms();
delay10ms();
        m2--;
    }
}
void KeyScan()
{
    static unsigned char press_time;
    unsigned char key_temp;
    key_temp=P1&0xf8;
    if(key_temp!=0xf8)
    {
        press_time++;
        if(press_time==30)
        {
            key_value=P1&0xf8;   
        }
        else if(press_time>30)
            press_time=40;
    }
    else
    {
        press_time=0;
    }        
}
void Scan()
{
;
}
main()
{
TMOD=0x02; /* 设定T0的工作模式为2 */
    TH0=0x9B; /* 装入定时器的初值 */
    TL0=0x9B; //用于产生100hz的pwm波,这个定时值是按12M晶振12系统分频写的
    EA=1; /* 开中断 */
    ET0=1; /* 定时器0允许中断 */
    //TR0=1; /* 启动定时器0 */
    m1=50;
    m2=50;
Scan();
KeyScan();
    while(1)
    {
        temp=P3&0x03; //红外接在P1.0和P1.1
        switch(temp)
        {
            case 0x03: LMotor_Forward;RMotor_Forward; break;  //前进
            case 0x01: LMotor_Forward;RMotor_Backward;TR0=1;delay(6);break;  //右转
            case 0x02: RMotor_Forward;LMotor_Backward;TR0=1;delay(6); break;   //左转
     case 0x00: LMotor_Backward;RMotor_Backward;delay(6); break;  //后退
            default: break;
        }
LMotor_Forward;RMotor_Forward;key_value=0;TR0=1;  //前进;
//delay(10);
    }
}
void timer0() interrupt 1 /* T0中断服务程序 */
{
    if(t==0) /* 1个PWM周期完成后才会接受新数值 */
    {
        tmp1=m1;
        tmp2=m2;
    }
    if(t<tmp1)  EN12=1; else EN12=0; /* 产生电机1的PWM信号 */
    if(t<tmp2)  EN34=1; else EN34=0; /* 产生电机2的PWM信号 */
    t++;
    if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */
}

终于贴上了,看来发帖也是门学问呐~~~

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
Chaos_zc + 1
Cortex-M0 + 1
板凳
jcsasm| | 2011-8-6 20:30 | 只看该作者
恭喜!俺也争取今晚上电试试

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
wangchuankai + 1 我很赞同
地板
lord_fan| | 2011-8-6 20:31 | 只看该作者
哎。对两个传感器及其电路还没头绪。

使用特权

评论回复
5
jcsasm| | 2011-8-7 01:16 | 只看该作者
全部芯片插上后,只有一个轮子狂转,呵呵!下载线这块 刚弄完!熬夜真是件痛苦的事!

使用特权

评论回复
6
laoxu| | 2011-8-7 09:27 | 只看该作者
全部芯片插上后,只有一个轮子狂转,呵呵!下载线这块 刚弄完!熬夜真是件痛苦的事!
jcsasm 发表于 2011-8-7 01:16


如用PWM控制转速,只要在P7端口中间4,5脚之间插个短路插,即OK了!

两个轮子对称转,要快就快,想慢就慢,由PWM输出脉宽决定。

使用特权

评论回复
7
zxcscm|  楼主 | 2011-8-8 09:11 | 只看该作者
8.7 红外壁障调试出来了,程序借用了wzr200408 童鞋的思路,先把程序传上来吧,还有很多需要修改的地方, 也欢迎各位继续拍砖。

实际运行有个小问题,红外不太好使,有时灵敏,有时特钝,继续努力吧

使用特权

评论回复
8
wzr200408| | 2011-8-8 09:41 | 只看该作者
哈哈,赞一个

使用特权

评论回复
9
wzr200408| | 2011-8-8 09:51 | 只看该作者
壁障的那几个管我还没装呢,怕回学校的时候弄坏了

使用特权

评论回复
10
Cortex-M0| | 2011-8-8 11:23 | 只看该作者
哈哈!

不错,顶LZ~~~ :victory:

使用特权

评论回复
11
wzr200408| | 2011-8-8 13:29 | 只看该作者
请教一下,你的硬件连接是怎样的?
key_scan那里有点不懂
另外PWM那里,如果是100HZ的话,10MS定时一次,50*10 = 0.5S。
0.5S动一次?

使用特权

评论回复
12
yqg80| | 2011-8-8 14:16 | 只看该作者
好厉害啊,要是真正搞定了,一定要上视频啊。

使用特权

评论回复
13
zxcscm|  楼主 | 2011-8-8 15:44 | 只看该作者
请教一下,你的硬件连接是怎样的?
key_scan那里有点不懂
另外PWM那里,如果是100HZ的话,10MS定时一次,50*10 = 0.5S。
0.5S动一次?
wzr200408 发表于 2011-8-8 13:29


硬件上将P13的1脚和P14的1脚分别用杜邦线连到单片机的P3.0,P3.1,P13、P14的另外脚都接地。

key_scan是我在电脑仿真用的,不用管它,完全可以删了

PWM,100HZ是按普通单片机12m晶振、12分频算的,每1us计数一次。初值9B=155,也就是定时器每100us中断一次。同时t++。直到t=100,也就是经过100us*100=10ms,一个周期结束。
最好画个时序图就明白了。

ps:现在才发现定时器初值应该为9C,不然定时值是101us了。

使用特权

评论回复
14
batloveshan| | 2011-8-8 18:52 | 只看该作者
赞一个,目前在准备全国电子设计大赛,小车只是车体装了下,等过了这阵子立马转上小车:D

使用特权

评论回复
15
wzr200408| | 2011-8-9 00:06 | 只看该作者
我也发现红外很迟钝,不知道是红外迟钝还是程序问题,现在速度不能跑快了,跑快了根本反应不过来,100HZ的频率不行,抖动很严重,我试过用200HZ的,抖动少了,不过扭矩太小

使用特权

评论回复
16
程序匠人| | 2011-8-9 13:20 | 只看该作者
不错不错,继续努力!

使用特权

评论回复
17
Chaos_zc| | 2011-8-9 14:12 | 只看该作者
哈哈,赞一个

使用特权

评论回复
18
lttian| | 2011-8-10 17:16 | 只看该作者
赞一个~~哈哈

使用特权

评论回复
19
Cortex-M0| | 2011-8-12 04:47 | 只看该作者
期待LZ下一步作品

使用特权

评论回复
20
Cortex-M0| | 2011-8-12 05:17 | 只看该作者
zxcscm ,  wzr200408 两位小盆友,感谢你们对二姨的支持!

由于你们的努力,二姨家的《两轮自平衡车+智能小车DIY》开源活动火爆进行着,已成功完成了《智能小车》预定计划三个版本其中的一个------循迹型智能小车。

《智能小车》计划中的三个版本简介:
1. 循迹型智能小车,可通过底部的两对光电传感器,完成循迹规定动作,其他功能需自行添加。
2. 避障走迷宫型智能小车,可通过侧面的两对光电传感器,外加前面一套光电传感器,完成避障走迷宫规定动作,其他功能需自己添加。
3. 带遥控的智能小车,可通过无线遥控器控制小车前进、后退、左转、右转,其他功能需自己添加。

能否再接再励,帮忙完成第二个《智能小车》预定版本------避障走迷宫型智能小车。
注:《智能小车》两侧面已预留了两对测距避障光电传感器,头站原PCB板没位置预留,需另配一个光电传感器装上,如同意帮忙,完成第二个《智能小车》预定版本DEMO程序------避障走迷宫型智能小车。

俺送你们一个标准版光电传感器,在小车头部位置,装上即可完成避障走迷宫型智能小车的基本硬件配置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

628

帖子

1

粉丝