[UNO] 当TB5128遇上Arduino UNO,第一次亲密接触

[复制链接]
663|7
 楼主 | 2019-9-23 16:11 | 显示全部楼层 |阅读模式
本帖最后由 NickyGrout 于 2019-9-24 03:59 编辑

      几年前了解到Arduino时,没想过自己有一天也会开始折腾。一直以为基于Arduino的程序,占空间,速度慢……最近回头深入了解时,其实用Arduino模板来开发,也可以像普通用AVR方式一样编程,差别不大。用Arduino的库只是更省事而已……在折腾中发现Arduino其实也挺好用的,刚好最近在测试步进驱动芯片TB5128,所以设计了一个匹配UNO的TB5128扩展模板,两者配合一起折腾,第一版先考虑在程序中使用Arduino库函数,先测试TB5128的最基本测试

      本次测试目的,是Arduino UNOTB5128扩展板的基本操作。实时自动循环正反转,根据脉冲数量来控制电机转动的角度。每次填充的脉冲数量计数完毕,程序中会自动切换方向,然后再次填充同样数量的脉冲。程序中,细分和衰减都有相应的函数去设置,方便调用。脉冲是通过软件定时,取反IO实现。脉冲频率的调整,可以在宏(CLK_F)中修改对应的数值。注意,因为没有加减速,所以在低细分数时,频率不要太高了。一般转速在1/秒左右,基本可以正常转动。再快的就要看电机的高频特性、驱动电压和负载情况了。另外TB5128的报警输出和Mo的端口还没在程序中实现检测……


Arduino UNO +TB5128实物图片,测试中
                              

Arduino UNO+TB5128

Arduino UNO+TB5128


功能设置说明:
    拔码开关SW设置功能:(默认设置成全低)
1.      GAIN_SEL(放大比例选择,可以选择5或10,对应电流计算公式:IO=VREF / GAIN / RS采样电阻)
2.      EDG_SEL(触发边沿选择,CLK是上升沿触发或者选择双边沿触发)
3.      IF_SEL(设置控制模式,本测试中是CLK模式,就是脉冲和方向直接控制,另外还有串行控制模式,待续)

    其它设置:图1标记有VREF字样处的插针(SEL4),是用来选择外部电阻分压生成VREF或者是UNO板输出PWM通过RC滤波生成VREF电压。 RS_SEL(板背面,用来设置采样模式)是通过短路焊点设置为外部采样模式。其它如:SEL2SEL3都由UNO板控制。TE1(对应SEL1,设置TB5128RESET)也是在板上短路为UNO控制。
    其中UNO5128.c文件完全与UNO5128.ino文件一样,复制成C文件格式,方便没有装Arduino软件的网友也能直接打开查看。HC595.h并不是单纯的头文件,包括595控制的相关函数都在里面      

        

连接电机

连接电机
  连接42的步进电机电机,额定电流2.5A的。TB5128扩展板设计在没考虑外部5V稳压电路,只能从UNO板引入……


只是基本的操作,项目使用了 1634 字节,占用了 (5%) 程序存储空间。最大为 32256 字节。                                                    全局变量使用了13字节,(0%)的动态内存,余留2035字节局部变量。最大为2048字节。

全部程序文件打包:
      UNO5128.zip (8.15 KB, 下载次数: 8)

使用特权

评论回复

评论

dirtwillfly 2019-9-26 08:14 回复TA
感谢分享 
 楼主 | 2019-9-23 16:23 | 显示全部楼层
本帖最后由 NickyGrout 于 2019-9-23 16:37 编辑

部分程序说明:

