⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lm629_1.c

📁 The LM628/LM629 are dedicated motion-control processors designed for use with a variety of DC and b
💻 C
📖 第 1 页 / 共 2 页
字号:
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		PORTA=(unsigned char)(velocity_data & 0x000000FF);//4 LSB
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		LM629_BUSY();
	}
	if(command_word&0x0002)
	{//写位置
		PORTA=(unsigned char)((position_data & 0xFF000000)>>24);//1 MSB
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		PORTA=(unsigned char)((position_data & 0x00FF0000)>>16);//2
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		LM629_BUSY();
		PORTA=(unsigned char)((position_data & 0x0000FF00)>> ;//3
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		PORTA=(unsigned char)(position_data & 0x000000FF);//4 LSB
		WR_DATA();
		WR_HIGH();//WR上升沿写入
		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/测值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 + -