|
调了一晚上,实在调不通,请使用过TMC系列芯片的朋友帮我看看。
现象:SPI能控制电机保持电流,且电机具备保持力矩。设定目标后点击无动作,保持静止状态!
硬件:淘宝的模块
SPI 部分程序:
- void SPI_SendByte(char data)
- {
- cmd[0] = data;
- if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
- {
- if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
- {
- ReceiveData =cmd[0];
- }
- else;
- }
- else;
- }
- char SPI_ReceiveByte(void)
- {
- cmd[0] = 0;
- if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
- {
- if(HAL_SPI_Receive(&hspi1,cmd,1,1000) == HAL_OK)
- {
- //return cmd[0];
- }
- else;
- }
- else;
- return cmd[0];
- }
- //TMC5160 takes 40 bit data: 8 address and 32 data
- void sendData(unsigned long address,long datagram)
- {
- unsigned char i;
- cmd[0]=address | 0x80;
- cmd[1]=(datagram >> 24) & 0xff;
- cmd[2]=(datagram >> 16) & 0xff;
- cmd[3]=(datagram >> 8) & 0xff;
- cmd[4]=datagram & 0xff;
-
- SPI_CS_ON(); //SPI_CS片选拉低
- // SPI_SendByte(address);
- // SPI_SendByte((datagram >> 24) & 0xff);
- // SPI_SendByte((datagram >> 16) & 0xff);
- // SPI_SendByte((datagram >> 8) & 0xff);
- // SPI_SendByte(datagram & 0xff);
- for(i=0;i<5;i++)
- {
- if(HAL_SPI_Transmit(&hspi1,&cmd[i],1,100) == HAL_OK)
- {
- }
- else;
- }
- SPI_CS_OFF(); //SPI_CS片选拉高
- }
- unsigned long ReadData(long address)
- {
- char data[4] = {0, 0, 0, 0};
- unsigned long datagram = 0;
-
- SPI_CS_ON(); //SPI_CS片选拉低
-
- SPI_SendByte(address);
- data[0] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 24) & 0xff);
- data[1] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 16) & 0xff);
- data[2] = SPI_ReceiveByte();//SPI_ReceiveByte((datagram >> 8) & 0xff);
- data[3] = SPI_ReceiveByte();//SPI_ReceiveByte(datagram & 0xff);
- SPI_CS_OFF(); //SPI_CS片选拉高
-
- datagram = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
- return datagram;
- }
复制代码
TMC初始化部分代码
- // MULTISTEP_FILT=1, EN_PWM_MODE=1 enables stealthChop?
- //sendData(TMC5160_GCONF, 0x0000000C);
- // TOFF=3, HSTRT=4, HEND=1, TBL=2, CHM=0 (spreadCycle?)
- sendData(TMC5160_CHOPCONF, 0x000100C3);
- // IHOLD=8, IRUN=15 (max. current), IHOLDDELAY=6
- data = 6;
- data <<=4;
- data |= 16;
- data <<=5;
- data |= 5;
- sendData(TMC5160_IHOLD_IRUN, data);
- //sendData(TMC5160_IHOLD_IRUN, 0x00080F0A);
- // TPOWERDOWN=10: Delay before power down in stand still
- sendData(TMC5160_TPOWERDOWN, 0x0000000A);
- // TPWMTHRS=500
- sendData(TMC5160_TPWMTHRS, 0x000001F4);
- // Values for speed and acceleration
- sendData(TMC5160_VSTART, 1);
- sendData(TMC5160_A1, 1000);
- sendData(TMC5160_V1, 50000);
- sendData(TMC5160_AMAX, 500);
- sendData(TMC5160_VMAX, 200000);
- sendData(TMC5160_DMAX, 700);
- sendData(TMC5160_D1, 1400);
- sendData(TMC5160_VSTOP, 10);
- sendData(TMC5160_RAMPMODE, 0);
复制代码
运行指令代码:
- sendData(TMC5160_XTARGET, pos);
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|