自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (6)
  • 收藏
  • 关注

原创 Python调用多媒体定时器实现高精度定时

自己在使用Python实现一个周期执行的任务时,通常会用time.sleep()函数实现,但该方法能实现的最小周期只有30ms左右,且定时不够精确,大概有±5ms左右的跳动。该方法可满足绝大多数应用场景,但对某些实时性要求较高的应用场景则不适用。查阅资料得知,在Winmm.dll中提供的多媒体定时器可实现精度1ms的高精度定时,而且使用方法也颇为简单,只需要通过ctypes模块导入动态链接库并访问动态链接库中的函数即可。

2023-03-23 16:58:51 718 1

原创 STM32F303 USB不能发现识别设备

使用STM32CubeMX配置USB为虚拟串口生成工程编译下载至F303中,连接电脑后在设备管理器中不能发现设备,USB接口电路同之前正常使用的F405电路。查阅资料后知晓,USB总线需要上拉电阻来判断是否有设备连接,而F405中已内置了该上拉电阻,F303则没有,所以相同的电路在搭配F303时无法正常工作。翻看参考链接评论区时知晓,ST的USB外设有三种,USB FS Device,USB FS OTG和USB HS OTG,只有第一种需要外置上拉电阻。

2022-10-13 16:58:25 4030

原创 整数除255快速算法的完全不严谨推导

在浏览一个帖子C 语言有什么奇技淫巧?时,无意看到一个整数除255快速算法,其算法如下:对此算法已有人给出证明255快除算法的证明和推广,但对于我的数学水平而言,这个证明似乎比这个算法本身更难以理解。在此,仅列出自己的理解过程,且是完全不严谨的。算法展开式如下:x255=x28+x255∗28=x28+x216+x255∗216=x28+x216+x224+x232+x255∗232\frac{x}{255}=\frac{x}{2^8}+\frac{x}{255*2^8}=\frac{x}{2^8}

2022-06-07 16:54:46 316

原创 GD32 CAN搭配HAL库使用的问题

CAN初始化时,程序会在函数HAL_CAN_Init执行时报错,仿真发现是在等待初始化确认时超时导致。查阅了ST和GD的参考手册,二者对初始化确认位的描述并无差异,推测是GD的bug。ST的描述,见下图:GD的描述,见下图:对此,解决办法是屏蔽掉对初始化确认位的检测,需注释掉stm32f4xx_hal_can.c文件中的部分代码,如下: /* Wait initialisation acknowledge */// while ((hcan->Instance->MSR &.

2022-05-24 11:21:52 2556 4

原创 为Python程序添加桌面快捷方式

写了许多Python的程序,每次运行都要翻到程序所在的文件夹下打开命令行窗口,再输入python ***.py来运行程序,着实不方便。查了一下网上的资料,可以在桌面添加一个快捷方式,目标一栏填写python.exe的路径和py文件的路径,双击快捷方式即可运行,但运行的同时会伴随打开命令行窗口,可以通过将python.exe修改为pythonw.exe解决。见下图:为了美观还可以修改快捷方式的图标,点击上图的更改图标按钮,即可选择想要的图标。见下图:...

2022-05-16 15:22:16 3923 2

原创 使用STM32CubeIDE仿真时跳过芯片验证

使用STM32CubeIDE仿真时会读取芯片信息,若不是ST的芯片则会有错误提示,仿真将无法进行。STM32CubeIDE作为ST开发的自家工具仅供自家芯片使用无可厚非,但如果需要将ST的芯片替换为第三方的兼容芯片,将已有的CubeIDE工程移植到其他的开发环境工作量无疑大大的,此时,若有办法跳过芯片验证就好了。查阅了网上的资料,方法大致有两种,如下:STM32CubeIDE调试时,报Error in final launch sequence: Failed to start GDB serverS

2022-05-06 15:30:26 1473 2

原创 GD32F4上使用HAL库实现USB虚拟串口通讯

一直使用STM32F4搭配HAL库做项目,最近需要将软件移植至国产的GD32F4上,但兆易仅提供了标准库,并未像ST那样提供HAL库,但二者USB库又互不兼容。最后,为了原软件不做大的修改,故决定使用ST的HAL库+兆易的USB库来实现。首先是USB库文件的准备,兆易官网可下载GD32F4xx_Firmware_Library,将Firmware\GD32F4xx_usb_library目录下的相关文件拷贝至工程目录中,并添加至工程中,文件目录结构如下图所示:另外,在Examples\USB\USB

