📄 lm629driver.txt
字号:
LM629_BUSY();
}
}
/////////////////////////////////////////////////////////////OK
void LM629_STT(void)//STarT Motion Control
{
DDRA=0xFF;
PORTA=0X01;
WR_COMMAND();
WR_HIGH();//写入
LM629_BUSY();
}
/////////////////////////////////////////////////////////////
// 5.状态和信息指令(8条)=======================================================
/////////////////////////////////////////////////////////////OK
unsigned int LM629_RDSIGS(void)//ReaD SIGnalS Register
{
unsigned int rt=0x0000;
LM629_BUSY();
DDRA=0XFF;
PORTA=0X0c;
WR_COMMAND();
WR_HIGH();//写入指令
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt+=(((unsigned int)PINA)<<;
RD_HIGH();
RD_DATA();
rt+=((unsigned int)PINA);
RD_HIGH();
LM629_BUSY();
// DDRA=0XFF;
return rt;
}
/////////////////////////////////////////////////////////////
unsigned long LM629_RDIP(void)//ReaD Index Position
{
unsigned long rt=0x00000000;
DDRA=0XFF;
PORTA=0X09;
WR_COMMAND();
WR_HIGH();//写入指令
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt=(((unsigned long)PINA)<<24);
RD_HIGH();
RD_DATA();
rt+=(((unsigned long)PINA)<<16);
RD_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt+=(((unsigned long)PINA)<<;
RD_HIGH();
RD_DATA();
rt+=((unsigned long)PINA);
RD_HIGH();
LM629_BUSY();
DDRA=0XFF;
return rt;
}
/////////////////////////////////////////////////////////////
unsigned long LM629_RDDP(void)//ReaD Desired Position
{
unsigned long rt=0x00000000;
DDRA=0XFF;
PORTA=0X08;
WR_COMMAND();
WR_HIGH();//写入指令
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt=(((unsigned long)PINA)<<24);
RD_HIGH();
RD_DATA();
rt+=(((unsigned long)PINA)<<16);
RD_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt+=(((unsigned long)PINA)<<;
RD_HIGH();
RD_DATA();
rt+=((unsigned long)PINA);
RD_HIGH();
LM629_BUSY();
DDRA=0XFF;
return rt;
}
/////////////////////////////////////////////////////////////
unsigned long LM629_RDRP(void)//ReaD Real Position
{
unsigned long rt=0x00000000;
LM629_BUSY();
DDRA=0XFF;
PORTA=0X0A;
WR_COMMAND();
WR_HIGH();//写入指令
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt=(((unsigned long)PINA)<<24);
RD_HIGH();
RD_DATA();
rt+=(((unsigned long)PINA)<<16);
RD_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt+=(((unsigned long)PINA)<<;
RD_HIGH();
RD_DATA();
rt+=((unsigned long)PINA);
RD_HIGH();
DDRA=0XFF;
return rt;
}
/////////////////////////////////////////////////////////////
unsigned long LM629_RDDV(void)//ReaD Desired Velocity
{
unsigned long rt=0x00000000;
DDRA=0xFF;
PORTA=0X07;
WR_COMMAND();
WR_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt|=(unsigned long)PINA<<24;
RD_HIGH();
RD_DATA();
rt|=(unsigned long)PINA<<16;
RD_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt|=(unsigned long)PINA<<8;
RD_HIGH();
RD_DATA();
rt|=(unsigned long)PINA;
RD_HIGH();
LM629_BUSY();
return rt;
}
/////////////////////////////////////////////////////////////
unsigned long LM629_RDRV(void)//ReaD Real Velocity
{
unsigned long rt=0x00000000;
DDRA=0xFF;
PORTA=0X0B;
WR_COMMAND();
WR_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt|=(unsigned long)PINA<<24;
RD_HIGH();
RD_DATA();
rt|=(unsigned long)PINA<<16;
RD_HIGH();
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt|=(unsigned long)PINA<<8;
RD_HIGH();
RD_DATA();
rt|=(unsigned long)PINA;
RD_HIGH();
LM629_BUSY();
return rt;
}
/////////////////////////////////////////////////////////////
unsigned int LM629_RDSUM(void)//ReaD Integration-Term SUMmation value
{
unsigned int rt=0x0000;
LM629_BUSY();
DDRA=0XFF;
PORTA=0X0D;
WR_COMMAND();
WR_HIGH();//写入指令
LM629_BUSY();
DDRA=0X00;
RD_DATA();
rt+=(((unsigned int)PINA)<<;
RD_HIGH();
RD_DATA();
rt+=((unsigned int)PINA);
RD_HIGH();
LM629_BUSY();
// DDRA=0XFF;
return rt;
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
void Motion_value_CLS(void)
{
;
}
/////////////////////////////////////////////////////////////END
=============
//declarations.h
//各种声明
//========================================================
//defines=================================================
//========================================================
#define DEBUG 0x00
#define SERVO_ADDRESS 0x10 //网络地址,10,20,30,。。。60
#define SERVO_ADDRESS_MASK 0b00000001 //网络地址掩码,对应以上各个地址
#define TRUE 0x01
#define FALSE 0x00
#define FRAME_OK 0B11110011 //&
//error type///////////////////////////////////
#define HEADER_ERR 0xF0
#define CHKSUM_ERR 0xF1
#define ALL_ERR 0xFA
//frame status bits///////////////////////////
#define FRAME_CHKSUM_ERR 0x04 // | bit2置1,校样和错误
#define FRAME_HEADER_ERR 0x08 // | bit3置1,桢头错误
//ADC Channels/////////////////////////////
//8位精度/////////////////////////////////////
#define ADC0_VOLTAGE 0x00 // ADC0 测电压.分压电阻47K/10K, Vadc= 0.175 * Vbatt.
#define ADC1_CURRENT 0x01 // ADC1测电流. 18200的电流传感输出=250uA/每A负载,采样电阻4.7K,所以实测值1.175V/A
#define ADC2_RESERVED 0x02 // ADC2保留未用
//Signal bit definitions/////////////////////
#define PS 2 //PF.2
#define TCPU 1 //PF.1
#define CS 0 //PF.0
#define RD 1 //PG.1
#define WR 0 //PG.0
#ifndef BIT
#define BIT(x) (1 << (x))
#endif
//LED宏//////////////////////////////////////
#define LED1_OFF() PORTC|=0x01;
#define LED2_OFF() PORTC|=0x02;
#define LED3_OFF() PORTC|=0x04;
#define LED4_OFF() PORTC|=0x08;
#define LED1_ON() PORTC&=0xFE;
#define LED2_ON() PORTC&=0xFD;
#define LED3_ON() PORTC&=0xFB;
#define LED4_ON() PORTC&=0xF7;
#define BREAK_ON() LED4_ON(); //PORTD&=0xEF; //PD.4=0, break_O=1
#define BREAK_OFF() LED4_OFF(); //PORTD|=0x10; //PD.4=1
#define TX485_EN() PORTB|=0x01; delay_50us(50); //PB.0=1
#define TX485_DEN() delay_ms(1);PORTB&=0xFE; //PB.0=0
//11101111
//MCU复位宏////////////////////////////////////
#define MCU_RESET() PORTG&=0b11101111;
//LM629读写宏////////////////////////////////////////
//写命令:CS=L PS=L WR=L RD=H
//PORTC&=0X3F;//00111111,CS,PS=L
//PORTG&=0X1E;//11110,WR=L
//PORTG|=0x02;//00010,RD=H
#define WR_COMMAND() PORTC&=0X3F;PORTG|=0x02;PORTG&=0X1E;
//写数据:CS=L PS=H WR=L RD=H
//PORTC=(PORTC&0X7F)|0X40;//CS=L,PS=H
//PORTG&=0X1E;//11110,WR=L
//PORTG|=0x02;//00010,RD=H
#define WR_DATA() PORTC=(PORTC&0X7F)|0X40;PORTG|=0x02;PORTG&=0X1E;
//WR的上升沿执行写入
#define WR_HIGH() asm("NOP");PORTG|=0x01;
#define WR_LOW() PORTG&=0x1E;
//CS=L PS=L RD=L WR=H 读信号一直有效
#define RD_STATUS() PORTC&=0X3F;PORTG|=0x01;PORTG&=0X1D;
#define RD_HIGH() PORTG|=0x02;asm("NOP");
#define RD_LOW() PORTG&=0x1D;
//CS=L PS=H RD=L WR=H
#define RD_DATA() PORTC=(PORTC&0X7F)|0X40;PORTG|=0x01;PORTG&=0X1D;
/////////////////////////////////////////////////////////////////////////////////////////////////
//LM629控制常量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -