文档库 最新最全的文档下载
当前位置:文档库 › STM32使用FSMC控制NAND flash 例程

STM32使用FSMC控制NAND flash 例程

STM32使用FSMC控制NAND flash 例程
STM32使用FSMC控制NAND flash 例程

本文原创于观海听涛,原作者版权所有,转载请注明出处。

近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B),我要用到的FLASH为1G bit的大页(2K),多走了两天弯路。以下笔记将说明如何将默认固件库修改为大页模式以驱动大容量NAND,并作驱动。

本文硬件:控制器:STM32F103ZET6,存储器:HY27UF081G2A

首先说一下NOR与NAND存储器的区别,此类区别网上有很多,在此仅大致说明:

1、Nor读取速度比NAND稍快

2、Nand写入速度比Nor快很多

3、NAND擦除速度(4ms)远快于Nor(5s)

4、Nor 带有SRAM接口,有足够的地址引脚来寻址,可以很轻松的挂接到CPU地址和数据总线上,对CPU要求低

5、NAND用八个(或十六个)引脚串行读取数据,数据总线地址总线复用,通常需要CPU支持驱动,且较为复杂

6、Nor主要占据1-16M容量市场,并且可以片内执行,适合代码存储

7、NAND占据8-128M及以上市场,通常用来作数据存储

8、NAND便宜一些

9、NAND寿命比Nor长

10、NAND会产生坏块,需要做坏块处理和ECC

更详细区别请继续百度,以上内容部分摘自神舟三号开发板手册

下面是NAND的存储结构:

由此图可看出NAND存储结构为立体式

正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同。

需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash 的擦写,而擦写则是以一个block为单位的。

我们这次使用的HY27UF081G2A其PDF介绍:

Memory Cell Array

= (2K+64) Bytes x 64 Pages x 1,024 Blocks

由此可见,该NAND每页2K,共64页,1024块。其中:每页中的2K为主容量Data Field,64bit为额外容量Spare Field。Spare Field用于存贮检验码和其他信息用的,并不能存放实际的数据。由此可算出系统总容量为2K*64*1024=134217728个byte,即1Gbit。NAND闪存颗粒硬件接口:

由此图可见,此颗粒为八位总线,地址数据复用,芯片为SOP48封装。

软件驱动:(此部分写的是伪码,仅用于解释含义,可用代码参见附件)

主程序:

1. #define BUFFER_SIZE 0x2000 //此部分定义缓冲区大小,即一次写入的数据

2. #define NAND_HY_MakerID 0xAD //NAND厂商号

3. #define NAND_HY_DeviceID 0xF1 //NAND器件号

4. /*配置与SRAM连接的FSMC BANK2 NAND*/

5. NAND_Init();

6. /*读取Nand Flash ID并打印*/

7. NAND_ReadID(&NAND_ID);

复制代码

Tips:NAND器件的ID包含四部分:

1st Manufacturer Code

2nd Device Identifier

3rd Internal chip number, cell Type, Number of Simultaneously Programmed

pages.

4th Page size, spare size, Block size, Organization

1. if((NAND_ID.Maker_ID == NAND_HY_MakerID) && (NAND_ID.Device_ID == NAND_HY_DeviceID)) //判断器件符合

2. {

3. /*设置NAND FLASH的写地址*/

4. WriteReadAddr.Zone = 0x00;

5. WriteReadAddr.Block = 0x00;

6. WriteReadAddr.Page = 0x05;

7. /*擦除待写入数据的块*/

8. status = NAND_EraseBlock(WriteReadAddr); //写入前必须擦出

9. /*将写Nand Flash的数据BUFFER填充为从0x25开始的连续递增的一串数据*/

10. Fill_Buffer(TxBuffer, BUFFER_SIZE , 0x25); //填充数据以测试

11. /*将数据写入到Nand Flash中。WriteReadAddr:读写的起始地址*/

12. status = NAND_WriteSmallPage(TxBuffer, WriteReadAddr, PageNumber); //主要写入函数,此部分默认为小页需要修改

13. /*从Nand Flash中读回刚写入的数据。 riteReadAddr:读写的起始地址*/

14. status = NAND_ReadSmallPage (RxBuffer, WriteReadAddr, PageNumber); //读取主要函数,也需要修改

15.

16. /*判断读回的数据与写入的数据是否一致*/

17. for(j = 0; j < BUFFER_SIZE; j++)

18. {

19. if(TxBuffer[j] != RxBuffer[j])

20. {

21. WriteReadStatus++;

22. }

23. }

24.

25. if (WriteReadStatus == 0)

26. {

27. printf("\n\r Nand Flash读写访问成功");

28. GPIO_ResetBits(GPIO_LED, DS2_PIN);

29. }

30. else

31. {

32. printf("\n\r Nand Flash读写访问失败");

33. printf("0x%x",WriteReadStatus);

34.

35. GPIO_ResetBits(GPIO_LED, DS3_PIN);

36.

37. }

38. }

39. else

40. {

41. printf("\n\r 没有检测到Nand Flash的ID");

42. GPIO_ResetBits(GPIO_LED, DS4_PIN);

43. }