2021-09-01 16:57:38 6503 14

原创 使用CANopen for Python发送SDO读取数据

最近打算用Python做一个CANopen的主站,在此使用CANopen for Python做了一个SDO读取数据的测试例程。其发送数据使用了python-can,可参考上一篇博文《调用python-can库使用周立功CAN接口卡发送数据》。以USBCAN-2E-U接口卡,500k波特率,发送SDO为例,代码如下:import canopenimport timenetwork = canopen.Network()network.connect(bustype='canalystii',

2020-06-25 23:52:09 1588

原创 调用python-can库使用周立功CAN接口卡发送数据

查阅python-can文档,知晓其支持部分周立功CAN接口卡,故写例程验证数据的发送。另外,使用的python版本为3.4,在安装python-can时提示找不到windows-curses对应版本的安装包,故在python-can的setup.py中,取消了windows-curses的安装依赖。代码如下(ControlCAN.dll需放置在相同路径下):from __future__ import print_functionimport platformimport candef sen

2020-06-24 12:21:05 5056 1

原创 Python调用周立功CAN接口卡接口库函数(接收数据)

上篇博文《Python调用周立功CAN接口卡接口库函数》仅做了发送数据例程,有网友在测试接收时出现了问题,在此给出自己的接收数据代码。在此需要强调的是,因为经济水平有限,自己所使用的CAN接口卡为第三方兼容周立功函数库的接口卡,经测试,第三方CAN接口卡VCI_Receive接收函数其参数WaitTime是无效的,即使该值为-1,也不会阻塞等待数据,若使用周立功原版接口卡则无此问题。以USBCAN-2E-U接口卡,1000k波特率,接收一帧数据并打印为例,代码如下:import platformim

2020-06-19 12:11:39 4478 17

原创 PyQt5学习笔记9_使用setStyle和setStyleSheet进行换肤

通过QStyleFactory.keys()可获取用于setStyle的有效值,本例程中包含了“Windows”,“WindowsXP”,“WindowsVista”,“Fusion”四种风格,此外,还使用了setStyleSheet对一款黑色主题“QDarkStyleSheet”进行加载,即可以在以上5种界面风格之间切换。效果如下:代码如下:import sysfrom os.path...

2019-02-07 12:34:27 14935 10

原创 使用STM32CubeMX创建基于FreeRTOS的lwIP工程

硬件平台:STM32F407VE+DP83848开发板STM32CubeMX配置:在Peripherals中对ETH的模式选择RMII,在Middlewares中勾选FREERTOS和LWIP,见下图:依据硬件环境自行对时钟进行配置,此处略。在LWIP Configuration中对lwIP进行相应的配置,将LWIP_DHCP设为Disable,IP_ADDRESS设为192.168.1...

2018-10-15 18:36:16 7914

原创 PyQt5学习笔记8_QTableView中回车进入下一单元格

帮同事实现一个在表格的输入过程中,敲入回车后自动进入下一单元格编辑状态的需求。在setData中发送信号并将下一单元格的坐标进行传递。代码如下:import sysfrom PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView)from PyQt5.QtCore import (QAbstractTableModel, Q...

2018-09-28 23:45:44 3041

原创 TMS320F281x 串口烧写程序

参阅《TMS320F281x Boot ROM Serial Flash Programming》(文献编号:SPRAAQ2),使用其配套的CKFA工程(下载地址)通过串口对TMS320F281x进行程序烧写。 在使用串口烧写前,参照下表将GPIO配置为调用SCI_Boot来从SCI_A中加载。 给DSP上电后,在超级终端中敲一个字母“a”或“A”,SCI_Boot code将应答收到的字...

2018-09-01 17:41:40 2962

原创 基于PyQt5的HEX文件合并工具

最近时常需要合并HEX文件,趁着端午节的闲暇做了一个合并工具,界面如下: 简单介绍一下,使用IntelHex对HEX文件进行读写和合并操作;数据地址冲突时报错并终止合并;右键 -> 文件段落,显示segments方便了解文件结构;HEX文件的Start Linear Address重写为None;使用dropEvent实现HEX文件的拖放;qss定制黑色界面。 代码如下:# -*...

2018-06-22 23:11:22 1288 1

原创 CanFestival移植至战舰STM32F1开发板

使用STM32CubeMX新建一个工程,仅需对CAN、RCC、SYS做若干简单的配置即可,CAN波特率配置为500k,点击Project -> Generate Code生成Keil工程与代码;在CanFestival官网下载最新版的源代码,在工程目录下新建CanFestival文件夹,将相应的文件拷入其中,其中ObjDict.c,ObjDict.h在博文使用Objdictedit生成C...

2018-06-13 16:18:18 2717 2

原创 使用Objdictedit生成CanFestival所需的对象字典文件

安装Beremiz,Objdictedit是其中的一个工具,但在新版本中该工具似乎被取消了,在此以Beremiz-1.01为例,安装完成后如下图所示: 以从零开始新建符合CiA DS301的对象字典EDS文件中创建的EDS文件为例,使用CANeds将1800sub6 SYNC start value删除,同理将1801sub6,1802sub6,1803sub6删除,否则使用Objdicte...

2018-06-13 12:12:32 5814

原创 在QTreeView中显示EDS文件的部分内容

使用开源的CANopen for Python可以轻松的读取EDS文件中的内容,在此以从零开始新建符合CiA DS301的对象字典EDS文件中创建的EDS文件作为示例,加载后的效果如下图所示: 因为代码非常简单,在此仅贴出代码而不作说明,代码如下:import canopenimport sysfrom PyQt5.QtWidgets import (QApplication, Q...

2018-04-22 22:55:45 903

原创 从零开始新建符合CiA DS301的对象字典EDS文件

EDS编辑器选用CANeds 3.6,可在Vector官网下载。通过File -> New,在弹出的窗口中选择*.eds,点击OK,即可新建eds文件,如下图所示: 通过Database -> Edit List,在弹出的窗口中仅需选中v301.codb,点击OK,即确保对象字典数据库中仅包含DS301所需的对象;将数据库的对象依次复制粘贴至EDS文件中,注意在SDP Pa...

2018-04-22 11:15:46 8587 2

原创 Python调用周立功CAN接口卡接口库函数

偶尔会用到周立功CAN接口卡,于是试着使用Python调用其接口函数。查阅CAN测试软件与接口函数使用手册,只讲述了VC和VB的调用方法。在这里通过ctypes模块导入动态链接库并访问动态链接库中的函数。 以USBCAN1接口卡,500k波特率,发送一帧数据为例,代码如下:from ctypes import *class _VCI_INIT_CONFIG(Structure): ...

2018-03-22 16:16:09 13359 33

原创 Python实时绘图库小结

Matplotlib 速度慢,适用于绘制高质量的图像,但不适用于快速的实时绘图。PyQtGraph官网 对此评论为:If you are doing anything requiring rapid plot updates, video, or realtime interactivity, matplotlib is not the best choice.PyQwt 不支持PyQt5...

2018-02-10 11:51:30 4013

原创 PyQt5学习笔记7_QDarkStyleSheet

在GitHub寻得一款好看的黑色主题QDarkStyleSheet,界面美观,放两张官方的截图,如下: 使用方法很简单,代码如下:import sysimport qdarkstylefrom PyQt5 import QtWidgets# create the application and the main windowapp = QtWidgets.QApplicat...

2017-12-30 23:37:22 7900 6

原创 PyQt5学习笔记6_QTableView中嵌入按钮

开发环境:PyQt 5.5.1 Python 3.4.4 参考Button Delegate For QTableViews给出的例程,实现在一个单元格中嵌入多个按钮,代码如下:import sysfrom PyQt5.QtCore import (Qt, QAbstractTableModel, QModelIndex, QVariant)from PyQt5.QtWidgets impor

2017-12-11 23:26:36 14809

原创 PyQt5学习笔记5_QTableView中嵌入复选框

开发环境:PyQt 5.5.1 Python 3.4.4在表格中嵌入复选框Qt官方有相应的例程,对于如何在表头中嵌入复选框查找了一些资料,如下: How can I insert a checkbox into the header of my view? Adding checkBox as vertical header in QtableView 参阅上述资料,实现代码如下:import

2017-12-07 12:16:59 11348 7

原创 PyQt5学习笔记4_loadUi加载ui文件

开发环境:PyQt 5.5.1 Python 3.4.4 Qt 5.6.3加载ui文件 在Qt Creator中编辑好所需的ui文件后,在其目录下新建一个py文件,代码如下:import sysfrom PyQt5.QtWidgets import QApplication, QMainWindowfrom PyQt5.uic import loadUiclass MainWindow(

2017-11-30 22:12:50 15660

原创 PyQt5学习笔记3_PyInstaller生成exe

开发环境:PyQt 5.5.1 Python 3.4.4 Qt 5.6.3 PyInstaller 3.2.1生成exe 在笔记2的目录下打开命令行窗口,输入“pyinstaller dashboard.py”并回车生成dashboard.exe,此时运行dashboard.exe将会提示缺少文件,如下所示: 添加必要文件 参考 PyInstaller + PyQt5 + QML: QtQui

2017-10-08 21:54:09 1640

原创 PyQt5学习笔记2_仪表盘示例

开发环境:PyQt 5.5.1 Python 3.4.4 Qt 5.6.3运行示例 将路径“\Qt\Qt5.6.3\Examples\Qt-5.6.3\quickcontrols\extras\dashboard”下的文件夹与文件拷贝至笔记1的目录中,仅对加载qml文件的代码做修改,Ctrl+R运行程序,效果如下: 加载qrc文件 对比原程序,第一步中未加载油箱、温度图标以及字体。参考 The

2017-10-07 12:22:15 4316 1

原创 PyQt5学习笔记1_第一个QML+PyQt程序

开发环境:PyQt 5.5.1 Python 3.4.4 Qt 5.6.3Qt Creator新建项目 通过New File or Project->Qt Quick Controls UI新建一个项目,需勾选With ui.qml file。Ctrl+R运行程序,效果如下: PyQt程序编写 参考教程 PyQt5 - Lesson 007. Works with QML QtQuick,在第

2017-10-06 10:24:11 7949

原创 无刷直流电机换相时刻电流变化速率的讨论

文献[1]讨论了换相时电流变化的三种情形,如下:关断相电流下降速率等于开通相电流上升速率;关断相电流下降速率大于开通相电流上升速率,此时关断相电流在开通相电流增至给定电流之前减至零;关断相电流下降速率小于开通相电流上升速率,此时关断相电流在开通相电流增至给定电流之后减至零。此外还给出了上述三种情形的图示,在此仅截取关断相电流下降速率大于开通相电流上升速率的图示,即文献[1]中的Case b:

2016-12-28 00:04:44 6199

原创 PWM调制方式对换相转矩脉动影响的补充

文献1通过理论推导分析了四种不同的PWM调制方式对换相转矩脉动的影响,文中式(16)和式(27)通过作差来比较换相转矩脉动的偏差是不严谨的,应先确定被比较的两式的符号。下面以PWM_ON型和H_PWM-L_ON型调制方式的上桥换相为例进行说明。上桥换相前: [DUs0]=[L00L]p[iaic]+[eaec]+[UnUn]\begin{bmatrix} DU_s \\ 0 \end{bmatr

2016-12-10 00:31:04 2346

原创 使用STM32实现PMSM电机的正弦驱动

Microchip 的应用笔记 AN1017 讲述了一种使用空间矢量调制(Space Vector Modulation,SVM)方法产生用于驱动 PMSM 电机各相的正弦电流,以此驱动具有霍尔位置传感器的永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)的控制算法,其配套的开源算法采用 dsPIC® 数字信号控制器实现,此前在淘宝购入了一块基于 STM3

2016-11-28 17:03:47 14891 24

原创 基于STM32的反电动势无传感BLDC控制

Microchip 的应用笔记 AN1083 详细地讲述了一种无传感器无刷直流电机的控制算法,其配套的开源算法采用 dsPIC® 数字信号控制器实现,此前在淘宝购入了一块基于 STM32 的无刷直流电机开发板,于是试着将该开源代码移植至手上这块开发板上。开发板如下图所示: 因硬件平台不同,故需要对硬件相关部分的代码做修改,主要涉及定时器和 AD 转换器,又由于其 IIR 滤波算法采用汇编代码编

2016-01-25 15:05:35 15004 2

原创 mos管驱动电路最小门极电阻计算

在知乎看到一篇回答,对其中驱动电阻下限值计算的部分存疑,而后在名为《IGBT 以及 MOSFET 的驱动参数的计算方法》的应用指南 AN-1001 中找到了满意的答案。在该应用指南中由 Eq.6 得到了门极电流 i(t)i(t) 不振荡的阻尼条件 Eq.7,并以此得出了电流波形不振荡的最小门极电阻的计算公式。然而,该应用指南并未讲述如何推导出 Eq.7,故写此文列出推导过程,如下: 由 Eq.6

2016-01-13 09:02:09 8674

原创 《现代控制工程》负载元件方程的推导

《现代控制工程(第五版)》 5.3.1 章节中讲述,伺服系统由比例控制器和负载元件(惯性和黏性摩擦元件)组成。假设我们希望控制输出位置 c,使其与输入位置 r 相协调。 负载元件方程为 Jc′′+Bc′=TJ c^{\prime\prime} + B c^\prime = T 式中,TT 为比例控制器产生的力矩。以下为该方程的推导: 黏性摩擦系数(Viscous friction coeffi

2016-01-09 15:01:42 521

原创 应用笔记AN1078一阶数字低通滤波器推导和相位延迟计算

Microchip 的应用笔记 AN1078 中用作反电动势滤波的一阶数字低通滤波器由原文中的公式 4 给出,如下: y(n)=y(n−1)+T2πfc(x(n)−y(n))y(n) = y(n-1) + T2πf_c (x(n) - y(n)) 该滤波器又称作一阶 RC 数字低通滤波器,该公式可由下图所示的 RC 低通滤波电路中推导出来。 由电路学知识可得: Vin=Vout+RC

2015-12-26 12:04:28 21362 7

原创 Windows下搭建GCC + Eclipse + OpenOCD的ARM开发环境

最近更新Win 10,重搭了GCC + Eclipse + OpenOCD的开发环境,写此文把过程记录下来,以便以后查阅。硬件平台STM32F405开发板 + ST LINKstep 1GCC ARM toolchain少不了,传送门。Build tools忘不了,传送门。OpenOCD跑不了,传送门。以上,都需要设置环境变量里的PATH。step 2测试用的工程文件,传送门。将Open

2015-08-11 10:46:55 7081

原创 基于STM32F4的FreeRTOS_笔记2_打印输出字符串

曾快速浏览过一遍《FreeRTOS实时内核使用指南》,但过后不久一些简单的概念却又忘了,遂决定把其中的示例程序都自己写一遍,以加深记忆。关于printf()在此用printf()函数代替示例中的vPrintString()函数,以实现通过串口将相应的字符串打印至串口助手上。对此,ST的库函数中有相应的例程,需要将以下代码添加到程序中:#ifdef __GNUC__ /* With GCC/RAI

2015-02-17 09:30:07 4852 2

原创 基于STM32F4的FreeRTOS_笔记1_IO间隔100ms翻转

最近想在Keil开发环境下将FreeRTOS移植到STM32F4系列单片机上,无奈官方DEMO中STM32F4系列只有IAR的示例,遂决定自己动手移植,并将这个学习过程记录下来。相关文件添加FreeRTOS官网下载最新的源代码。不妨在工程所在文件夹下新建FreeRTOS文件夹,将\FreeRTOSV8.2.0\FreeRTOS\Source路径下的include文件夹复制到新建的FreeRTOS

2015-02-06 16:30:48 1966

GD32F4上使用HAL库实现USB虚拟串口通讯

详细描述可参考博文: https://blog.csdn.net/yy123xiang/article/details/120042888

2022-06-02

使用STM32实现PMSM电机的正弦驱动

关联博文:https://blog.csdn.net/yy123xiang/article/details/53380391

2018-11-20

使用STM32CubeMX创建基于FreeRTOS的lwIP工程

使用STM32CubeMX创建基于FreeRTOS的lwIP工程 博文地址:https://blog.csdn.net/yy123xiang/article/details/83062764

2018-10-15

HEX文件合并工具

博文 基于PyQt5的HEX文件合并工具 链接 https://blog.csdn.net/yy123xiang/article/details/80779583

2018-06-22

CanFestival移植至战舰STM32F1开发板

博文 CanFestival移植至战舰STM32F1开发板 链接 https://blog.csdn.net/yy123xiang/article/details/80680790

2018-06-13

CiA DS301 EDS文件

博文 从零开始新建符合CiA DS301的对象字典EDS文件 链接 https://blog.csdn.net/yy123xiang/article/details/80037206

2018-04-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除