f103c8t6步进系统说明

stm32F103c8t6单轴步进电机控制系统说明

1、引脚分配

和上位机通信的:

串口2:
PA2,2tx
PA3–rx
通信协议:
不接收上位机的速度,只接受开关信号,或者发送开关信号,触发;
波特率9600;

上位机发送之后,下位机同时将接收到的数据原样返回,作为应答(类似modbus)
上位机发送:
usart2_send(UART2_Rec_Head0); delay_us(2);
usart2_send(UART2_Rec_Head1);delay_us(2);
usart2_send(DeviceNum);delay_us(2);//器件码
usart2_send(Fun_Ack);delay_us(2);//功能码0xDD
usart2_send(Dat_AckOK);delay_us(2);//应答是不是成功0xf0
usart2_send(UART2_Default_Char);delay_us(2);//data1:0x55
usart2_send(UART2_Default_Char);delay_us(2);//data2
usart2_send(UART2_Default_Char);delay_us(2);//data3
usart2_send(UART2_Default_Char);delay_us(2);//data4
usart2_send(UART2_Default_Char);delay_us(2);//data5
usart2_send(csum0);delay_us(2);//csum
usart2_send(UART2_Rec_Tail0);delay_us(2);//帧尾0
usart2_send(UART2_Rec_Tail1);delay_us(2);//帧尾1
delay_ms(100);

	 校验码只计算D2-D9
	 D0=头0
	 D1=头1
	 D2-设备号
	 D3-功能码
	 D4-数据
	 D5-数据
	 D6-数据
	 D7-数据
	 D8-数据
	 D9-数据
	 D10=CSUM=D2--D9
	 D11=尾巴0
	 D12=尾巴1
测试命令1:
0x21+0x22+0x00+0x01+0x00+0x55+0x55+0x55+0x55+0x55+csum=0xAA+0x0D+0x0a

调试使用–串口助手
串口1
PA9–tx
PA10–RX

速度提示
LED0–速度,PC13 亮亮=高速,亮灭:中速,灭灭=低速
LED1–速度,PC14
LED2–操作模式,PC15
--------------------------------配合中断
按键
五个按键,中断模式
PA4, PA5,A6,A7,B0,B1
单按,mode=0 调速, 缺省, 启动, 停止, 回0 设置模式
mode=1 调速 x-方向运动 x+方向运动 停止 回0

OLED屏幕(调试的时候使用)–四脚(暂时不做)

步进电机___使用定时器3,普通定时器

共阳接法
使能端经过测试,是3.3V可以运动,0v不能运动(特别注意)
x轴
方向XDIR----B12
使能XENA----B13
脉冲XPUL----B14

传感器—用中断方法
原点–A11
A点—A12
B点—A15

-----B-----A-----O----
Y轴—有时候再做

测试步骤
1、LED模块,测试是否可以闪烁,配置是否成功;

2、按键模块,测试,是否可以进入中断,按键去抖动是否正常;配合LED灯闪烁进行测试;

3、定时器3模块,测试是否可以输出脉冲,脉冲速度是否可以和设想的一样,配合按键测试;

4、串口2测试,测试是否可以正常接收上位机发送的命令,校验和等,配合串口1回传电脑查看数据;

5、限位开关测试,测试是否可以正常进入限位开关的中断,判断配置是否成功;

6、步进电机脉冲,使能,方向引脚测试,类似闪烁灯
测试一:
XDIR=XDIRCW;
XENA=XEnaOn;
XPUL=1;
delay_ms(3000);

XDIR=XDIRCCW;
XENA=XEnaOff;
XPUL=0;
delay_ms(3000);

测试二:
XRun();//打开电机
XDIR=XDIRCW;
T3Arrnum=0; //2000速度,
delay_ms(500);
XStop();
delay_ms(1000);
//
//
XDIR=XDIRCCW;
XRun();
T3Arrnum=1; //2000速度,
delay_ms(500);
XStop();
delay_ms(1000);
//
XDIR=XDIRCW;
XRun();
T3Arrnum=2; //2000速度,
delay_ms(500);
XStop();
delay_ms(1000);

XDIR=XDIRCCW;
delay_ms(10);

