找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1448|回复: 1
打印 上一主题 下一主题
收起左侧

基于STC8H1K16单片机的20路舵机驱动模块替代PCA9685

[复制链接]
跳转到指定楼层
楼主
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


bom清单:

单片机源程序如下:
  1. #include<reg52.h>           
  2. #include <intrins.h>  
  3. typedef  unsigned char  uchar;        
  4. typedef  unsigned int   uint;      
  5.                     
  6. #define PWM9685_adrr1 0x00                                // LU9685_adrr1=A4*32+A3*16+A2*8+A1*4+A0*2,LU9685模块上面焊点短接的话Ax=1,否则为0

  7. void delayms(uint z)
  8. {
  9.   uint x,y;
  10.   for(x=z;x>0;x--)
  11.       for(y=110;y>0;y--);
  12. }
  13. /********************************************************************
  14. 发送一个字节串口数据
  15. ********************************************************************/
  16. void Uart_Send_Byte(unsigned char c)//UART Send a byte
  17. {
  18.         SBUF = c;
  19.         while(!TI);                //发送完为1
  20.         TI = 0;
  21. }
  22. /********************************************************************
  23. * 名称 : UART_Init()
  24. * 功能 : 单片机串口初始化
  25. * 单片机:晶振11.0592MHz 波特率为9600bps
  26. * 舵机模块:波特率为9600bps,
  27. ********************************************************************/        
  28. void UART_Init()
  29. {
  30.         SCON= 0x50;               //串口方式1        //REN=1; 允许接收
  31.         PCON=0x00;                //SMOD=0
  32.         TMOD= 0x22;               //定时器1定时方式2
  33.         TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps
  34.         TL1= 0xFD;                                                                                 
  35.         TR1= 1;                   //启动定时器
  36.         EA=1;   
  37. }
  38. /*---------------------------------------------------------------
  39.         adder:模块的硬件地址
  40.         num:通道 0-15
  41.         off为0-180,off大于等于200时不输出信号,此时释放舵机
  42. ----------------------------------------------------------------*/
  43. void setPWM(uchar adder,uchar num,uchar off)
  44. {
  45.         Uart_Send_Byte(0XFA);
  46.         Uart_Send_Byte(adder);
  47.         Uart_Send_Byte(num);
  48.         Uart_Send_Byte(off);
  49.         Uart_Send_Byte(0XFE);
  50. }
  51. void PWM9685_reset(uchar adder)
  52. {
  53.         Uart_Send_Byte(0XFA);
  54.         Uart_Send_Byte(adder);
  55.         Uart_Send_Byte(0XFB);
  56.         Uart_Send_Byte(0XFB);
  57.         Uart_Send_Byte(0XFE);
  58. }
  59. void main()
  60. {   
  61.         uchar m,n;
  62.         //串口初始化
  63.     UART_Init();
  64.         //LU9685软复位
  65.         PWM9685_reset(PWM9685_adrr1);         
  66.     while(1)
  67.         {
  68.                 for(n=0;n<16;n++)
  69.                 {
  70.                         for(m=0;m<=180;m++)
  71.                         {
  72.                                 setPWM(PWM9685_adrr1,n,m);                                                
  73.                         }                                       
  74.                 }
  75.                 delayms(500);        
  76.                 for(n=0;n<16;n++)
  77.                 {
  78.                         for(m=0;m<=180;m++)
  79.                         {
  80.                                 setPWM(PWM9685_adrr1,15-n,180-m);                                                
  81.                         }                                       
  82.                 }               
  83.                 delayms(500);                                                                                       
  84.         }
  85. }
复制代码


STC8H1K16舵机驱动资料.7z

7.11 MB, 下载次数: 53, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:64089 发表于 2022-2-11 10:59 | 只看该作者
楼主思维开阔,这个想法真不错,学习下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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