在程序运行中,设置了一个全局变量保存电机运行的步数。在收到上位机的命令后,控制程序首先将该步数写入片内EEPROM中再执行。由于EEPROM数据掉电不丢失,因此系统掉电后复位时可以从EEPROM中取出数据然后执行下一次操作。
3.2 手轮微调控制
手轮的作用主要是实现微调设备找到合适的测量点。电子手轮一共有两路脉冲输出,两路脉冲相位差决定了手轮的旋转方向。手轮的控制采用定时器0,使用计数模式。定时器0没置为CTC模式,上升沿触发,OCR0为1,计数初始值为0,中断使能。当外部上升沿触发时计数到1时触发中断,在中断子程序里面根据手轮状态产生相应的脉冲输出。
在手轮中断子程序中,首先将计数器自动清零等待下一个手轮脉冲。然后判断正反信号和手轮档位状态,ATmega16根据状态信息通过延时方法产生一定数量的脉冲控制步进电机。手轮状态共有Z、Y、X 3个方向,X1、X10、X100 3个档位。若手轮在X档位则在相应端口(该端口同时也是定时器脉冲输出口)输出一定数目的脉冲。改变延时的大小可以改变输出频率,但是由于延时输出脉冲的最大频率决定于晶振,因此输出脉冲受到一定影响。延迟方法产生的脉冲不能精确控制步进电机的步进角度,但是可以用于微调。
手轮的正反信号通过D触发器来判断。将手轮脉冲A作为CLK信号,脉冲B为CP信号,复位端和置位端接高电平。当手轮正转时脉冲A脉冲与脉冲B的相位差为正90度,D触发器输出高电平;若反转A脉冲与B脉冲的相位差为负90度,输出低电平。
3.3 串口模块
上位机和单片机主要采用UART异步通信,收发按字节处理。单片机接收上位机命令时采用UART查询方法实现数据接收。其通信格式为:起始字+控制字节+步数+结束字,数据使用国际通用标准ASCII码格式,如表1所示。
设计过程中使用ICCAVR编译器编写单片机控制程序,可以使用atoi函数将ASCII码格式步数转化为整型数据。
责任编辑;zl
关于控制,MCU就介绍完了,您有什么想法可以联系小编。