《12PWM机器人.docx》由会员分享,可在线阅读,更多相关《12PWM机器人.docx(19页珍藏版)》请在优知文库上搜索。
1、一种具有12路PWM直流电机的串口遥控机器人技术领域本实用新型涉及一种一种具有12路PWM直流电机的串口遥控机器人,尤其是一种可以用 串口无线WIFI遥控的智能机器人。背景技术现有常规遥控机人按照无线电信号的遥控进行动作,也可以按照存储在寄存器里面的程 序动作,但是动作电机较少,一般只有4路PWM直流电机,这对机器人的行动带来很大的不 便。一种具有12路PWM直流电机的串口遥控机器人是一种具有12路PWM直流电机的机器人, 操作者可以使用计算机串口 WIFI信号对它的12路直流电机进行遥控,它也可以按照其控制 电路中的24C04铁电存储器里面的数据,在STCl 1F60单片机的控制下进行动作。
2、实用新型内容为了解决常规遥控机器人动作电机较少的缺点,一种具有12路PWM直流电机的串口遥控 机器人提供了一种具有12路PWM直流电机进行串口 WIFI信号遥控动作的机器人。它可以按 照电路中的24C04铁电存储器里面的数据,在STCllF60单片机的控制下进行动作,也可以按 照操作人员计算机串口 WIFI信号的遥控进行动作。由于它具有12路PWM直流电机,所以它 可以进行行走,抬手,伸手等多种动作。本实用新型解决其技术问题所采用的技术方案是:一种具有12路PWM直流电机的串口遥 控机器人是一种可以被WIFI串口信号遥控的机器人。它依靠外壳下面装配的12路PWN直流 电机在操作人员的计算机串口
3、 WIFI信号的遥控下进行的转动进行各种动作,它可以在电机的 转动下进行移动,行走,抬手等等动作。同时,它也可以按照控制电路中的24C04铁电存储 器里面的数据,在STCIlF60单片机(1)的控制下进行电机的转动等动作。它的控制电路如 图 1 所示。在图 1 中,STCIIF60 单片机(1)的 PI 中的 P1.0, Pl. 1, Pl. 2, Pl. 3, Pl. 4, Pl. 5, Pl. 6, PL 7 端口,P3 中的 P3. 2, P3. 5, P3. 6, P3. 7 端口在定时器 TIMEo 产生 12 路 PWM 方 波,上面总共12路IO 口,每个IO 产生一路PWM信号
4、,总共12路PWM控制方波信号。WIFl 模块(2)连接在单片机STCIlF60 (1)的串口上面,它接收操作人员发出的数据,然后单片 机STCIlF60 (1)按照程序减少或增加PwM方波的占空比。同时单片机(1)按照铁电存储器 24C04 (3)中的数据控制上面的PWM方波信号。单片机STCl 1F60的控制程序是在keill4编译环境下,通过C语言编译并通过串口下载 到单片机STCIlF60。程序代码如下:*程序思路说明:*1* 关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为IKHZ,这样定时中断次 数* 设定为C=IO,即0. OlMS中断一次,则THO=FF, TL0=
5、F6;由于设定中断时间为0. Olms, 这样可以设定占空比可从 ITOO 变化。即 0. Olms* 100= Ims*/include include * define uchar unsigned charinclude define OP,READ Oxal /器件地址以及读取操作ttdefineOPJrRITE OxaO/器件地址以及写入操作defineMAX.ADDR 0x7f/ AT24C02 最大地址2 * THO和TLO是计数器0的高8位和低8位计数器,计算办法:TLO= (65536-C)%256;* THO= (65536-C)/256,其中C为所要计数的次数即多长时间产
6、生一次中断;TMOD是计数 器*工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长 时*间为ImS*65536=65.536ms*/ttdefine V_THO OXFF define V_TLO 0XF6 define V_TMOD 0X01 define V_TH1 OXFF define V_TL1 0XF6 ttdefine V_TH2 OXFF Sdefine V_TL2 0XF6unsigned char code dis_code = 0x7e, Oxbd, Oxdb, 0xe7, Oxdb, Oxbd, 0x7e, Oxff);/写入到AT2
7、4C01的数据串sbit SDA = P34;sbit SCL = P3-3;void start ();void stop ();unsigned char shin();bit shout(unsigned char write_data);unsigned char read_random(unsigned char random_addr);void write_byte( unsigned char addr, unsigned char write_data);void fi1l_byte(unsigned char fill_data);void delayms(unsigned
8、 char ms);void init_sys(void) ;*系统初始化函数*/void Delay5Ms(void);unsignedcharZKBl, ZKB2, ZKB3, ZKB4, ZKB5, ZKB6, ZKB7, ZKB8, ZKB9, ZKBlO, ZKBll, ZKB12, ZKB13, ZKB14, ZKB15 ,ZKB16, ZKB17, ZKB18; unsignedcharZKB19, ZKB20, ZKB21, ZKB22, ZKB23, ZKB24, ZKB25, ZKB26, ZKB27, ZKB28, ZKB29, ZKB30, ZKB31, ZK B32;
9、 unsigned char key_s, key_v, tmp, tmpl; charcodestr = 0x7e, Oxbd, Oxdb, 0xe7, Oxdb, Oxbd, 0x7e, Oxff, 0x7e, Oxbd, Oxdb, 0xe7, Oxdb, Oxbd, 0x7 e, Oxff, 0x7e, Oxbd, Oxdb, 0xe7, Oxdb, Oxbd, 0x7e, Oxff);void send_str ();bit scan_key();void proc_key ();void delayms(unsigned char ms);void send_char(unsign
10、ed char txd);unsigned char i; unsigned char p; unsigned char pl=0x00,p2, p3, p4; void main (void) ( init_sys();ZKB1=4O;*占空比初始值设定*/ZKB2=70;*占空比初始值设定*/ZKB3=20;/*占空比初始值设定*/ZKB4=70;/*占空比初始值设定*/ZKB5=30;/*占空比初始值设定*/ZKB6=70;/*占空比初始值设定*/ZKB7=80;/*占空比初始值设定*/ZKB8=70;/*占空比初始值设定*/ZKB9=50;/*占空比初始值设定*/ZKB10=70;/*
11、占空比初始值设定*/ZKBl 1=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=40;ZKB28=40;ZKB29=40;ZKB30=70;ZKB31=60;ZKB3
12、2=70;SDA = 1;SCL = 1;/ fill_byte(OxOO);while(1)(if(RI)(RI = O;tmp = SBUF;*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/*占空比初始值设定*/全部填充Oxff/是否有数据到来/暂存接收到的数据/ tmpI=SBUF+;/ d i s_codei=SBUF;/数据传送到PO 口/ str1
13、=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 = str i;write_byte(0X01, tmpl);i+;/下一个字符P2 =
14、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) 如果按了+键,增加占空比(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