复制代码

fsmc_nand.c文件:

1. void NAND_Init(void)

2. {

3. GPIO_InitTypeDef GPIO_InitStructure;

4. FSMC_NAND_PCCARDTimingInitTypeDef p;

5. FSMC_NANDInitTypeDef FSMC_NANDInitStructure;

6.

7. /*FSMC总线使用的GPIO组时钟使能*/

8. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |

9. RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);

10.

11. /*FSMC CLE, ALE, D0->D3, NOE, NWE and NCE2初始化,推挽复用输出*/

12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 |

13. GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |

14. GPIO_Pin_7;

15. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

16. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

17. GPIO_Init(GPIOD, &GPIO_InitStructure);

18. /*FSMC数据线FSMC_D[4:7]初始化,推挽复用输出*/

19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;

20. GPIO_Init(GPIOE, &GPIO_InitStructure);

21. /*FSMC NWAIT初始化,输入上拉*/

22. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

23. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

24. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

25. GPIO_Init(GPIOD, &GPIO_InitStructure);

26. /*FSMC INT2初始化,输入上拉*/

27. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

28. GPIO_Init(GPIOG, &GPIO_InitStructure);

29. /*--------------FSMC 总线存储器参数配置------------------------------*/

30. p.FSMC_SetupTime = 0x1; //建立时间

31. p.FSMC_WaitSetupTime = 0x3; //等待时间

32. p.FSMC_HoldSetupTime = 0x2; //保持时间

33. p.FSMC_HiZSetupTime = 0x1; //高阻建立时间

34. FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND; //使用FSMC BANK2

35. FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Enable; //使能FSMC的等待功能

36. FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //NAND Flash的数据宽度为8位

37. FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable; //使能ECC特性

38. FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_2048Bytes; //ECC页大小2048

39. FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;

40. FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x00;

41. FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;

42. FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;

43. FSMC_NANDInit(&FSMC_NANDInitStructure);

44. /*!使能FSMC BANK2 */

45. FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);

46. }

复制代码

1. void NAND_ReadID(NAND_IDTypeDef* NAND_ID)

2. {

3. uint32_t data = 0;

4. /*!< Send Command to the command area */

5. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = 0x90;

6. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;

7. /*!< Sequence to read ID from NAND flash */

8. data = *(__IO uint32_t *)(Bank_NAND_ADDR | DATA_AREA);

9. NAND_ID->Maker_ID = ADDR_1st_CYCLE (data);//四个周期读取四个ID

10. NAND_ID->Device_ID = ADDR_2nd_CYCLE (data);

11. NAND_ID->Third_ID = ADDR_3rd_CYCLE (data);

12. NAND_ID->Fourth_ID = ADDR_4th_CYCLE (data);

13. }

复制代码

1. uint32_t NAND_WriteSmallPage(uint8_t *pBuffer, NAND_ADDRESS Address, uint32_t NumPageToWrite)

2. {//传入参数:写入数据,写入初始地址,要写几页

3. uint32_t index = 0x00, numpagewritten = 0x00, addressstatus = NAND_VALID_ADDRESS;

4. uint32_t status = NAND_READY, size = 0x00;

5. while((NumPageToWrite != 0x00) && (addressstatus == NAND_VALID_ADDRESS) && (status == NAND_READY))

6. {

7. /*!< Page write command and address */

8. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_A;

9. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE0;

10. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;

11. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;//添加此句

12. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);

13. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);

14. // *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);//原版有此句

15. /*!< Calculate the size */

16. size = NAND_PAGE_SIZE + (NAND_PAGE_SIZE * numpagewritten);//统计写入数目

17. /*!< Write data */

18. for(; index < size; index++)

19. {

20. *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = pBuffer[index];

21. }

22.

23. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE_TRUE1;

24. /*!< Check status for successful operation */

25. status = NAND_GetStatus();

26.

27. if(status == NAND_READY)

28. {

29. numpagewritten++;

30. NumPageToWrite--;

31. /*!< Calculate Next small page Address */

32. addressstatus = NAND_AddressIncrement(&Address);

33. }

34. }

35.

36. return (status | addressstatus);

37. }

复制代码

读取函数同理修改

1. uint32_t NAND_EraseBlock(NAND_ADDRESS Address)

2. {

3. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_ERASE0;

4. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);

5. *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);

6. // *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);//两次即可

7. *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_ERASE1;

8. return (NAND_GetStatus());

9. }

复制代码

fsmc_nand.h文件:

1. #define NAND_PAGE_SIZE ((uint16_t)0x0800) /* 512 bytes per page w/o Spare Area *///每页2K

2. #define NAND_BLOCK_SIZE ((uint16_t)0x0040) /* 32x512 bytes pages per block *///64个页

3. #define NAND_ZONE_SIZE ((uint16_t)0x0400) /* 1024 Block per zone *///1024个快

4. #define NAND_SPARE_AREA_SIZE ((uint16_t)0x0040) /* last 16 bytes as spare area */

5. #define NAND_MAX_ZONE ((uint16_t)0x0001) /* 4 zones of 1024 block */

