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

📄 lm629driver.txt

📁 直流电机控制芯片LM629,可输出PWM波形结合18200进行直流电机的控制。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -