久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10188|回復: 19
打印 上一主題 下一主題
收起左側

16路舵機控制板pca9685的stm32驅動程序源碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:205843 發表于 2018-4-17 16:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近要做個六足機器人,所以買了個舵機控制板,而商家給的是arduino的代碼,我用的是stm32,
自己就看了挺多文檔,一開始總是不行,
在網上請教了幾個大神,終于成功
寫出了pca9685的驅動代碼(測試成功)。
在這里分享給需要的人。

單片機源程序如下:
  1. #include "pca9685.h"
  2. #include "myiic.h"
  3. #include "delay.h"
  4. #include "math.h"
  5. void pca_write1(u8 adr,u8 data)
  6. {
  7.          IIC_Start();
  8.         
  9.          IIC_Send_Byte(pca_adr1);
  10.          IIC_Wait_Ack();
  11.         
  12.          IIC_Send_Byte(adr);
  13.          IIC_Wait_Ack();
  14.         
  15.          IIC_Send_Byte(data);
  16.          IIC_Wait_Ack();
  17.         
  18.    IIC_Stop();
  19. }
  20. u8 pca_read1(u8 adr)
  21. {
  22.   u8 data;
  23.         IIC_Start();
  24.         
  25.         IIC_Send_Byte(pca_adr1);
  26.   IIC_Wait_Ack();
  27.         
  28.         IIC_Send_Byte(adr);
  29.         IIC_Wait_Ack();
  30.         
  31.         IIC_Start();
  32.         
  33.   IIC_Send_Byte(pca_adr1|0x01);
  34.   IIC_Wait_Ack();
  35.         
  36.         data=IIC_Read_Byte(0);
  37.   IIC_Stop();
  38.         
  39.         return data;

  40. }

  41. void pca_reset1(void)
  42. {
  43.         IIC_Init();
  44.   pca_write1(pca_mode1,0x0);

  45. }

  46. void pca_setfreq1(float freq)
  47. {
  48.                 u8 prescale,oldmode,newmode;
  49.                 double prescaleval;
  50.                 freq *= 0.92;
  51.                 prescaleval = 25000000;
  52.                 prescaleval /= 4096;
  53.                 prescaleval /= freq;
  54.                 prescaleval -= 1;
  55.                 prescale =floor(prescaleval + 0.5f);

  56.                 oldmode = pca_read1(pca_mode1);
  57.         
  58.                 newmode = (oldmode&0x7F) | 0x10; // sleep
  59.         
  60.                 pca_write1(pca_mode1, newmode); // go to sleep
  61.         
  62.                 pca_write1(pca_pre, prescale); // set the prescaler
  63.         
  64.                 pca_write1(pca_mode1, oldmode);
  65.                 delay_ms(2);
  66.         
  67.                 pca_write1(pca_mode1, oldmode | 0xa1);
  68. }

  69. void pca_setpwm1(u8 num, u32 on, u32 off)
  70. {
  71.                         pca_write1(LED0_ON_L+4*num,on);
  72.                         pca_write1(LED0_ON_H+4*num,on>>8);
  73.                         pca_write1(LED0_OFF_L+4*num,off);
  74.                         pca_write1(LED0_OFF_H+4*num,off>>8);
  75. }




  76. void pca_write2(u8 adr,u8 data)
  77. {
  78.          IIC_Start();
  79.         
  80.          IIC_Send_Byte(pca_adr2);
  81.          IIC_Wait_Ack();
  82.         
  83.          IIC_Send_Byte(adr);
  84.          IIC_Wait_Ack();
  85.         
  86.          IIC_Send_Byte(data);
  87.          IIC_Wait_Ack();
  88.         
  89.    IIC_Stop();
  90. }
  91. u8 pca_read2(u8 adr)
  92. {
  93.   u8 data;
  94.         IIC_Start();
  95.         
  96.         IIC_Send_Byte(pca_adr2);
  97.   IIC_Wait_Ack();
  98.         
  99.         IIC_Send_Byte(adr);
  100.         IIC_Wait_Ack();
  101.         
  102.         IIC_Start();
  103.         
  104.   IIC_Send_Byte(pca_adr2|0x01);
  105.   IIC_Wait_Ack();
  106.         
  107.         data=IIC_Read_Byte(0);
  108.   IIC_Stop();
  109.         
  110.         return data;

  111. }

  112. void pca_reset2(void)
  113. {
  114.         IIC_Init();
  115.   pca_write2(pca_mode1,0x0);

  116. }

  117. void pca_setfreq2(float freq)
  118. {
  119.                 u8 prescale,oldmode,newmode;
  120.                 double prescaleval;
  121.                 freq *= 0.92;
  122.                 prescaleval = 25000000;
  123.                 prescaleval /= 4096;
  124.                 prescaleval /= freq;
  125.                 prescaleval -= 1;
  126.                 prescale =floor(prescaleval + 0.5f);

  127.                 oldmode = pca_read2(pca_mode1);
  128.         
  129.                 newmode = (oldmode&0x7F) | 0x10; // sleep
  130.         
  131. ……………………

  132. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
pca9685.rar (272.63 KB, 下載次數: 345)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:313453 發表于 2018-4-23 22:49 | 只看該作者
樓主還在嗎,我下載了你的程序到我的單片機里面,連接了pca9685與舵機,可是舵機依然不轉動。。。。。我很急很急,有很多的問題想問你,請問你的聯系方式
回復

使用道具 舉報

板凳
ID:316013 發表于 2018-4-26 14:05 | 只看該作者
我也很想請教
回復

使用道具 舉報

地板
ID:205843 發表于 2018-5-11 13:27 | 只看該作者
我這個控制的是兩塊板子的
回復

使用道具 舉報

5#
ID:205843 發表于 2018-5-11 13:29 | 只看該作者
1355965609 發表于 2018-4-23 22:49
樓主還在嗎,我下載了你的程序到我的單片機里面,連接了pca9685與舵機,可是舵機依然不轉動。。。。。我很 ...

我寫的是控制兩塊板子的
回復

使用道具 舉報

6#
ID:295226 發表于 2018-5-24 11:34 | 只看該作者
樓主請問:
1. 你兩個驅動板的基地址是怎么焊接的?一個是0x80,另一個是0x82,請問是怎么焊接的?
2. void SetPWM(uint32_t num,uint32_t on,uint32_t off) 這個函數中,num是不是就是第n個舵機,on是開始角度,off是停止角度?
3. LED0_ON_L和LED0_OFF_L是什么意思?感激不盡啊!!!
能不能加樓主聯系方式
回復

使用道具 舉報

7#
ID:337376 發表于 2018-5-24 16:20 | 只看該作者
很棒,謝謝樓主分享
回復

使用道具 舉報

8#
ID:77462 發表于 2018-6-12 09:29 | 只看該作者
謝謝分享
回復

使用道具 舉報

9#
ID:224179 發表于 2018-6-12 17:37 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:401931 發表于 2018-10-1 00:38 | 只看該作者
不錯,完全沒問題。。謝謝
回復

使用道具 舉報

11#
ID:401931 發表于 2018-10-1 00:48 | 只看該作者
請問樓主pca_setpwm(15,0,pwm_td); 第二個參數代表什么?謝謝
回復

使用道具 舉報

12#
ID:405076 發表于 2018-10-4 22:52 | 只看該作者
樓主啊,你的程序備注有點少啊,理解起來有點困難啊,不過還是謝謝了
回復

使用道具 舉報

13#
ID:366441 發表于 2018-10-11 22:20 | 只看該作者
謝謝分享
回復

使用道具 舉報

14#
ID:298898 發表于 2018-10-26 17:20 | 只看該作者
怎么接線的啊,我的連上三個mg995,就動不了了????
回復

使用道具 舉報

15#
ID:138247 發表于 2019-3-1 10:15 | 只看該作者

感謝樓主分享。。。。
回復

使用道具 舉報

16#
ID:413119 發表于 2019-4-5 19:25 | 只看該作者
感謝分享感謝分享
回復

使用道具 舉報

17#
ID:439191 發表于 2019-5-30 11:09 | 只看該作者
正好需要,謝謝樓主.
回復

使用道具 舉報

18#
ID:450030 發表于 2019-8-3 09:09 | 只看該作者
備注有點少
回復

使用道具 舉報

19#
ID:594528 發表于 2019-8-3 11:14 | 只看該作者
感覺挺不錯,不過我幣不足
回復

使用道具 舉報

20#
ID:415668 發表于 2019-10-9 00:03 | 只看該作者
整潔到一條注釋都沒有。。。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线看片 | 久久久久久美女 | 国产情侣久久 | 成人国产精品色哟哟 | 久久久青草婷婷精品综合日韩 | 成人免费大片黄在线播放 | 中国毛片免费 | 久久久久中文字幕 | 中文字幕日韩一区 | 欧洲妇女成人淫片aaa视频 | 日韩国产三区 | 国产亚洲一区二区三区在线观看 | 亚洲一区欧美 | 一区二区中文字幕 | 欧美精品一区二区在线观看 | 夜夜夜夜夜夜曰天天天 | 成人av在线播放 | 一区二区国产在线 | 国产91av视频在线观看 | 欧美猛交| 国产一区二区在线播放视频 | 亚洲久久 | 欧美精品一区二区在线观看 | 国产精品一区二区福利视频 | 日本精品一区二区三区在线观看视频 | av三级在线观看 | 2018天天干天天操 | 国产精品69久久久久水密桃 | 日韩 欧美 综合 | 青青草国产在线观看 | 插插宗合网 | 奇米超碰在线 | 久久av在线播放 | 亚洲国产成人精品女人久久久 | 成人免费在线电影 | 亚洲人人 | 欧美激情一区二区三级高清视频 | 综合久 | 黄网站涩免费蜜桃网站 | 国产精品一区二区在线 | 国产一级特黄aaa大片评分 |