智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6324|回复: 13
打印 上一主题 下一主题

STC12C5A60S2从航模遥控器接收机模捕获PPM信号失败,请各位帮助看看问题在哪?

[复制链接]

5

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
589
QQ
威望
185
贡献
348
兑换币
117
注册时间
2013-11-20
在线时间
28 小时
跳转到指定楼层
1#
发表于 2014-1-7 00:42:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DIY个瓦力机器人,硬件已完工,可是软件调试失败!

从航模遥控器获取信号到STC12C5A60S2,再由单片机输出PWM信号到L298N驱动板,驱动2个履带前进后退,实现加减速、直行、拐弯、原地转等功能。
现电路部分连接完成,但在调试时拨动遥控器的摇杆,俩轮子没有任何反应,大家帮助看看问题出在哪?

万事具备,只欠程序的瓦力机器人。






从航模遥控器接收机到单片机的连接(捕获PWM信号的线),我只是把接收机的1、2通道的连接舵机的线(本来是红、黑、白三根)中的白色线对应的接头,用杜邦线连到单片机,不知对不对?




程序是直接借用极客迷论坛上azurexfak兄的程序,只不过他用的是STC12C2052AD,我使用的是STC12C5A60S2,把引脚更改了一下(在此向azurexfak兄致敬)。


