Makefile Learning Notes
linux下步进电机驱动开发
功能需求
最近项目中需要在嵌入式Linux系统中直接控制步进电机,需要开发Linux系统下的步进电机驱动,实现控制步进电机向前,向后运动指定步数的驱动API接口。每个步进电机有三个硬件接口,一个使能IO口通过电平控制步进电机的使能, 一个方向控制IO口通过电平控制步进电机的运动方向,一个PWM驱动接口驱动电机运动。在项目中的设备需要同时控制多个步进电机,因此开发的驱动也需要支持多个步进电机设备同时挂载。
分析
步进电机在Linux中属于字符设备,控制步进电机的运动(向前,或向后)和停止等API可以通过实现字符设备的文件操作函数来实现。这里选择实现文件操作中的ioctl函数,通过定义ioctl不同的命令来对应我们需要的不同操作。当然也可以通过字符设备文件的写函数write来实现,通过向步进电机的字符设备文件中写入相应的命令实现需要的操作。
其次,针对驱动程序需要同时支持多个步进电机的需求,可以采用设备树加platform总线的形式。将步进电机挂载到platform总线上,通过platform的probe函数自动解析设备树文件,得到挂载的步进电机设备信息,从而根据设备树文件中的定义加载指定数量的驱动,配置好驱动需要用到的硬件资源。
设备树文件的编写
前面提到了每个步进电机有三个硬件接口需要指定,其中包括1个使能GPIO口,1个方向GPIO口,1个PWM输出。这里PWM输出可以直接使用硬件PWM模块,也可以通过软件定时器去控制GPIO口实现模拟PWM功能。
因此设备树文件中对于一个步进电机的定义如下:
1 | \ { |
树莓派qt5使用虚拟键盘配置
Qt5虚拟键盘功能的实现
在树莓派上使用Qt开发触摸屏UI软件时,由于使用触摸屏不使用物理键盘,在需要进行文本输入时需要在UI软件中提供虚拟键盘功能。在Qt5中有两种方式提供虚拟键盘功能,一种是自己按照自己的需求开发相应的虚拟键盘模块,这种方式可定制性强,灵活性好,但是需要自己做很多开发调试工作。另一种就是直接使用Qt5提供的QVirtualKeyboard虚拟键盘模块,这种方式直接使用qt官方提供的虚拟键盘模块,省去了自己开发的工作,同时官方的虚拟键盘模块整体UI设计还是不错的。
在Qt中使用官方虚拟键盘模块的步骤如下:
首先要确认系统中已经安装了Qt5对应的虚拟键盘模块,debian系统下可以用如下指令安装:
1
sudo apt-get install libqt5virtualkeyboard5-dev
在Qt工程配置文件(.pro文件)中引用虚拟键盘模块:
1
2// 在.pro文件开始处添加
Qt += virtualkeyboard在main函数的最开始将整个工程的输入模块环境变量定义为虚拟键盘模块:
1
2// main函数开始处添加qt输入模块环境变量
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));在需要调用虚拟键盘中的控件中设置输入模式
输入控件(QLineEdit, QSpinBox等)有多种输入方式(InputMethodHints)可以设置,可以直接通过UI设计器或者代码的方式对相应的输入空间的输入方式进行设置。下面列出了常用的几种,具体可以参考Qt官方文档: