大海作坊

Raspberry Pi(中文名为“树莓派”,简写为RPi),只有信用卡大小的微型电脑,其系统基于Linux,受众多计算机发烧友和创客的追捧。LinuxCNC软件是控制数控机床专业软件,它可以驱动铣床、车床、3D 打印机、激光切割机、等离子切割机、机械臂、六足机器人等。许多CNC爱好者很早就希望能在树莓派上运行,虽然都是Linux系统,但还是要会编译软件,使不会计算机语言的不能如愿。直到今年LinuxCNC2.81版本出来,软件封装好了树莓派系统,使数控爱好者又多一个运行环境。

     下面介绍一下LinuxCNC如何在树莓派上运行。

首先到LinuxCNC官方网站下载LinuxCNC 2.8.1 Raspberry Pi OS,用Win32DiskImager软件烧写到SD卡上,把SD卡插入树莓派上,打开树莓派电源,第一次进入软件会提示设置,选中文,进入桌面就是中文的了。进入桌面点左上角的树莓LOGO,下拉菜单找到CNC,点开StepconfWizard,进行软件设置。

根据向导一步一步,主要参数还要根据自己机器设置。也可以完成后到文档中改数据。

设置完成后,桌面上会生成一个快捷方式和一个文件夹,但快捷方式现在不能直接运行,因为我们设置生成的是并口端口,树莓派现在运行会出错。

打开文件夹,里面有几个文件,主要看后缀为HAL和INI文件,INI文件是机器的机械参数,爱好者都明白,不多说,重要的是HAL文件,HAL文件也就是驱动文件,原是驱动并口的,现在要为改树莓派的GPIO口,不然软件打不开。

看一下原始HAL文件

loadrt [KINS]KINEMATICS

loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS

loadrt hal_parport cfg=”0 out”

setp parport.0.reset-time 5000

loadrt stepgen step_type=0,0,0

addf parport.0.read base-thread

addf stepgen.make-pulses base-thread

addf parport.0.write base-thread

addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread

addf motion-command-handler servo-thread

addf motion-controller servo-thread

addf stepgen.update-freq servo-thread

net spindle-cmd-rpm     <= spindle.0.speed-out

net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs

net spindle-cmd-rps     <= spindle.0.speed-out-rps

net spindle-cmd-rps-abs <= spindle.0.speed-out-rps-abs

net spindle-at-speed    => spindle.0.at-speed

net xstep           => parport.0.pin-02-out

setp parport.0.pin-02-out-reset 1

net xdir            => parport.0.pin-03-out

net ystep           => parport.0.pin-04-out

setp parport.0.pin-04-out-reset 1

net ydir            => parport.0.pin-05-out

net zstep           => parport.0.pin-06-out

setp parport.0.pin-06-out-reset 1

net zdir            => parport.0.pin-07-out

LPT hal_parport是并口驱动,现在要改为树莓派端口GPIO驱动。我把步进电机XYZ轴脉冲方向定义为

 GPIO  xstep,29,xdir,31, ystep,32,ydir,33, zstep,35,zdir,37

 loadrt Hal_parport cf=”0 out”就是告诉HAL加载驱动的时候默认是为LPT ,hal_parport是驱动的名字,这里我们改一下树莓派驱动的名字,cf=”0 out”是输出端口。
首先,我们必须确定 3 个轴的输出引脚,每个轴有 2 个 step 和 dir 引脚,因此我们需要 6 个用于步进驱动器的输出引脚。

树莓派 指定 26 个输出引脚的顺序如下:

RPi_gpios[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22 , 21, 23, 24, 25, 26, 27 }; 
RPi_pins[] = {3, 5, 7, 29, 31, 26, 24, 21, 19, 23, 32, 33, 8, 10, 36, 11, 12, 35, 38, 15, 40, 16, 18 , 22, 37, 13 }; 

根据这个表规定使用为1,不使用为0,转换为二进制是 1000000100000110000011000,转换10进制是16911384

我们把loadrt hal_parport cf=”0 out”转为loadrt hal_GPO dir=16911384(hal_gpio 的驱动程序是 GPIO 文件)。dir=16911384 声明 GPIO 的输出引脚。 line pets parport.0.reset-time 5000这行我们删除。loadrt stepgen step_type=0,0,0这一行是 step/dir 类型中 step 的输出脉冲类型,我们保持原样。 编辑后我们得到loadrt hal_gpio dir=16911384 loadrt stepgen step_type=0,0,0 

在文件中找到所有字母parport.0替换为 hal_gpio
找到这一行addf parport.0.reset base-thread去掉了。修改后:

loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES kins=trivkins tp=tp

loadrt hal_gpio dir=16911384

loadrt stepgen step_type=0,0,0

addf hal_gpio.read base-thread

addf stepgen.make-pulses base-thread

addf hal_gpio.write base-thread


根据前面树莓派3轴步进电机定义pin 29 作为 xstep,31 作为 xdir,32 作为 ystep,33 作为 ydir,35 作为 zstep,37 作为 zdir。


转换为树莓派GPIO端口驱动:
net xstep => hal_gpio.pin-29-out 
net xdir => hal_gpio.pin-31-out 
net ystep => hal_gpio.pin-32-out 
net ydir = > hal_gpio.pin-33-out 
net zstep => hal_gpio.pin-35-out 
net zdir => hal_gpio.pin-37-out 

保存文件就可以运行。

软件可以正常打开运行后,就可以做接口板了,因为树莓派电源是3.3V, 驱动电流有限,输入和输出最好有光耦隔离。下面是我做的一个接口板。

树莓派体积小,完全可以无头(不要显示器,不要键盘鼠标)运行,还可以手机安装VNC软件,手机做屏幕,做成脱机控制器。

此文只是简单介绍一下,起个抛砖引玉作用。在树莓派下完全可以运行LinuxCNC ,LinuxCNC 是免费开源软件,实时稳定,功能强大,爱好者就多一个数控系统了。

                                       2021,8,3  长沙

作者 大海作坊

红豆生南国,春来发几枝。 愿君多采撷,此物最相思