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

 找回密码
 立即注册
查看: 13458|回复: 10

各位帮我看下我的陀机程序有没有问题

[复制链接]
发表于 2012-7-28 20:19:16 | 显示全部楼层 |阅读模式
我的陀机不知道为什么接上电源,地和控制信号还是不转,用电源线碰一下就动一下,我用的电源是手机的直充,输出是5v880ma,我用另外一个5v450ma的它就不停的抖,
#include<reg52.h>
sbit pwm1=P1^0;//陀机1的控制端
sbit pwm2=P1^1;//陀机2的控制端
int aa1=0,b=30,c=50; //aa1:陀机脉宽基准次数,b:陀机1的角度控制,c:陀

机2的角度控制
int q=0;
/*******************************************************************

*
* 名称 : chuankouchu()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
********************************************************************

***/
void chuankouchu()
{
T2CON=0x30;//t2z作波特率发生器
TL2=0xdc;
TH2=0xff;
RCAP2L=0xdc;
RCAP2H=0xff;
SCON=0x50;//串口工作在方式1,并且REN=1
TR2=1;
EA=1;
ES=1;
}
/*******************************************************************

*
* 名称 : chuankouzhongduan()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
********************************************************************

***/
//串口中断程序
chuankouzhongduan()interrupt 4
{

chuankoushuju[q]=SBUF;
if(0xff==chuankoushuju[0])//检测是否数据包头

q++;

if(q==5)
q=0;

RI=0;


}
/*******************************************************************

*
* 名称 : dinshi0()
* 功能 : 初次化定时器0晶振11.0592,定时0.05ms,
* 输入 : 无
* 输出 : 无
********************************************************************

***/

void dinshi0()
{
TMOD=0X02;
TL0=0xd1;
TH0=0Xd1;
EA=1;
ET0=1;
TR0=1;

}
/*******************************************************************

*
* 名称 :tuojiPWM()
* 功能 : PWM脉宽控制函数,0.05ms为基准
* 输入 : 无
* 输出 : 无
********************************************************************

***/
tuojiPWM()interrupt 1
{
++aa1;//每0.05毫秒+1
if(aa1==b)
pwm1=!pwm1;
if(aa1==c)
pwm2=!pwm2;
if(aa1==400)//够400个0.05ms,即一个周期(20ms),重新计数
{
pwm1=!pwm1;
pwm2=!pwm2;
aa1=0;
}

}
//主程序
void main()
{
chuankouchu();//串口初始化
dinshi0();//初始化T1(陀机)
while(1)
{
if(chuankoushuju[4]==0xff)//检测数据包尾
{
a=chuankoushuju[2];//把接收到的数据处理
a=a<<8;
b=chuankoushuju[3];

switch(a=a+b)//根据接收到的内容做相应得动作


{
case 0x0005:
if(b<50)//50对应180度因为是50个0.05ms
b=b+10;break;//陀机角度加
case  0x0006:
if(b>10)//10对应0度,因为是10个0.05ms
b=b-10;break;//陀机角度减


}
chuankoushuju[4]=0;//清数据包头,尾
chuankoushuju[0]=0;

}

}



}
这里我只贴出陀机的部分,其他前进后退那些没贴出,


回复

使用道具 举报

发表于 2012-7-28 21:07:11 | 显示全部楼层
那么你上位机发送的指令是什么呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-30 23:31:30 | 显示全部楼层
我没设计这功能,因为我都想不到要向上位机传回什么信息,你有没有什么好的建议说说,还有我的程序有没有什么问题,不知道为什么,陀机控制端有时会死机的,一直输出低电平。
回复 支持 反对

使用道具 举报

发表于 2012-7-30 23:38:57 | 显示全部楼层
我问的是,你上位机向下位机发的命令格式是怎样的?以此判断是否你因为命令格式问题导致下位机程序跑飞。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-30 23:58:34 | 显示全部楼层
上位机向下位机发的命令格式FF000001FF,前后的四个FF是数据包的头和尾,0001是数据位,对应相应的动作,还有一个00没用的,数据采用5字节的格式是为了对应路由器每隔一段时间都会发的指令FF EF EF EE FF,都不知道怎么关掉那指令,还有有什么用的
回复 支持 反对

使用道具 举报

发表于 2012-7-31 07:42:23 | 显示全部楼层
本帖最后由 泰州搜宝 于 2012-7-31 07:43 编辑

太高深了,一大堆E文,看不懂,呵呵~
这个指令格式好像在置顶贴里面有的吧

回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 12:08:38 | 显示全部楼层
是啊,我那个数据包就是按照置顶贴的思路来写的,
回复 支持 反对

使用道具 举报

发表于 2012-8-12 17:16:09 | 显示全部楼层
愤怒的狮子 发表于 2012-7-30 23:58
上位机向下位机发的命令格式FF000001FF,前后的四个FF是数据包的头和尾,0001是数据位,对应相应的动作,还有 ...

格式不对,数据位是第3位,所以应该是FF 00 01 00 FF,其中01是数据位,每两位两位为一个数据位的。FF EF EF EF FF是心跳包,维持长连接用的,不能关掉。
回复 支持 反对

使用道具 举报

发表于 2012-8-12 19:46:12 | 显示全部楼层
愤怒的狮子 发表于 2012-7-31 12:08
是啊,我那个数据包就是按照置顶贴的思路来写的,

请问是哪个帖子?发给我好吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-12 23:39:41 | 显示全部楼层
liuviking 发表于 2012-8-12 17:16
格式不对,数据位是第3位,所以应该是FF 00 01 00 FF,其中01是数据位,每两位两位为一个数据位的。FF EF ...

没有不对吧,因为我在上位机软件里把要发送的数据 设置成FF000001FF,我发现如果舵机控制按的太快就会出现舵机的控制口一直输出高电平,要单片机复位才行,但其他的IO口是正常的,这算死机吗?是不是要在串口中断里把EA=0啊?还是在改变舵机的PWM脉宽后延时一段时间,好让舵机有足够的时间转动,但这时间要多少?怎么算,还望指点下。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 05:31 , Processed in 1.113074 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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