复制代码

修改完即可实现512B至2K每页的变更

飞鸿16路舵机控制器使用说明书

FH24路舵机控制器使用说明书 飞鸿科技 2012-5-24 一、产品介绍 (1) 二、功能特点 (3) 三、接口说明 (4) 四、指令说明 (6) 五、16路舵机调试软件使用说明 (7) 二、连接PC上位机 (9) 三、上位机界面编辑 (10) 四、单路舵机调试 (11) 五、动作组编辑 (12) 六、注意事项及故障解决 (13) 产品介绍 一、 一、产品介绍 设计该舵机控制板是为了方便新手学习多路舵机的控制。多路舵机控制并不很复杂,但至今网上关于多路舵机控制的资源很少,当前淘宝上的舵机控制板也都不提供程序代码。由于这些原因,大批的机器人爱好者不能掌握多路舵机控制。使得很多机器人爱好者停滞不前,在这些最基本的地方浪费大量时间,不能不精力放到更高层的机器人控制方面的研究。如果每个人

都从头做起,整体的进步必将非常的缓慢。别人做好的东西我们不妨拿来学习,这样要节省很多的时间与精力。在这个基础上继续前进,做出属于自己的更高级的机器人。 由于本人在这些基础的东西上耗费的大量的精力,导致我没有时间去做高级的控制,如自平衡,语音识别等。大学接近尾声,没能让自己的机器人进一步升级感到非常遗憾。 基于方便学习的原则,本板子的设计有一下几个特点: 1、选用大家熟悉的,容易掌握的51单片机。但不是普通51单片机,是功能强大的增强型单片机STC12C5A60S2。 有人说51控制的精度肯定不如ARM。是的,这是明显的事实。但是我用ARM的芯片来写教程,只能给少数人看,而且如果那个人ARM掌握的都很好了,也不需要看此教程了。该控制板设计的目的就是给机器人初级爱好者学习,仅仅因为这一点,选择51单片机是最恰当不过了。 我最初做的32路舵机控制板就是在arm芯片上做的,那些不适合新手学习,在51上学会了舵机控制的基本方法,等你会使用更高级单片机的时候可以很容易的移植到上面,实现更多舵机,更高精度的控制。 STC12C5A60S2单片机属于增强型51。他兼容传统的51单片机,也就是说,你原来的学习的、编写的51程序不用改动就能在这个单片机上直接使用,不会出现问题,而且速度提高8~12倍。但是它与传统51相比,在速度性能与资源方面都有了很大的提升。 (1)60K的flash程序存储器。89C52只有8K。 (2)1280字节的SRAM。你课本上学的RAM只有128字节。1280足够用了,省去外部扩展的麻烦。 (3)两个串口。 (4)独立波特率发生器。做机器人定时器往往很不够用,而传统51单片机串口通信还要占用定时器,有了独立波特率发生器就可以节省出一个定时器。 (5)PCA模块。可以硬件输出快速PWM。可以扩展出两个定时器。 (6)8路A/D转换通道。A/D转换在机器人、各种比赛中都很常用,使用这款单片机就不必再做AD转换电路。 2、程序下载接口、IO口引出。该板是单片机最小系统板+16路舵机控制板。不是单纯的舵机控制板,而是一款可以用来学习、编程、二次开发的开发板。可以直接用来参加比赛,DIY,毕业设计。 5、详细的教程,丰富的资料。该板子是淘宝中唯一提供程序代码、可以学习的舵机控制板。提供原理图、接口示意图、程序代码、上位机软件。另外购买该产品赠送本人搜集的单片机开发常用工具软件,机器人资料,单片机视频教程以及丰富的例程。

舵机及舵机的控制

舵机及舵机的控制 1.什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 还是看看具体的实物比较过瘾一点: 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的:

0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧: 这只是一种参考数值,具体的参数,请参见舵机的技术参数。 小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。

舵机控制板使用说明(中文)

舵机控制板使用说明V1.2 产品特点 ●采用32位ARM 内核的处理器芯片 ●独创的在线升级机制,用户可以在线升级固件 ●自动识别波特率 ●采用USB和UART通讯接口 ●1us的控制精度(相当于舵机的0.09度) ●可以同时同步控制32个舵机(24路舵机控制板可以同时同步控制24个,16路舵机控制板可以同时 同步控制16个舵机) ●内置512K 存储芯片,可存储上百个动作组 ●功能强大的电脑软件(内置3种语言,简体中文、繁体中文、英语) ●拥有Android手机控制软件 供电 舵机控制板需要2个电源: 舵机电源和芯片电源 舵机电源(正极):VS(图中3号位置的蓝色接线端子的左端) 舵机电源(负极):GND(图中3号位置的蓝色接线端子的中间) 舵机电源的参数根据实际所接舵机的参数而定,如TR213舵机的供电电压是4.8-7.2V,那么舵机电源就可以用电压在4.8-7.2V之间的电源。 芯片电源(正极):VSS(图中3号位置的蓝色接线端子的右端)

