基于CAN总线的步进电机控制系统

发布时间 : 星期日 文章基于CAN总线的步进电机控制系统更新完毕开始阅读

中国计量学院毕业设计(论文)

#define SJA_TXERR XBYTE[SJA_BASE_ADR + 0x0f] 器寄存器

/********************** 验收滤波器寄存器及其位定义 ************************/

#define SJA_ACR0 XBYTE[SJA_BASE_ADR + 0x10] 存器

#define SJA_ACR1 XBYTE[SJA_BASE_ADR + 0x11] 存器

#define SJA_ACR2 XBYTE[SJA_BASE_ADR + 0x12] 存器

#define SJA_ACR3 XBYTE[SJA_BASE_ADR + 0x13]

存器

#define SJA_AMR0 XBYTE[SJA_BASE_ADR + 0x14] 存器

#define SJA_AMR1 XBYTE[SJA_BASE_ADR + 0x15] 存器

#define SJA_AMR2 XBYTE[SJA_BASE_ADR + 0x16] 存器

#define SJA_AMR3 XBYTE[SJA_BASE_ADR + 0x17] 存器

/********************** TX缓冲器地址定义 ************************/

#define SJA_TBSR0 XBYTE[SJA_BASE_ADR + 0x10] #define SJA_TBSR1 XBYTE[SJA_BASE_ADR + 0x11] #define SJA_TBSR2 XBYTE[SJA_BASE_ADR + 0x12] #define SJA_TBSR3 XBYTE[SJA_BASE_ADR + 0x13] #define SJA_TBSR4 XBYTE[SJA_BASE_ADR + 0x14] #define SJA_TBSR5 XBYTE[SJA_BASE_ADR + 0x15] #define SJA_TBSR6 XBYTE[SJA_BASE_ADR + 0x16] #define SJA_TBSR7 XBYTE[SJA_BASE_ADR + 0x17]

5

//TX 错误计数

//验收代码0寄//验收代码1寄//验收代码2寄//验收代码3寄

//验收屏蔽0寄//验收屏蔽1寄//验收屏蔽2寄//验收屏蔽3寄

中国计量学院毕业设计(论文)

#define SJA_TBSR8 XBYTE[SJA_BASE_ADR + 0x18] #define SJA_TBSR9 XBYTE[SJA_BASE_ADR + 0x19] #define SJA_TBSR10 XBYTE[SJA_BASE_ADR + 0x1a] #define SJA_TBSR11 XBYTE[SJA_BASE_ADR + 0x1b] #define SJA_TBSR12 XBYTE[SJA_BASE_ADR + 0x1c]

/********************** RX缓冲器地址定义 ************************/

#define SJA_RBSR0 XBYTE[SJA_BASE_ADR + 0x10] #define SJA_RBSR1 XBYTE[SJA_BASE_ADR + 0x11] #define SJA_RBSR2 XBYTE[SJA_BASE_ADR + 0x12] #define SJA_RBSR3 XBYTE[SJA_BASE_ADR + 0x13] #define SJA_RBSR4 XBYTE[SJA_BASE_ADR + 0x14] #define SJA_RBSR5 XBYTE[SJA_BASE_ADR + 0x15] #define SJA_RBSR6 XBYTE[SJA_BASE_ADR + 0x16] #define SJA_RBSR7 XBYTE[SJA_BASE_ADR + 0x17] #define SJA_RBSR8 XBYTE[SJA_BASE_ADR + 0x18] #define SJA_RBSR9 XBYTE[SJA_BASE_ADR + 0x19] #define SJA_RBSR10 XBYTE[SJA_BASE_ADR + 0x1a] #define SJA_RBSR11 XBYTE[SJA_BASE_ADR + 0x1b] #define SJA_RBSR12 XBYTE[SJA_BASE_ADR + 0x1c]

#define SJA_RMC XBYTE[SJA_BASE_ADR + 0x1d] //RX 信息计数器 寄存器

#define SJA_RBSA XBYTE[SJA_BASE_ADR + 0x1e] //RX 缓冲区起始地址 寄存器

/********************** 时钟分频寄存器地址定义 ************************/

#define SJA_CDR XBYTE[SJA_BASE_ADR + 0x1f] 存器

#define CLKOff_BIT 0x08 //时钟关闭位,时钟输出管脚控制位

6

//时钟分频 寄

中国计量学院毕业设计(论文)

#define RXINTEN_BIT 0x20 //用于接收中断的管脚TX1

#define CBP_BIT 0x40 //CAN 比较器旁路控制位

#define CANMode_BIT 0x80 //CAN 模式控制位 #endif

main.c 文件

#include #include \

sbit LED = P3^4;//低电平有效 硬件测试用 sbit L1 = P1^0; sbit L2 = P1^1; sbit L3 = P1^2; sbit L4 = P1^3; sbit L5 = P1^4; sbit L6 = P1^5; sbit L7 = P1^6; sbit L8 = P1^7; extern canid; unint txdata; unint dispy;

unsigned char code FFW[8]= {0xe8,0xc8,0xd8,0x98,0xb8,0x38,0x78,0x68}; //反转

unchar time=0;//初值为0,当为100时,表示定时器0计数到1秒了,这时就自动发一次数据

unchar rxflag=0;//是否接收到数据标志,初值为0表示没有收到数据,为1表示收到了数据

7

A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)

unsigned char code FFZ[8]= {0x68,0x78,0x38,0xb8,0x98,0xd8,0xc8,0xe8}; //正转

中国计量学院毕业设计(论文)

void mcu_init(); //单片机初始化

//延时

void init_delay10ms (void); void mDelay(unint mtime); void delay(unsigned int t); void main() {

unchar i; mcu_init(); peli_caninit();

init_delay10ms(); //初始化定时器0 TR0=1;//打开定时器0,开始计数 while(1) {

for (i=0; i<8; i++) //一个周期转30度 { P1=0; if(dispy==1) {

P2 = FFW[i]; L1=1; delay(30); }

else if(dispy==2) {

P2 = FFZ[i]; L2=2;

delay(30); //调节转速 }

else if(dispy==3) {

P2 = FFW[i]; L3=1; delay(20); }

else if(dispy==4)

8

//取数据

//取数据

联系合同范文客服:xxxxx#qq.com(#替换为@)