/*
* 控制主板: Arduino UNO
* 驱动板 : TB5128 步进驱动芯片(匹配UNO的驱动模块)  NO.1 (2019-09-11)
*
* 部分函数和端口功能控制说明(函数在HC595.h 文件)
*
* microStep(step):
*     设置TB5128细分数的函数, step=细分数, 需要用到什么细分就写入对应的数字, 函数中自动设置对应状态输出
*     
* smdmode(fdt):  
*     设置衰减的函数, fdt有4档 // 1=37.5% 快衰减 // 2=50% 快衰减 // 3=100% 快衰减 // 4 = ADMD(智能衰减)
*     
*     TQ_HIGH; 对应TORQE = HIGH;   // TQ_LOW; 对应TORQE = LOW   // 宏定义中已对应
*     ST_HIGH; 对应STANDBY = HIGH; // ST_LOW; 对应STANDBY = LOW // 宏定义中已对应
*     
*     1.8度的电机,整步转一圈需要的脉冲数= 360/1.8 = 200个脉冲
*     8细分时转一圈需要的脉冲数= 200 * 8=1600个脉冲,当脉冲频率=1.6KHZ时,速度=每秒转一圈
*     
*     RES5128 控制TB5128的RESET引脚 , 由UNO板直接控制   
*     
*     PWMVREF 用来调整VREF,用到定时器1的PWM ,通过RC滤波生成直流电压,从而设定TB5128的输出电流
*     TCCR1B=TCCR1B & B11111000 | 0x01 ; //修改定时器1分频比,PWM模块默认64分频 //提高PWMVREF的频率
*     
*     输出电流IO= VREF / GAIN / RS(采样电阻的阻值) // GAIN可以在板上通过拔码开关设定为10或者5,外部设定
*/


74HC595部分的函数:
  1. void hc595Write(unsigned char data)           // 刷新HC595的数据
  2. {
  3.     for (unsigned char i = 0; i < 8; i++)
  4.     {
  5.         digitalWrite(TCP, LOW);               // 将ST_CP口上加低电平让芯片准备好接收数据
  6.         shiftOut(DS, HCP, MSBFIRST, data);    // shiftOut() 串行移位函数  MSBFIRST(数据高位在前)、LSBFIRST(数据低位在前)
  7.         digitalWrite(TCP, HIGH);              // 将ST_CP这个针脚恢复到高电平
  8.         delayMicroseconds(1);                 //  
  9.     }   
  10. }

  11. void microStep(unsigned char M)     //  设置细分数
  12. {                                   
  13.     data_595 = data_595 | 0x1C;     //  把设置细分的位全部置1 // B000 111 00; // =0x1C;

  14.     switch(M)      //  micro_step = 0b111 SSS 11; 其中 S S S 位是设置细分数, 0b111 M0 M1 M2 11; // 2,3,4设置细分数
  15.     {
  16.         case   1:  data_595 &= 0xE3; break;    // B11100011;  break;  // 1   细分      B111 000 11;  // 0xE3
  17.         case   2:  data_595 &= 0xF3; break;    // B11110011;  break;  // 2   细分      B111 100 11;  // 0xF3
  18.         case   4:  data_595 &= 0xEB; break;    // B11101011;  break;  // 4   细分      B111 010 11;  // 0xEB
  19.         case   8:  data_595 &= 0xFB; break;    // B11111011;  break;  // 8   细分      B111 110 11;  // 0xFB
  20.         case  16:  data_595 &= 0xE7; break;    // B11100111;  break;  // 16  细分      B111 001 11;  // 0xE7
  21.         case  32:  data_595 &= 0xF7; break;    // B11110111;  break;  // 32  细分      B111 101 11;  // 0xF7
  22.         case  64:  data_595 &= 0xEF; break;    // B11101111;  break;  // 64  细分      B111 011 11;  // 0xEF
  23.         case 128:  data_595 &= 0xFF; break;    // B11111111;  break;  // 128 细分      B111 111 11;  // 0xFF
  24.         default:                     break;
  25.     }
  26. }
复制代码


TB5128扩展电路板相关资料:
UNO-TB5128.SCH.pdf (50.52 KB, 下载次数: 3)

使用特权

评论回复
 楼主 | 2019-9-24 16:25 | 显示全部楼层
附带测试视频:
UNO5128驱动步进电机正反转测试视频.zip (4.52 MB, 下载次数: 3)

使用特权

评论回复
| 2019-10-8 00:02 | 显示全部楼层

使用特权

评论回复
| 2019-10-18 08:21 | 显示全部楼层

使用特权

评论回复
| 2019-11-11 15:11 | 显示全部楼层
喜欢电子科技的朋友们可以关注一下我们的微信公众号哦
没钱没资本只能这样推广了
mmexport1573203344352.jpg

使用特权

评论回复
| 2019-11-14 22:36 | 显示全部楼层
学习了。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表