芯片电源(负极):GND(图中3号位置的蓝色接线端子的中间) VSS的要求是6.5-12V,如果芯片供电是从VSS端口输入的,那么电源的电压必须是6.5-12V之间。 另外: 1. 图中2号位置的USB接口可以给芯片供电,所以USB接口和VSS端口,任选其一即可。 2. 图中1号位置也可以给芯片供电,标记为5V和GND,5V是正极,GND是负极,供电电源的电压必 须是5V。 3. 图中1、2、3号位置都可以给芯片供电,任选其一即可。 4. 图中4号位置的绿色LED灯是芯片电源正常的指示灯,绿色灯亮,表示芯片供电正常,绿色灯灭,表 示芯片供电异常。 5. 图中5号位置的绿色LED灯是舵机电源正常的指示灯,绿色灯亮,表示舵机供电正常,绿色灯灭,表 示舵机供电异常。 如果需要控制舵机,2个绿色的LED灯都亮是前提条件。

舵机原理及其使用详解

舵机的原理,以及数码舵机VS模拟舵机 一、舵机的原理 标准的舵机有3条导线,分别是:电源线、地线、控制线,如图2所示。 以日本FUTABA-S3003型舵机为例,图1是FUFABA-S3003型舵机的内部电路。 3003舵机的工作原理是:PWM信号由接收通道进入信号解调电路BA6688的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送入电机驱动集成电路BAL6686,以驱动电机正反转。当电机转动时,通过级联减速齿轮带动电位器Rw1旋转,直到电压差为O,电机停止转动。 舵机的控制信号是PWM信号,利用占空比的变化,改变舵机的位置。 有个很有趣的技术话题可以稍微提一下,就是BA6688是有EMF控制的,主要用途是控制在高速时候电机最大转速。 原理是这样的:

