搜索
bottom↓
回复: 6

TMC5160驱动问题请教,SPI能修改参数,但电机无法转动。

[复制链接]

出235入235汤圆

发表于 2021-3-4 23:31:35 | 显示全部楼层 |阅读模式
调了一晚上,实在调不通,请使用过TMC系列芯片的朋友帮我看看。
现象:SPI能控制电机保持电流,且电机具备保持力矩。设定目标后点击无动作,保持静止状态!

硬件:淘宝的模块



SPI 部分程序:
  1. void SPI_SendByte(char data)
  2. {
  3.         cmd[0] = data;
  4.         if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
  5.         {
  6.                         if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
  7.                         {   
  8.                                 ReceiveData        =cmd[0];               
  9.                         }
  10.                         else;
  11.         }
  12.         else;          
  13. }

  14. char SPI_ReceiveByte(void)
  15. {
  16.         cmd[0] = 0;
  17.         if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
  18.         {
  19.                         if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
  20.                         {  
  21.                                         //return cmd[0];
  22.                         }
  23.                         else;
  24.         }
  25.         else;
  26.         return cmd[0];
  27. }
  28. //TMC5160 takes 40 bit data: 8 address and 32 data
  29. void sendData(unsigned long address,long datagram)
  30. {
  31.         unsigned char i;

  32.         cmd[0]=address | 0x80;
  33.         cmd[1]=(datagram >> 24) & 0xff;
  34.         cmd[2]=(datagram >> 16) & 0xff;
  35.         cmd[3]=(datagram >> 8) & 0xff;
  36.         cmd[4]=datagram & 0xff;
  37.        
  38.         SPI_CS_ON();                 //SPI_CS片选拉低       
  39. //        SPI_SendByte(address);
  40. //        SPI_SendByte((datagram >> 24) & 0xff);
  41. //        SPI_SendByte((datagram >> 16) & 0xff);
  42. //        SPI_SendByte((datagram >> 8) & 0xff);
  43. //        SPI_SendByte(datagram & 0xff);
  44.         for(i=0;i<5;i++)
  45.         {
  46.                 if(HAL_SPI_Transmit(&hspi1,&cmd[i],1,100) == HAL_OK)
  47.                 {
  48.                 }
  49.                 else;
  50.         }       
  51.         SPI_CS_OFF();          //SPI_CS片选拉高
  52. }

  53. unsigned long ReadData(long address)
  54. {
  55.         char data[4] = {0, 0, 0, 0};
  56.         unsigned long datagram = 0;
  57.        
  58.         SPI_CS_ON();        //SPI_CS片选拉低
  59.        
  60.         SPI_SendByte(address);
  61.         data[0] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 24) & 0xff);
  62.         data[1] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 16) & 0xff);
  63.         data[2] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 8) & 0xff);
  64.         data[3] = SPI_ReceiveByte();//SPI_ReceiveByte(datagram & 0xff);       
  65.         SPI_CS_OFF();        //SPI_CS片选拉高
  66.        
  67.         datagram = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];       
  68.         return datagram;
  69. }
复制代码


TMC初始化部分代码
  1.         // MULTISTEP_FILT=1, EN_PWM_MODE=1 enables stealthChop?
  2.         //sendData(TMC5160_GCONF, 0x0000000C);

  3.         // TOFF=3, HSTRT=4, HEND=1, TBL=2, CHM=0 (spreadCycle?)
  4.         sendData(TMC5160_CHOPCONF, 0x000100C3);

  5.         // IHOLD=8, IRUN=15 (max. current), IHOLDDELAY=6
  6.         data = 6;
  7.         data <<=4;
  8.         data |= 16;
  9.         data <<=5;
  10.         data |= 5;
  11.         sendData(TMC5160_IHOLD_IRUN, data);
  12.         //sendData(TMC5160_IHOLD_IRUN, 0x00080F0A);

  13.         // TPOWERDOWN=10: Delay before power down in stand still
  14.         sendData(TMC5160_TPOWERDOWN, 0x0000000A);

  15.         // TPWMTHRS=500
  16.         sendData(TMC5160_TPWMTHRS, 0x000001F4);

  17.         // Values for speed and acceleration
  18.         sendData(TMC5160_VSTART, 1);
  19.         sendData(TMC5160_A1, 1000);
  20.         sendData(TMC5160_V1, 50000);
  21.         sendData(TMC5160_AMAX, 500);   
  22.         sendData(TMC5160_VMAX, 200000);
  23.         sendData(TMC5160_DMAX, 700);
  24.         sendData(TMC5160_D1, 1400);
  25.         sendData(TMC5160_VSTOP, 10);
  26.         sendData(TMC5160_RAMPMODE, 0);
复制代码


运行指令代码:
  1. sendData(TMC5160_XTARGET, pos);
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2021-3-5 08:35:46 | 显示全部楼层
设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。

出235入235汤圆

 楼主| 发表于 2021-3-5 09:42:31 | 显示全部楼层
icherry 发表于 2021-3-5 08:35
设置的电流是多少,电源的输出电流够大吗?我遇到过是电源功率不够导致电机不转,也是能保持但就是不转。 ...

电源功率足够的。24V  5A供电。实际电流0.3A

出235入235汤圆

 楼主| 发表于 2021-3-9 10:13:55 | 显示全部楼层
有大神帮忙看下吗?还没解决

出0入79汤圆

发表于 2021-3-9 10:51:31 | 显示全部楼层
我以前 测试过 TCM2950 好像很简单啊  通电 初始化后,发脉冲 就能转 。

出0入79汤圆

发表于 2021-3-9 11:04:59 | 显示全部楼层
你看看 手册 是不是 使能位 和 模式 设置问题

出235入235汤圆

 楼主| 发表于 2021-3-9 11:40:17 | 显示全部楼层
BOERLBH 发表于 2021-3-9 11:04
你看看 手册 是不是 使能位 和 模式 设置问题

发现问题了。虽然SPI可以读写,但运转还是PWM在作用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 10:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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