-------------------------测试3-------------------------------------------
T3Arrnum=0;
XRun();
XDIR=XDIRCW;
delay_ms(8000);
XStop();
delay_ms(2000);

		XRun();
		XDIR=XDIRCCW;
  delay_ms(8000);
		XStop();
			delay_ms(2000);

  T3Arrnum=1;
		XRun();
		XDIR=XDIRCW;
  delay_ms(8000);
		XStop();
		delay_ms(2000);

		XRun();
		XDIR=XDIRCCW;
  delay_ms(8000);
		XStop();			
		delay_ms(2000);

		T3Arrnum=2;
		XRun();
		XDIR=XDIRCW;
  delay_ms(8000);
		XStop();
	  delay_ms(2000);

		XRun();
		XDIR=XDIRCCW;
  delay_ms(8000);
		XStop();
		delay_ms(2000);

-----测试4-----

	for(i=0;i<1000;i++)
    X_pos_move();
		
		delay_ms(1000);

			for(i=0;i<1000;i++)
    X_neg_move();
		
			delay_ms(1000);

7、上位机+步进电机测试

测试结果:
比例200–
细分数:2细分–
结果:

//5–2.5圈----2.5360= 900度-----5200=1000个脉冲
//--------------------------------------------------结果每个脉冲0.9度。
假设,丝杠导程是Phmm,步进电机的步距角是0.9度,
那么
1个脉冲—0.9度–
400个脉冲—1个圈—1个导程Phmm
需要走xmm
则需要多少个脉冲
xmm------------N
Phmm----------400
N=400*x/Ph=(400/Ph)x
若ph=4mm,则N=100
x;
比例K=100;
-------------------------------------------------------------------------改变uint16_t XK=100;在steppre.c中的数据,,2细分是100,8细分是400

测试命令

-------------------------------------------上位机发送,单片机接收

设置速度
21 22 00 02 00 55 55 55 55 55 AB 0D 0A
21 22 00 02 01 55 55 55 55 55 AC 0D 0A
21 22 00 02 02 55 55 55 55 55 AD 0D 0A


测试方向
21 22 00 04 00 55 55 55 55 55 AD 0D 0A
21 22 00 04 01 55 55 55 55 55 AE 0D 0A

//-测试IO电平
21 22 80 00 00 55 55 55 55 55 6c 0D 0A
21 22 80 01 01 55 55 55 55 55 6d 0D 0A

//测试回0动作
21 22 00 07 01 55 55 55 55 55 B1 0D 0A

//测试0–A
21 22 00 08 01 55 55 55 55 55 B2 0D 0A

//测试A-B
21 22 00 09 01 55 55 55 55 55 B3 0D 0A

测试B–A

21 22 00 0A 01 55 55 55 55 55 B4 0D 0A

//-----------测试停止
21 22 00 06 01 55 55 55 55 55 B0 0D 0A

//-----------测试运动
21 22 00 05 01 55 55 55 55 55 AF 0D 0A

//—50—XK
//-------51—Aposmm
//-------52—Bposmm
//上位机设置单片机步进电机的脉冲当量XK=====400,分开百位,个位,十位
21 22 00 50 04 00 00 55 55 55 cs 0D 0A

cs=00+50+04+00+00+55+55+55 再%256
//上位机设置单片机步进电机的A点位置(和原点的距离)Aposmm,float类型
//0mm-----500.99mm
21 22 00 51 05 00 00 09 09 55 cs 0D 0A
cs =00+51+05+00+00+09+09+55 再%256
//上位机设置单片机步进电机的B点的位置(和原点的距离)Bposmm,float类型
//0mm-----500.99mm
21 22 00 52
21 22 00 52 05 00 00 09 09 55 cs 0D 0A
//cs =00+52+05+00+00+09+09+55 %256

测试:Apos=22mm
Bpos=66mm

Apos=21 22 00 51 00 02 02 00 00 55 cs 0D 0A
cs=00+51+00+02+02+00+00+55 %256
0x51=81,
0x55=85
81+4+85=85+85=170 =0xAA =cs
21 22 00 51 00 02 02 00 00 55 AA 0D 0A

Bpos=21 22 00 52 00 06 06 00 00 55 cs 0D 0A
0x52=82
0x55=85
82+85+12=167+12=179 —0xB3=cs
21 22 00 52 00 06 06 00 00 55 B3 0D 0A

Program Size: Code=8348 RO-data=336 RW-data=72 ZI-data=1488
打开监控7788
关闭监控7284
8349+336 /1024=8k
72+1488 /1024=1.5k

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; Stack Configuration
; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;0x00000400------100000000000
;

Stack_Size EQU 0x00000500
https://blog.csdn.net/weixin_37787043/article/details/104442843

Program Size: Code=7604 RO-data=336 RW-data=72 ZI-data=1744

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值