#include"STC12C5A60S2.H"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit input1=P3^0;        //P3.0 纵向信号输入                           
sbit input2=P3^1;        //P3.1 横向信号输入                           
sbit output11=P2^0;                                       
sbit output12=P2^1;                                       
sbit output21=P2^2;
sbit output22=P2^3;
bit no1=1,no2=1,leftup=0,leftdown=0;
bit rightup=0,rightdown=0;
uint no5=0,no6=0;
uchar i;
char no7=0,no8=0,no9=0,no10=0;
char no11=0,no12=0;
void timer();
void zx();
void hx();
void hh();
void sc();
void main()
{                                                      
     P1M0=0x00;   //由于要在P1.3和P1.4输出PWM,故把P3.7和P3.5设为推挽输出。
     P1M1=0x18;   //同上。
     AUXR=0x80;   //计数器工作在1T模式(计数速度与晶振频率相同)
     TMOD=0x02;   //计数器0工作在方式2(自动装入计数值模式)
     TH0=254;     //PWM模块输出频率约为23KHz
     TL0=254;
     EA=1;
     ET0=1;
     CMOD=0x05;                                             
     CCON=0x40;                                             
     CCAPM0=0x42;                                            
     CCAPM1=0x42;                                            
     CCAP0H=0xff;                                            
     CCAP0L=0xff;                                            
     CCAP1H=0xff;                                            
     CCAP1L=0xff;                                            
     TR0=1;
     while(1)
     {
          if((input1&no1)==1)                                //纵向通道扫描
          {
               while(input1==1)
               {
                    no5++;
                    timer();
               }
               no1=0;
          }
          if((input2&no2)==1)                                //横向通道扫描
          {
               while(input2==1)
               {
                    no6++;
                    timer();
               }
               no2=0;
          }
          if((no1|no2)==0)                                   //单次扫描完成判断
          {
               no1=1;
               no2=1;
               zx();
               hx();
               hh();
               sc();
               output11=leftup;                              //每次对扫描得到的数据处理完成之后对电机方向控制端口进行置位
               output12=leftdown;                            //同上
               output21=rightup;                             //同上
               output22=rightdown;                           //同上
               no5=0;
               no6=0;
          }
     }
}
void timer()                                                
{
     for(i=18;i>0;i--);
         _nop_();
         _nop_();                                                         
         _nop_();                                                         
}
void zx()      //纵向摇杆信号处理子程序
{
     if(no5<115)
     {
          no7=-7;
          no8=-7;
     }
     else if(no5>=115&&no5<120)
     {
          no7=-6;
          no8=-6;
     }
     else if(no5>=120&&no5<125)
     {
          no7=-5;
          no8=-5;
     }
     else if(no5>=125&&no5<130)
     {
          no7=-4;
          no8=-4;
     }
     else if(no5>=130&&no5<135)
     {
          no7=-3;
          no8=-3;
     }
     else if(no5>=135&&no5<140)
     {
          no7=-2;
          no8=-2;
     }
     else if(no5>=140&&no5<145)
     {
          no7=-1;
          no8=-1;
     }
     else if(no5>=145&&no5<=155)
     {
          no7=0;
          no8=0;
     }
     else if(no5>155&&no5<=160)
     {
          no7=1;
          no8=1;
     }
     else if(no5>160&&no5<=165)
     {
          no7=2;
          no8=2;
     }
     else if(no5>165&&no5<=170)
     {
          no7=3;
          no8=3;
     }else if(no5>=170&&no5<175)
     {
          no7=4;
          no8=4;
     }
     else if(no5>=175&&no5<180)
     {
          no7=5;
          no8=5;
     }
     else if(no5>=180&&no5<185)
     {
          no7=6;
          no8=6;
     }
     else
     {
          no7=7;
          no8=7;
     }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

5

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
589
QQ
威望
185
贡献
348
兑换币
117
注册时间
2013-11-20
在线时间
28 小时
2#
 楼主| 发表于 2014-1-7 00:49:17 | 只看该作者
帖子在编辑过程中退出好几次,结果发现很多图片都重复发了,也编辑不了,大家只能将就看了
回复 支持 反对

使用道具 举报

12

主题

621

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6697
威望
4237
贡献
746
兑换币
2329
注册时间
2011-7-22
在线时间
857 小时
3#
发表于 2014-1-7 01:53:57 | 只看该作者
示波器慢慢测应该能找到信号短在哪里。机械赞一个,怎么不用STM32的芯片印个板,这样走线漂亮还能扩展很多功能
回复 支持 反对

使用道具 举报

25

主题

1217

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
27554

论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章资源大师奖章

QQ
威望
18751
贡献
5861
兑换币
3255
注册时间
2012-6-6
在线时间
1471 小时
4#
发表于 2014-1-7 08:54:00 | 只看该作者
机器人挺不错的
回复 支持 反对

使用道具 举报

137

主题

4169

帖子

1

精华

杰出人士

我认为最省轮子的跑法最快。曾经的西科4队

Rank: 12Rank: 12Rank: 12

积分
14006
QQ
威望
6233
贡献
1229
兑换币
4171
注册时间
2013-1-10
在线时间
3272 小时
5#
发表于 2014-1-7 09:26:34 | 只看该作者
定时10us中断,每次中断检查高低电平,若高,cnt++,若低,且cnt!=0,把cnt赋给另一个变量x,把cnt清零。x的值就是捕获的高电平时间,x*10us。屡试不爽。
回复 支持 反对

使用道具 举报

137

主题

4169

帖子

1

精华

杰出人士

我认为最省轮子的跑法最快。曾经的西科4队

Rank: 12Rank: 12Rank: 12

积分
14006
QQ
威望
6233
贡献
1229
兑换币
4171
注册时间
2013-1-10
在线时间
3272 小时
6#
发表于 2014-1-7 09:33:21 | 只看该作者
如果只是开关控制电机,定时100us就够了,不过注意准确设置前进后退阈值。如果pwm调速控制电机,最好定时50us以下时间,模拟输出pwm时也可以用借鉴上边捕获pwm的方法。
回复 支持 反对

使用道具 举报

17

主题

778

帖子

0

精华

跨届大侠

教育部高等学校自动化专业教学指导委员会特派员

Rank: 10Rank: 10Rank: 10

积分
9114

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章资源大师奖章

威望
6932
贡献
266
兑换币
1202
注册时间
2012-3-14
在线时间
958 小时
7#
发表于 2014-1-7 11:58:17 | 只看该作者
土豪,我们做朋友吧,上门指导。
回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
589
QQ
威望
185
贡献
348
兑换币
117
注册时间
2013-11-20
在线时间
28 小时
8#
 楼主| 发表于 2014-1-7 19:20:04 | 只看该作者
k40368 发表于 2014-1-7 01:53
示波器慢慢测应该能找到信号短在哪里。机械赞一个,怎么不用STM32的芯片印个板,这样走线漂亮还能扩展很多功 ...

恩,回头用示波器测测。多谢指点。
我单片机菜鸟,对51单片机还相对熟一些,STM32不太了解。
回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
589
QQ
威望
185
贡献
348
兑换币
117
注册时间
2013-11-20
在线时间
28 小时
9#
 楼主| 发表于 2014-1-7 19:21:14 | 只看该作者
以梦为马 发表于 2014-1-7 11:58
土豪,我们做朋友吧,上门指导。

上门当然欢迎了,住宿吃饭我来安排,就怕付钱都没有人帮助改程序啊。


回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
589
QQ
威望
185
贡献
348
兑换币
117
注册时间
2013-11-20
在线时间
28 小时
10#
 楼主| 发表于 2014-1-7 19:21:47 | 只看该作者
以梦为马 发表于 2014-1-7 11:58
土豪,我们做朋友吧,上门指导。

上门当然欢迎了,住宿吃饭我来安排,就怕付钱都没有人来帮忙啊

回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-28 11:00 , Processed in 0.078203 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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