//已完成 1、IO口调试,定时器定时,串口收发数据; 2、电机的启动与停止,自动找寻始终点; 3、电机点动运行,每次点动结束发送数据至串口,点动距离可自由调节(单位:毫米); 4、电机由起始点移动至结束点,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口,到达结束点停留一段时间后自动回到起始点。停留时间可设定(单位:秒); 5、电机在起始点与结束点之间循环移动,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口; 6、以光栅信号确定测量始终点,只有当磁条通过光栅时装置才会反馈测量值。 7、添加了角行程磁条测试逻辑,旋转台减速比为1:90,测试方案与直行程基本相同 8、添加了起始位、结束位、测量中和无状态四种位置状态显示 //使用说明 在主函数中,我们使用函数Deal_Uart_Data_For_Module(void)来分析处理接收到的数据,使用函数Deal_Motor(void)来控制电机,使用函数ADC_Multichannel()来采集ADC数据。 电机启动需要使用motor_start(void)和motor_mov(unsigned int speed)两个函数,前者配置引脚,后者启动脉冲,参数speed可控制脉冲频率;电机关闭可使用motor_stop(void)函数。 函数FWD(void)和REV(void)用于改变电机转动方向,若要判断磁条当前位置,需要使用函数motor_seat(void),初始化磁条位置可使用mov_begin(viod)或mov_end(void)让磁条移动到起始位或结束位。 void mov_loop1(void)、void mov_loop1_ang(void)、void mov_loop2(void)、void mov_loop2_ang(void)、void mov_step(void)、void mov_step_ang(void)控制电机运行模式。 串口接收数据需要使用receive_ttl_data(uint8_t rx_data)函数,发送数据需要使用send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[])函数。 //协议 PC->主板 SOF: 1个字节 0x05 起始字节 Len: 2个字节 长度 Fou_adr: 2个字节 源地址 Com_adr: 2个字节 目标地址,0ff为广播地址 Cmd16: 2个字节 命令字 Request-data: N个字节 数据 XOR: 2个字节 校验 END: 1个字节 0x1B 结束字节 数据部分 测量功能: 00 直行程 01 角行程 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) 电机运行多少圈为一个步长; 00 00 (65535)半毫米 电机运行间隔时长: 00 00 (65535)毫秒(数据反馈时间) 到“结束点”后,停止时间 00 00 (65535)秒 例:05 00 14 00 A1 00 B1 F0 01 00 01 01 00 01 03 E8 00 10 CD 40 1B//方案一 主板->PC SOF: 1个字节 0x05 起始字节 Len: 2个字节 长度 Fou_adr: 2个字节 源地址 Com_adr: 2个字节 目标地址,0ff为广播地址 Cmd16: 2个字节 命令字 Request-data: N个字节 数据 XOR: 2个字节 校验 END: 1个字节 0x1B 结束字节 数据部分 测量功能: 00 直行程 01 角行程 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) 到位开关状态: 00 无状态 01 起始位 02 结束位 03 正在通过光栅 采样点压; 00 00 (65535)毫伏 激光电压: 00 00 (65535)毫伏 磁条长度: 00 00 (65535)毫米 例:05 00 14 00 A1 00 B1 F0 01 00 01 01 03 07 03 00 00 00 10 CD 40 1B //直行程电机转动一圈,磁条水平位移为5mm; //角行程电机转动一圈,磁条旋转4°;