《12PWM机器人.docx》由会员分享,可在线阅读,更多相关《12PWM机器人.docx(20页珍藏版)》请在优知文库上搜索。
1、一种具有12路PWM直流电机的串口遥控机器人技术领域本实用新型涉及一种一种具有12路PWM直流电机的串口遥控机器人,尤其是一种可以用串口无线WIFI遥控的智能机器人。背景技术现有常规遥控机人按照无线电信号的遥控进行动作,也可以按照存储在寄存器里面的程序动作,但是动作电机较少,一般只有4路PWM直流电机,这对机器人的行动带来很大的不便。一种具有12路PWM直流电机的串口遥控机器人是一种具有12路PWM直流电机的机器人,操作者可以使用计算机串口WIFI信号对它的12路直流电机进行遥控,它也可以按照其控制电路中的24C04铁电存储器里面的数据,在STCl1F60单片机的控制下进行动作。实用新型内容为
2、了解决常规遥控机器人动作电机较少的缺点,一种具有12路PWM直流电机的串口遥控机器人提供了一种具有12路PWM直流电机进行串口WIFI信号遥控动作的机器人。它可以按照电路中的24C04铁电存储器里面的数据,在STCllF60单片机的控制下进行动作,也可以按照操作人员计算机串口WIFI信号的遥控进行动作。由于它具有12路PWM直流电机,所以它可以进行行走,抬手,伸手等多种动作。本实用新型解决其技术问题所采用的技术方案是:一种具有12路PWM直流电机的串口遥控机器人是一种可以被WIFI串口信号遥控的机器人。它依靠外壳下面装配的12路PWN直流电机在操作人员的计算机串口WIFI信号的遥控下进行的转动
3、进行各种动作,它可以在电机的转动下进行移动,行走,抬手等等动作。同时,它也可以按照控制电路中的24C04铁电存储器里面的数据,在STCIlF60单片机(1)的控制下进行电机的转动等动作。它的控制电路如图1所示。在图1中,STCIIF60单片机(1)的PI中的P1.0,Pl.1,Pl.2,Pl.3,Pl.4,Pl.5,Pl.6,PL7端口,P3中的P3.2,P3.5,P3.6,P3.7端口在定时器TIMEo产生12路PWM方波,上面总共12路IO口,每个IO产生一路PWM信号,总共12路PWM控制方波信号。WIFl模块(2)连接在单片机STCIlF60(1)的串口上面,它接收操作人员发出的数据,
4、然后单片机STCIlF60(1)按照程序减少或增加PwM方波的占空比。同时单片机(1)按照铁电存储器24C04(3)中的数据控制上面的PWM方波信号。单片机STCl1F60的控制程序是在keill4编译环境下,通过C语言编译并通过串口下载到单片机STCIlF60。程序代码如下:*程序思路说明:*1* 关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为IKHZ,这样定时中断次数* 设定为C=IO,即0.OlMS中断一次,则THO=FF,TL0=F6;由于设定中断时间为0.Olms,这样可以设定占空比可从ITOO变化。即0.Olms*100=Ims*/includeinclude* de
5、fineucharunsignedcharincludedefineOP,READOxal/器件地址以及读取操作ttdefineOPJrRITEOxaO/器件地址以及写入操作defineMAX.ADDR0x7f/AT24C02最大地址2 *THO和TLO是计数器0的高8位和低8位计数器,计算办法:TLO=(65536-C)%256;*THO=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时*间为ImS*65536=65.536ms*/ttdefineV_THOOX
6、FFdefineV_TLO0XF6defineV_TMOD0X01defineV_TH1OXFFdefineV_TL10XF6ttdefineV_TH2OXFFSdefineV_TL20XF6unsignedcharcodedis_code=0x7e,Oxbd,Oxdb,0xe7,Oxdb,Oxbd,0x7e,Oxff);/写入到AT24C01的数据串sbitSDA=P34;sbitSCL=P3-3;voidstart();voidstop();unsignedcharshin();bitshout(unsignedcharwrite_data);unsignedcharread_random
7、(unsignedcharrandom_addr);voidwrite_byte(unsignedcharaddr,unsignedcharwrite_data);voidfi1l_byte(unsignedcharfill_data);voiddelayms(unsignedcharms);voidinit_sys(void);*系统初始化函数*/voidDelay5Ms(void);unsignedcharZKBl,ZKB2,ZKB3,ZKB4,ZKB5,ZKB6,ZKB7,ZKB8,ZKB9,ZKBlO,ZKBll,ZKB12,ZKB13,ZKB14,ZKB15,ZKB16,ZKB17,
8、ZKB18;unsignedcharZKB19,ZKB20,ZKB21,ZKB22,ZKB23,ZKB24,ZKB25,ZKB26,ZKB27,ZKB28,ZKB29,ZKB30,ZKB31,ZKB32;unsignedcharkey_s,key_v,tmp,tmpl;charcodestr=0x7e,Oxbd,Oxdb,0xe7,Oxdb,Oxbd,0x7e,Oxff,0x7e,Oxbd,Oxdb,0xe7,Oxdb,Oxbd,0x7e,Oxff,0x7e,Oxbd,Oxdb,0xe7,Oxdb,Oxbd,0x7e,Oxff);voidsend_str();bitscan_key();voi
9、dproc_key();voiddelayms(unsignedcharms);voidsend_char(unsignedchartxd);unsignedchari;unsignedcharp;unsignedcharpl=0x00,p2,p3,p4;voidmain(void)(init_sys();ZKB1=4O;*占空比初始值设定*/ZKB2=70;*占空比初始值设定*/ZKB3=20;/*占空比初始值设定*/ZKB4=70;/*占空比初始值设定*/ZKB5=30;/*占空比初始值设定*/ZKB6=70;/*占空比初始值设定*/ZKB7=80;/*占空比初始值设定*/ZKB8=70;
10、/*占空比初始值设定*/ZKB9=50;/*占空比初始值设定*/ZKB10=70;/*占空比初始值设定*/ZKBl1=40;/*占空比初始值设定*/ZKB12=40;/*占空比初始值设定*/ZKB13=40;/*占空比初始值设定*/ZKB14=70;/*占空比初始值设定*/ZKB15=60;/*占空比初始值设定*/ZKB16=70;/*占空比初始值设定*/ZKB17=40;/*占空比初始值设定*/ZKB18=70;/*占空比初始值设定*/ZKB19=20;ZKB20=70;ZKB21=30;ZKB22=70;ZKB23=80;ZKB24=70;ZKB25=50;ZKB26=70;ZKB27=4
11、0;ZKB28=40;ZKB29=40;ZKB30=70;ZKB31=60;ZKB32=70;SDA = 1;SCL = 1;/ fill_byte(OxOO);while(1)(if(RI)(RI = O;tmp = SBUF;*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/全部填充Oxff/是否有数据到来/暂存接收到的数据/tmpI=
12、SBUF+;/dis_codei=SBUF;/数据传送到PO口/str1=SBUF;write_byte(0X00,tmp);/write_byte(0X00,strl);/write_byte(0X01,tmpl);PO=read_random(0X00);/循环读取24Cxx内容,并输出到PO口/P2=read_random(0X01);pl=read_random(0X00);/p2=read_random(0X01);/delayms(250);/回传接收到的数据send_char(tmp);/send_str()tmpl=stri;write_byte(0X01,tmpl);i+;/
13、下一个字符P2=read_random(0X01);/循环读取24Cxx内容,并输出到Po口if(!P0_0)如果按了+键,增加占空比(Delay5Ms();if(!P0_0)(ZKBl-;/ZKB1=90;)Iif(!P0_l)如果按了+键,增加占空比(Delay5Ms();if(!P0_l)(ZKB1+;/ZKB1=20;)if(!P0.2)如果按了+键,增加占空比(Delay5Ms();if(!P0_2)(ZKB2;/ZKB1=90;)if(!P0_3)如果按了+键,增加占空比(Delay5Ms();if(!P0_3)(ZKB2+;/ZKB1=20;)if(!P0_4)如果按了+键,增加
14、占空比(Delay5Ms();if(!P0_4)(ZKB3;/ZKB1=90;)Iif(!P0_5)如果按了+键,增加占空比(Delay5Ms();if(!P0_5)(ZKB3+;/ZKB1=20;)if(!P0_6)如果按了+键,增加占空比(Delay5Ms();if(!P0_6)(ZKB4;/ZKB1=90;)Iif(!P0_7)如果按了+键,增加占空比(Delay5Ms();if(!P0_7)(ZKB4+;/ZKB1=20;)if(!P2_0)如果按了+键,增加占空比Delay5Ms();if(!P2_0)ZKB5;/ZKB1=90;)if(!P2_1)如果按了+键,增加占空比(Delay5Ms();if(!P2_1)(ZKB5+;/ZKB1=20;)/if(!SBUF)如果按了一键,减少占空比/Delay5Ms();/if(SBUF=0x02)/ZKBl-;/)/)/*对占空比值限定范围*/if(ZKBl99)ZKBl=I;/if(ZKBKl)ZKB1=99;)*函数功能:对系统进行初始化,包括定时器初始化