收到1个脉冲以后,BA6688内部也产生1个以5K电位器实际电压为基准的脉冲,2个脉冲比较以后展宽,输出给驱动使用。当输出足够时候,马达就开始加速,马达就能产生EMF,这个和转速成正比的。 因为取的是中心电压,所以正常不能检测到的,但是运行以后就电平发生倾斜,就能检测出来。超过EMF 判断电压时候就减小展宽,甚至关闭,让马达减速或者停车。这样的好处是可以避免过冲现象(就是到了定位点还继续走,然后回头,再靠近) 一些国产便宜舵机用的便宜的芯片,就没有EMF控制,马达、齿轮的机械惯性就容易发生过冲现象,产生抖舵 电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V,一般取5V。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20ms(即频率为50Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示。

舵机的相关原理与控制原理

1.什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧:

这只是一种参考数值,具体的参数,请参见舵机的技术参数。 小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。 为什么FPPA就可以很方便地将脉宽的精度精确地控制在2微秒甚至2微秒一下呢。主要还是 delay memory这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加1个指令周期(数据0出外,详情请参见delay指令使用注意事项)因为是8位的数据存储单元,所以memory中的数据为(0~255),记得前面有提过,舵机的角度级数一般为1024级,所以只

舵机的工作原理以及控制

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20m s,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧: 这只是一种参考数值,具体的参数,请参见舵机的技术参数。

小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。为什么FPPA就可以很方便地将脉宽的精度精确地控制在2微秒甚至2微秒一下呢。主要还是delay memory这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加1个指令周期(数据0出外,详情请参见delay指令使用注意事项)因为是8位的数据存储单元,所以memory中的数据为(0~255),记得前面有提过,舵机的角度级数一般为1024级,所以只用一个存储空间来存储延时参数好像还不够用的,所以我们可以采用2个内存单元来存放舵机的角度伺服参数了。所以这样一来,我们可以采用这样 舵机驱动的应用场合: 1. 高档遥控仿真车,至少得包括左转和右转功能,高精度的角度控制,必然给你最真实的驾车体验. 传统舵机、数字舵机与纯数字舵机 传统舵机的控制方式以20ms 为一个周期,用一个1.5ms±0.5ms 的脉冲来控制舵机的角度变化,随着以CPU 为主的数字革命的兴起,现在的舵机已成为模拟舵机和数字舵机并存的局面,但即使是现在的数字舵机,其控制接口也还是传统的1.5ms±0.5ms 的模拟控制接口,只是控制芯片不再是普通的模拟芯片而已;不能完全发挥现代数字化控制的优势,这在传统的遥控竞赛等领域,为了保持产品的兼容性,不得不保留模拟接口,而在一些新兴的领域完全可以采用新型的全数字接口的纯数字舵机。纯数字舵机采用全新的单线双工通讯协议,不仅能执行普通舵机的全部功能,还可以作为一个角度传感器,监测舵机的实际位置,而且可以多个舵机并联互不影响。在未来的自动化控制领域有着不可估量的优势。采用纯数字舵机构建的自动化控制系统,不仅可以大幅提升系统性能,而且可以降低系统的生产维护成本,提高产品性价比,增强市场竞争力。 简单认识数码舵机

舵机控制详解

舵机控制详解 Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】

本人学习了一段时间的舵机,将自己所遇到的问题与解决方案和大家分享一下,希望对初学者有所帮助!!!! 一、舵机介绍 1、舵机结构 舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。 舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文 servo。 舵机组成:舵盘、减速齿轮、位置反馈电位计、直流电机、控制电路板等。 舵盘 上壳 齿轮组 中壳 电机 控制电路 控制线 下壳 工作原理:控制信号控制电路板电机转动齿轮组减速 舵盘转动位置反馈电位器控制电路板反馈 简单的工作原理是控制电路接收信号源的控制信号,并驱动电机转动; 齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍 数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角 度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动 到目标角度或保持在目标角度。 舵机接线方法:三线接线法:(1)黑线(地线) 红线(电源线)两个标准:和6V 蓝线/黄线(信号线) (2)棕线(地线) 红线(电源线)两个标准:和6V

黄线(信号线) 二、舵机PWM信号介绍 1、PWM信号的定义 PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。 关于舵机PWM信号的基本样式如下图 其PWM格式注意的几个要点: (1)上升沿最少为,为之间; (2)控制舵机的PWM信号周期为20ms; 2.PWM信号控制精度制定 1 DIV = 8uS ; 250DIV=2mS PWM上升沿函数: + N×DIV 0uS ≤ N×DIV ≤ 2mS ≤ +N×DIV ≤ 3、舵机位置控制方法 舵机的转角达到185度,由于采用8为CPU控制,所以控制精度最大为256份。目 8位AT89C52CPU,其数 据分辨率为256,那么经过 舵机极限参数实验,得到应 该将其划分为250份。 那么的宽度为2mS = 2000uS。 2000uS÷250=8uS 则:PWM的控制精度为8us 我们可以以8uS为单位 递增控制舵机转动与定位。 舵机可以转动185度, 那么185度÷250=度, 则:舵机的控制精度为度

MG996R舵机控制

MG996R舵机控制方法 红:+5v,棕:GND,黄:信号 基于单片机的舵机控制方法具有简单、精度高、成本低、体积小的特点,并可根据不同的舵机数量加以灵活应用 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。 图1 舵机的控制要求 舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图1 所示。 单片机实现舵机转角控制 可以使用FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求。

也可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。 当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。 具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18m,s 所以开始时在控制口发送高电平,然后设置定时器在 2ms 后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。 为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。 软件流程如图2 所示。

舵机控制板使用说明

舵机控制板使用说明V1.3 产品特点 ●采用32位ARM 内核的处理器芯片 ●独创的在线升级机制,用户可以在线升级固件 ●自动识别波特率 ●采用USB和UART通讯接口 ●1us的控制精度(相当于舵机的0.09度) ●可以同时同步控制32个舵机(24路舵机控制板可以同时同步控制24个,16路舵机控制板可以同时 同步控制16个舵机) ●内置512K 存储芯片,可存储上百个动作组 ●功能强大的电脑软件(内置3种语言,简体中文、繁体中文、英语) ●拥有Android手机控制软件(需配合蓝牙模块使用) 供电 舵机控制板需要2个电源: 舵机电源和芯片电源(舵机的功率比较大,所以不建议共用一个电源) 舵机电源(正极):VS(图中3号位置的蓝色接线端子的右端) 舵机电源(负极):GND(图中3号位置的蓝色接线端子的中间) 舵机电源的参数根据实际所接舵机的参数而定,如TR213舵机的供电电压是4.8-7.2V,那么舵机电源就可以用电压在4.8-7.2V之间的电源。 芯片电源(正极):VSS(图中3号位置的蓝色接线端子的左端)

芯片电源(负极):GND(图中3号位置的蓝色接线端子的中间) VSS的要求是6.5-12V,如果芯片供电是从VSS端口输入的,那么电源的电压必须是6.5-12V之间。 另外: 1. 图中2号位置的USB接口可以给芯片供电,所以USB接口和VSS端口,任选其一即可。 2. 图中1号位置也可以给芯片供电,标记为5V和GND,5V是正极,GND是负极,供电电源的电压必 须是5V。 3. 图中1、2、3号位置都可以给芯片供电,任选其一即可。(但是要严格按照它们的范围供电) 4. 图中4号位置的绿色LED灯是芯片电源正常的指示灯,绿色灯亮,表示芯片供电正常,绿色灯灭,表 示芯片供电异常。 5. 图中5号位置的绿色LED灯是舵机电源正常的指示灯,绿色灯亮,表示舵机供电正常,绿色灯灭,表 示舵机供电异常。 如果需要控制舵机,2个绿色的LED灯都亮是前提条件。

舵机控制详解修订稿

舵机控制详解 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-

本人学习了一段时间的舵机,将自己所遇到的问题与解决方案和大家分享一下,希望对初学者有所帮助!!!! 一、舵机介绍 1、舵机结构 舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。 舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文 servo。 舵机组成:舵盘、减速齿轮、位置反馈电位计、直流电机、控制电路板等。 舵盘 上壳 齿轮组 中壳 电机 控制电路 控制线 下壳 工作原理:控制信号控制电路板电机转动齿轮组减速 舵盘转动位置反馈电位器控制电路板反馈 简单的工作原理是控制电路接收信号源的控制信号,并驱动电机转动; 齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍 数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角 度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动 到目标角度或保持在目标角度。 舵机接线方法:三线接线法:(1)黑线(地线) 红线(电源线)两个标准:和6V 蓝线/黄线(信号线) (2)棕线(地线) 红线(电源线)两个标准:和6V

黄线(信号线) 二、舵机PWM信号介绍 1、PWM信号的定义 PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。 关于舵机PWM信号的基本样式如下图 其PWM格式注意的几个要点: (1)上升沿最少为,为之间; (2)控制舵机的PWM信号周期为20ms; 2.PWM信号控制精度制定 1 DIV = 8uS ; 250DIV=2mS PWM上升沿函数: + N×DIV 0uS ≤ N×DIV ≤ 2mS ≤ +N×DIV ≤ 3、舵机位置控制方法 舵机的转角达到185度,由于采用8为CPU控制,所以控制精度最大为256份。目 8位AT89C52CPU,其 数据分辨率为256,那么经 过舵机极限参数实验,得到 应该将其划分为250份。 那么的宽度为2mS = 2000uS。 2000uS÷250=8uS

舵机控制软件使用说明

舵机控制软件使用说明 一、驱动安装 1、运行驱动程序文件夹下的CDM.exe文件,驱动所需的文件将自动复 制到系统目录中。 2、连接控制板USB线,系统将自动识别,并且安装驱动程序。 3、安装好后会在生成一个虚拟的串口,串口号可以到设备管理器->端口 找到。 二、软件使用 1、端口 打开舵机控制软件,如果前面的USB驱动安装正确,在端口下拉框中就会显示串口号COMxx(xx表示编号),选择好端口后按连接。 2、Box (每个BOX对应一路舵机) 1、拖动Box里的滑竿,控制板的LED灯就会闪烁。如果连上舵机(舵机供 电也需要连上),舵机将跟随滑竿动作。 2、打开软件时,默认BOX将会分4行并排显示,并且BOX是不能被拖动 的。 3、BOX手动布局 单击“BOX布局设置->进入BOX编辑模式”进入BOX编辑模式。在此模式下,可以拖动BOX位置、隐藏\显示BOX. 隐藏\显示BOX 单击对应的按钮,将可以隐藏\显示BOX。

4、BOX设置 设置对话框。 单击BOX上的按钮,将弹出Box设置 名称----BOX标题栏上显示的名字。 颜色----BOX外观颜色。 设置滑竿移动范围----用来限制BOX上滑竿可以移动的范围(可以有效防止调正动作中,超过一些舵机的极限值,造成对舵机的损伤)。 5、布局好所需的BOX后,点击“BOX布局设置->进入BOX编辑模式”后,将锁定BOX的位置。单击“工程->保存”就可以保存BOX布局。

控制板是以动作组的方式来管理动作数据,最多可以管理128组,编号是0-127,每一组动作可以保存255步。每一步至少要包含一路舵机,最多可以32路。 通过软件生成动作数据前,必须要先添加动作序列。 单击“动作序列->添加”后,将弹出 动作组编号----就是下载到控制板,动作组的编号范围是0-127 存储起始地址----动作下载到控制板存储器的起始地址。起始地址不能低于256,不能高于65535-此组动作占用空间。 通过调整BOX的位置,改变舵机的位置,使舵机到达需要的位置。 单击“步->添加”可以记录当前舵机位置,继续调整下一步动,继续添加…. 测试连续动作 动作编辑中或编辑好后,需要测试连续运动的状况,来观察动作是否正确。 单击可以测试连续的运作状况。

8路舵机控制板使用说明书

8路舵机控制板TH-PWM1008使用说明书 首先非常感谢选用顶强电子实验室研制开发的8路舵机控制板。 TH-PWM1008拥有8路舵机PWM信号输出,可以同时对8路舵机进行任意角度的控制,本产品具有精度高,输出波形稳定及可扩展等特点。 1.规格参数: 工作温度:0到70度 工作湿度:5%-95% 额定电源:DC,5V-13V 输出路数:8路/块,可扩展,最多可并联8块板子,形成64路输出 定时精度:1uS 2.连接器定义: 2.1.舵机控制连接器J1到J8: 第1脚:GND 第2脚:VBA T 第3脚:PWM 2.2.电源输入连接器J16和J22: 第1脚:VBA T 第2脚:GND 2.3.RS232信号连接器J15和J17: 第1脚:RXD 第2脚:GND 2.4.控制板地址选择跳线J9、J10和J11: 通过跳线,可以选择控制板的地址,具体的方法如下表所示: J11 J10 J9 控制板地址 断开断开断开0 断开断开短路 1 断开短路断开 2 断开短路短路 3 短路断开断开 4 短路断开短路 5 短路短路断开 6 短路短路短路7 控制板地址缺省值为0,即J9、J10和J11都是断开的。 2.5.波特率选择跳线J12和J13:

通过跳线,可以选择控制板的RS232的通讯波特率,具体的方法如下表所示: J13 J12 波特率 断开断开4800 断开短路9600 短路断开19200 短路短路38400 控制板波特率缺省值为4800,即J12和J13都是断开的。 3.指示灯: 在控制板的背面,有一个LED的指示灯,上电后,就一直在闪烁,表示处于等待状态,等待接收来自串口输入的命令。当接收串口命令时,LED就会变得快速闪烁。 4.注意事项: (1)请不要带电插拔连接器。 (2)要正确连接,不要把信号连接反了,尤其是电源,避免烧毁板子。 5.通讯协议: 5.1.RS232通讯协议: 波特率为4800/9600/19200/38400,4种可选; 数据位:8位 停止位:1位 校验位:没有 5.2.命令组成: 发送到控制板的命令由字符串组成,其格式为: <起始符><通道号><分割符1><脉宽时间><分隔符2><速度><结束符> 下面分别解释每一字段的含义: (1)起始符为1个字符,用*表示。 (2)通道号用2位数字表示,有效的范围为0-63,当通道号小于7时,例如是0到7,相应的输出信号在连接器J1到J8上。如果通道号大于7时,通道号/8 就是板号,也就是对应J9/J10/J11设置的控制板地址。通道号与板号及板内 通道号的关系为:通道号=板号*8+板内通道号。 (3)分割符1为1个字符,用P表示。 (4)脉宽时间用4位数字表示,有效的范围是0500到2500。 (5)分割符2为1个字符,用S表示。 (6)速度用2位数字表示,有效范围是0到99,单位是20MS, 其含义是每20MS的脉宽变换量,当是0时,代表以最快速度变换。 (7)结束符为1个字符,用回车符表示。 整个协议包是定长的,用12个字符表示。 例子1:命令串*06P2500S50的含义是:将第6通道的PWM脉冲宽度设置成2500uS(2.5ms),并且从当前脉宽变换到2500uS的脉宽过程中,没隔20MS,增加50uS,如果原先脉冲宽度为500uS,则变化的时间(2500-500)/ 50 * 20ms=800ms。 例子2:命令串*41P0600S10的含义是:将板号为5的控制板的第2通道,即J12上的PWM脉冲宽度设置为600uS,变化速度为10uS/每20MS。

QSC24E(NANO)可编程控制舵机板使用说明.

舵机板上位机软件使用说明参考QSC32E使用说明 这里详解ARDUINO-NANO配合舵机板QSC24E-NANO来解码PS2并使用手柄按键的功能,以及ARDUINO对舵机板接口通讯说明。此功能仅QSC24E-NANO可用 此舵机板套件分别为3块PCB组成,最左边为24路带过载保护的舵机控制板,(专门处理多路舵机控制)。中间为ARDUINO-NANO编程控制板,PRO-MINI 为编程控制主板(专门负责处理数据编程)使用,最右边为的串口调试板(可给舵机板调试也可给ARDUINO-NANO下载程序)。

此舵机板,他上面可直接插PS2手柄的接收器,其解码是通过ARDUINO-NANO 来完成的。 L1:舵机供电电源指示灯 L2:通讯指示灯,随着主板接收外部信号L2跟着同步闪动 L3:舵机板状态显示灯。此舵机板带有电压检测功能,当VSS主板电压低于6.8V (默认为7.4V锂电池供电),或者舵机(+-)电压低于5.5V(默认为7.4V锂电池接入1.3V降压二极管),此时L3灭掉,并伴随喇叭报警。提示电池电压不足 用户需要给电池充电

1.驱动的安装: 插上CP2102串口设备的USB线, 并安装驱动,驱动为ARDUINO-QSC24E(CP2102)驱动 对应不同的操作系统选择不同的驱动文件安装, 这里注意,如果驱动没有安装时候CP2102串口设备的红色指示灯不会亮,只有正确安装好驱动后,CP2102串口板上的红色指示灯才点亮。

机软件Q-robot_Servo_Control调试机器人舵机 即通过编程软件软件arduino下载机器人主程序。

必看一、如何用舵机控制器控制机械手(最新)

20路舵机控制器控制机械手详细步骤 一、首先检查所有的物件是否齐全,一台组装好的机械手,20路舵机控制器、USB下载线、PS2手柄(套餐六不含)、电池、稳压模块、导线。 二、按照“控制板接线说明”(见附件)把线接好。 三、检查下线路如下图把USB线插到电脑USB接口上。现在开始联机操作。 四、安装驱动,舵机控制器文件夹下usc_driver.exe 装好后,在我的电脑-设备管理器找到我们需要的端口号,如下图: 注意可能有的电脑不是COM5,只要出现COM口就行了。 五、打开舵机控制器文件下面的上位机软件: 六、这是可以在界面空白处右键选择机械臂布局:

七、可以看到现在是这样的布局: 八、接着找到我们电脑设备管理器出现的COM口,找到后点击“联机”如下图: 九、联机状态如下: 这里是COM4可能有的电脑上不是这个口,只要与设备管理器里面一致就行

十、现在可以把舵机接线插到控制板上从下到上分别插到S1-S6(注意:红线—+,黄色—S,棕色—-),然后把电池接上。 十一、现在拖动上位机对应舵机的滑条,可以看到相应的舵机会转动。 按照上面的步骤在上位机上拖动滑条舵机会动,这就说明已经联机成功了下面就可以慢慢自己调动作。 1.打开我们的《参考动作文件》里面的“标准动作”文件,导入进去之后点击运行 运行出来机械臂应该是直立的状态,而且手爪闭合。这是作为一个基本的标准动作我们可以下到板子里去,点击下载,下载完成后我们在文件里面刷新下可以看到有个1txt,这就说明此标准动作已经下到板子里去了且默认为1号动作组,这时我们可以把鼠标放在1txt上点击鼠标右键将此动作“设置脱机运行”,意思是当我们脱机时接通电源机械手就会自动执行此动作。当然您也可以将其他动作设置为脱机运行,同样接通电源后会自动执行此动作。 2.我们可以将《参考动作文件》中其他动作组也导入进去运行看看,同时您也可以自己编辑其他动作组依次下载到板子里去,下一个就会增加一个动作组,下载完成可以在文件里查看,1txt、2txt、3txt。。。。。。等。如果觉得动作不行的话或者想换可以把原来下载好的删除掉,也是在文件里刷新出来想要删除哪一个就右键点击“删除”,然后再重新编辑下载。 3.自己想要的动作组编辑好下载完成之后,我们可以设置PS2(没有PS2的就无需设置了) 点击上位机左上角的工具—PS2手柄可以看到如下界面: 这里手柄上的数字符号如#1GC1表示的意思是动作组1循环执行1次,您可以直

LOBOT 24路舵机控制器使用手册

LOBOT 24路舵机控制器使用手册 舵机控制器是机器人的核心控制部分。在安装机器人之前,必须学会并熟练舵机控制器的使用,因为我们在安装机器人之前,要设置所有舵机的初始位置,这个时候就是用舵机控制板来调试舵机,使舵机转到指定的位置,我们才可以安装机器人。 有3个接线口:VCC、+、-。 VCC是给控制板上面的芯片供电的,电压需要在7V~9V之间,低于7V则芯片停止工作,并且蜂鸣器会发出报警声音。在机器人内部,我们一般采用7.4V航模锂电池充电,所以直接接上电池正极即可,无需转换电压。 +是给控制板上面的舵机供电。电压需要在6V~7.5V中间。在这个电压范围内,不仅可以保证舵机的扭力,并且舵机也比较安全。因为用7.4V锂电池给舵机供电,所以需要用降压芯片串联一下,降低1.2V左右,再接到+端口。 -是负极,直接接锂电池的负极。 **************************************************************** 一共24路,舵机线的红色线接+,黑色线接-,白色线接S。**************************************************************** PS2手柄接收器插线端: 手柄接收器有3根3P线,如下图所示,把1号线、2号线、3

号线,分别插到控制板上面的1列、2列、3列上。(线头上露出金属片的那一面都朝左) **************************************************************** 电源开关。左边OFF,右边ON。 **************************************************************** 控制板模式切换开关。 控制板有2种模式:USB模式和PS2模式。 在USB模式下,可以在电脑上对机器人进行编程。 在PS2模式下,可以对机器人进行手柄遥控。 ****************************************************************

舵机控制板使用说明

毛毛雨24路舵机使用说明书 一.毛毛雨24路舵机基本功能 独家特点:采用高速CPU(atme32),处理速度更快,控制更精确,运行更稳定。 你可以不会编程,但是你只要使用你的鼠标,你的机器人就会舞动起来、 完美的脱机运行功能,不要外接单片机,更不要连接PC,即可运行数千个动作指令。 自动识别波特率(9600,19200,38400,57600.1115200,128000)自动识别 真正的舵机运行,按一个开关就可解决问题 USB和TTL串口费用不同的IO口分开处理,绝对没有任何干扰。 产品参数: 1.控制芯片供电范围:4.5V-5.5V(自带稳压芯片,无需多个电源) 2.舵机部分供电范围:DC直流(电压与舵机参数有关,一般使用5-8vDC) 3.信号输出:pwm(精度1us 4. 5. 使用过程: 1、,收到我们的宝贝时,请检查舵机控制板套件是够齐全,包括舵机控制板一块,usb转串口一块,串口线一条。如果配件不齐全请立刻与我们的客服人员取得联系。 2使用前请先洗手,防静电,舵机控制板在使用时经历,抓住舵孔板的边缘部分,切勿将舵控孔板背面与金属物质接触,防止发生多路烧坏舵机板。 3usb转串口与舵机控制板的连接:用串口线将usb转串口模块与舵机控制板连接起来。对应的连接为VCC接VCC GND接GND,RXD接RXD TXD接TXD。 (注明;在实际的单片机应用中,一般RXD是接TXD,而TXD是接RXD的。) 74hc595引脚图管脚图 2008年01月11日 23:59 本站原创作者:本站用户评论(0) 关键字:74(239) 74hc595引脚图

引脚说明

相关文档
相关文档 最新文档