标题: 基于STC8H1K16单片机的20路舵机驱动模块替代PCA9685 [打印本页]

作者: 北电赵同学    时间: 2022-2-10 23:56
标题: 基于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, 下载次数: 56, 下载积分: 黑币 -5


作者: nsj21n    时间: 2022-2-11 10:59
楼主思维开阔,这个想法真不错,学习下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1