采用米尔实现三坐标平台控制板(结项)
采用米尔实现三坐标平台
米尔的板子试用已经挺久了,本来是想做个3D打印机,但是现有的直线滑台精度达不到,也是自己现在自由时间太少,所以就做了个三坐标直线滑台。也是通过这次试用感觉自己差得太多,所以现在开始还是要好好充充电。
三坐标平台一共采用的是5个步进电机的直线导轨,其中X、Y轴采用的是两个电机,Z轴采用一个步进电机。连接示意图如下图所示
实物图如下图所示。
控制界面采用的是用Qt编的界面。界面有电源开关、三个轴的速度控制滑条、位置控制滑条,各个滑条右边是当前值的显示。如下图所示。
整个程序的结构如下图所示,采用米尔官方的驱动,直接通过对驱动的操作进行打包到GPIO内,并用motor类包含motor的所有操作,在MotorControl内进行电机的建立以及控制逻辑的实现。
电源开关power on的时候将下面的各个滑条使能,而关闭的时候则取消使能。
- void MotorControl::ChangePower()
- {
- int speed_x,speed_y,speed_z;
- int position_x,position_y,position_z;
- if(powerflag==0)
- {
- speed_x = motor_speed_x->value();
- speed_y = motor_speed_y->value();
- speed_z = motor_speed_z->value();
- position_x = motor_position_x->value();
- position_y = motor_position_y->value();
- position_z = motor_position_z->value();
- label_motor_speed_x->setText(QString::number(speed_x));
- label_motor_speed_y->setText(QString::number(speed_y));
- label_motor_speed_z->setText(QString::number(speed_z));
- label_motor_positon_x->setText(QString::number(position_x));
- label_motor_positon_y->setText(QString::number(position_y));
- label_motor_positon_z->setText(QString::number(position_z));
- powerflag = 1;
- pushButton_power->setText("power OFF");
- motor_speed_x->setEnabled(true);
- motor_speed_y->setEnabled(true);
- motor_speed_z->setEnabled(true);
- motor_position_x->setEnabled(true);
- motor_position_y->setEnabled(true);
- motor_position_z->setEnabled(true);
- motor_x_1->TurnOn(speed_x,position_x);
- motor_x_2->TurnOn(speed_x,position_x);
- motor_y_1->TurnOn(speed_y,position_y);
- motor_y_2->TurnOn(speed_y,position_y);
- motor_z_0->TurnOn(speed_z,position_z);
- }else{
- powerflag = 0;
- pushButton_power->setText("power ON");
- motor_speed_x->setEnabled(false);
- motor_speed_y->setEnabled(false);
- motor_speed_z->setEnabled(false);
- motor_position_x->setEnabled(false);
- motor_position_y->setEnabled(false);
- motor_position_z->setEnabled(false);
- motor_x_1->TurnOff();
- motor_x_2->TurnOff();
- motor_y_1->TurnOff();
- motor_y_2->TurnOff();
- motor_z_0->TurnOff();
- }
- qDebug() 0){
- timer = 150/speeds; //单位是毫秒
- }else
- timer = 0;
- qDebug() 0)
- statetimer->start(timer);
- else
- statetimer->stop();
- }
位置滑条总共路程为100,首先将其转换为step_position,即是步进电机从中间位置到目标位置的转换步数。而step变量保存步进电机实际的步进数。当step_position比step大时,正向旋转,而小时反向旋转。
- void Motor::GeneratePulse()
- {
- qDebug() step)
- {
- if(direction==0)
- ChangeDirection(1);
- }
- else
- {
- if(direction==1)
- ChangeDirection(0);
- }
-
- if(powerflag==1)
- {
- if(pulse_flag==0)
- {
- pulse_flag = 1;
- value_GPIO(motorpulse_x,motorpulse_y,GPIO_HIGH); //脉冲引脚设置为高电平
- }else{
- pulse_flag = 0;
- value_GPIO(motorpulse_x,motorpulse_y,GPIO_LOW); //脉冲引脚设置为高电平
- }
- if(pulse_flag==0)
- {
- pulse_flag = 1;
- value_GPIO(motorpulse_x,motorpulse_y,GPIO_HIGH); //脉冲引脚设置为高电平
- }else{
- pulse_flag = 0;
- value_GPIO(motorpulse_x,motorpulse_y,GPIO_LOW); //脉冲引脚设置为高电平
- }
- }
- if(direction==1)
- step = step + 1;
- else
- step = step -1;
- }
总的来说,用米尔的这块板子,感觉还是很棒的。从刚开始拿到的时候就被Rico Board的PCB的布局以及走线给震撼到了。自己也是画过PCB的,知道能把板子做到这么紧凑、规整得有多深的功底,这应该是我见过的最厉害的了,当然也可能是我见识少。米尔给的资料还是挺全的,但是也有一些小问题,包括启动的问题,Qt开发环境配置的一些问题,应该是编译的时候的问题,但是整体来讲还是很棒的。也是自己能力有限,以及时间最近挺忙,不能玩的更深入一点,所以光是看着挺着急,下面得好好充点电,学学Linux驱动去,感觉米尔这块板子是很好的学习平台。而将其作为工业控制入门或者前期验证平台也是一个很棒的选择,能够快速的将前期的想法进行验证。采用Ti的AM4378芯片,增强了 3D 图形加速功能,可实现丰富的图形用户界面。TI的Cortex系列的工业级芯片的相当长的生命周期,(像现在A8还一直屹立不倒),用这块板子也能起到快速验证这片芯片的作用,而参考价值也是很高,。
47.62 KB, 下载次数: 2
看起来还不错哦!
好