自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张鹏军的技术之旅

VC,嵌入式,工控软件

  • 博客(19)
  • 收藏
  • 关注

原创 uCOS学习笔记以及编程接口

实时操作系统uCOS是一个实时操作系统(RTOS),在这里我对实时的理解是每个任务的有不同的优先级,当高优先级任务就绪时可以不用等待低优先级的任务执行完成,就可以立马调度执行,响应时间基本是固定的.任务管理主要包括任务的创建,删除,挂起和恢复时间管理主要是实现任务的延时,延时的单位可以节拍,毫秒,秒,分,小时。一般调用延时函数后,当前的任务会从运行状态变为睡眠状态.时间到后会把该任务变为就绪态.任务间通讯及同步uCOS使用信号量,邮箱,队列实现任务间的同步。邮箱相对于信号量,可以传递一个消息指

2020-11-09 15:59:42 415

原创 STM32 NPN与PNP检测电路

简介工业用的传感器一般有NPN PNP两种类型 :NPN传感器:黑色信号线的连接是与0V的蓝色线断开或连接的。PNP传感器:黑信号线的连接是与与24V的棕色线断开或连接的。单片机检测传感器的状态改变一般需要增加一个光耦隔离电路,用于防止外界干扰会损坏单片机。NPN传感器检测电路当X1感应时,X1与蓝色的0V相连,光耦导通,IN1就和GND连通,单片机呈现低电平当X1感应时,X1与蓝色的0V不相连,光耦不导通,IN1就和GND不连通,单片机呈现高电平PNP检测电路当X1感应时,X1与棕色

2020-09-01 14:34:26 5111

原创 STM32 步进电机T型加速

一般PLC 运动控制卡都有实现电机的T形 S形加速算法,我们只需要设置起始最小速度(Pulse/S),最终最大速度(Pulse/s),加速时间(ms)即可,这样使用起来很方便河直观。但有些控制场合不是使用PLC或运动控制卡,而是我们自己做的STM32控制时,这些加速算法就需我们自己来实现了。步进电机加速一般有S型加速和T型加速,T型由于电机的运动状态包含匀加速 匀速 匀减速三种状态,运动轨迹看起来像个等腰梯形,所以叫T形加速.加速数据生成以下生成的数据,是以定时器频率为12M为基准:/******

2020-08-31 11:33:33 4095 2

原创 使用宏定义优化switch case

简介使用STM32做运动控制,程序中需要大量使用switch case来控制机械设备的一步步的设备运动.写程序有时会忘记写break,会导致程序的异常执行,查找程序bug也需要花费大量的时间,所以这也是switch case的致命的缺点。再就是程序大量使用switch case break,经常出现两行的case和break,程序逻辑代码可能只有一行代码,这样就有点主次不分明,程序逻辑会淹没在switch case中.switch case结构特点和优化switch case以switch开始,中间包

2020-08-26 10:15:19 3580 6

原创 STM32单片机程序dll实现

目的:使用dll减少代码编译,版本维护等等

2020-08-25 13:23:40 3852

原创 Webkit.net使用笔记

Webkit简单使用简介将WebKit添加到工程WebKit简单操作简介最近一个项目需要批量根据网址打开网站浏览,界面布局是左边网页显示,右边批量网址显示,单击一个右边的网址,左边界面就显示相关的网页,网页显示一开始使用VS自带的WebBrowser控件来展示网页,使用自带控件有一个不好的地方是加载网页时老是弹出脚本错误的对话框,很麻烦,于是改为使用基于大名鼎鼎的Webkit在Winform界...

2019-11-03 23:26:09 872

原创 Halcon draw_region接口

功能使用鼠标的左键在窗口上绘制一个闭合的区域.在没有点击鼠标的右键之前,此函数一直阻塞。按下右键,结束区域绘制,窗口会显示填充的闭合区域,填充的颜色可以使用dev_set_color设置.draw_region生成区域没有灰度值的定义.函数参数draw_region( : Region : WindowHandle : )Region:输出的区域对象WindowHandle:输入窗口句柄...

2019-09-04 14:32:37 2097 1

原创 Emgu 模板匹配函数MatchTemplate理解

简介最近做一个OCR的项目,需要识别一张图像的中一长串字符串,每张图片的字符串的位置有些变化,这样就不好截取字符串的图像,好在字符串的以“ED”开头,长度,宽度固定.于是可以使用Emgu的模板匹配函数MatchTemplate来匹配字符串“ED”,以确定字符串的开始位置,截取图片,然后使用Tesseract OCR来识别截取的图片中的字符串.MatchTemplate口: void M...

2018-06-17 01:05:32 5336

原创 stm32 DMA步进电机控制

简介 单片机控制步进电机一般采用定时器比较中断的方式控制步进电机的速度,但是采用这种方法有一个缺点,电机的运行速度比较快的时候,单片机频繁进入中断。刚好stm32的定时器的DMA不占用cpu资源,可以克服这个缺点。步进电机控制原理 给步进电机发一个脉冲(一个高电平,一个低电平),步进电机走一个步距角。步进电机的控制的基本需求:运行速度。运行速度取决于电机发脉冲的频率,这个频率与定时器有关。

2017-07-28 15:44:40 6357

原创 MFC程序的执行顺序

简介 MFC只是对WIN32的API进行了封装,所以MFC的本质还是WIN32程序.有了这层封装,我们看不到WIN32的WinMain函数,也就不清楚MFC程序的启动过程.虽然我们没有看到WinMain函数,但不代表没有WinMain函数,这个函数位于*\VC\atlmfc\src\mfc目录的appmodul .cpp文件中有一个_tWinMain函数, _tWinMain函数调用了WinMai

2017-04-27 11:26:46 1466

原创 MG323 AT指令之网络通信

简介 华为的MG323模块,内置了TCP,UDP协议,单片机只需要使用串口就可以实现网络通信。在实现通信功能之前,需要一台外网服务器测试。这台服务器,你可以到阿里云租,也可以使用花生壳软件自己搭建,还可以使用使用美国授时校准的服务器。使用授时的服务器,最经济,不需要写服务端的程序.可以到http://tf.nist.gov/tf-cgi/servers.cgi网站查询可用的服务器的IP地址,授时使

2017-04-26 16:56:18 1742

原创 指针之美

简介众所周知,C语言的精髓是指针,汇编的间接寻址,C#的委托都可以看成是指针,包括C++的继承,多态的底层实现,也都是基于指针的,因此我们可以把指针可以看成一种编程思想吧,从汇编到C,再到C++,Java,C#,我们看出计算机编程语言的一条演进的线索-指针,为什么会这样发展呢,大型软件系统,对于指针的使用要求很高,搞不好就会出现指针越界,空指针的错误,有些公司,还明文规定禁止使用指针。但是有些地方,

2017-04-25 10:07:16 597

原创 步进电机S曲线的生成

步进电机的速度从0变为一个比较大的速度,需要一个加速过程,否则会产生振动或是电机的堵转。电机加速通常有T型曲线和S型曲线两种方式。S型曲线相对于T型曲线,S型曲线的速度不会突变。S型曲线的原始公式如下: y=K/(1+Exp(a-b*x))(K>0,b>0) Exp是指数函数,由这个公式可以看出y会随着x的增大,逼近K。把这个公式应用到电机控制之中,K看成最大的速度Vmax,x看成时间t的变

2017-04-24 16:02:18 24614 11

原创 获取NVIDIA显卡的温度

NVIDIA显卡在硬件上有温度传感器,可以感知显卡的运行环境。温度数据的获取,一般是通过调用NVIDIA的SDK的相关函数即可。SDK的下载的网址(https://developer.nvidia.com/nvapi),里面有一些sample code可以参考。获取温度的函数是NvAPI_GPU_GetThermalSettings。参考代码如下: int main() {

2015-11-22 21:13:00 2692

原创 Stereoscopic Player播放器的控制

Stereoscopic Player播放器的官网提供了VBS的DEMO程序控制播放器,这样就可以打开,停止播放器。这样对于第三的程序控制播放器很方便。但是要获取播放器的状态就不好搞了。这样就不能使用VBS控制了。由于VB脚本是通过调用CreateObject函数来创建COM对象来操作播放器的,这样就可以直接创建COM对象,之后通过IDispatch接口的 Invoke函数来控制播放器。Invoke

2015-11-03 15:17:05 2330

原创 通过注册表设置SQLServer的远程连接

一般可以通过SQL Server的外围应用配置器设置数据库的远程连接方式:本地连接还是允许远程连接。这种方式必须要打开SQL Server的外围应用配置器程序,如果要在我们自己的软件里面设置远程连接的话,那就要通过设置注册表。注册表的目录为[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServe

2015-11-01 11:14:21 1178

原创 两种方法实现stm32的8个串口通信

100引脚的stm32f103vet6只有5个内置的串口控制器,那么如何实现8个串口通信呢?方法1:用普通的io模拟串口通信。这里除了IO端口外,还需要一个定时器来控制发送和接收的波特率。定时器的定时单位一般为1位数据的发送时间。假设波特率为vRate,那么定时时间为1/vRate;但是如果波特率比较大的话(250000bps),定时时间一般要<(1/VRate),以为一些其他额外指令的执行时间,不

2015-09-27 20:57:08 7278

原创 中位值平均滤波法

最近用stm32单片机检测外部8路电压。STM32内部包含12位的ADC,一次检测一路AD最快只要1us。为了防止偶尔外部对AD采样的干扰,单片机对采集数据进行中值平均滤波。中值平均滤波就是在采集的N个数据中去掉一个最大值和一个最小值,然后对剩下的数据求平均值。所以这个算法**不需要对数据排序**,关键是计算最大值,最小值,和。算法实现如下:unsigned short AD_Filter(un

2015-05-31 00:29:36 14232 3

原创 Sqlite 判断表是否存在

最近的项目有在VC环境下使用Sqlite,常常在创建表之前需要知道这个表是否存在。一开始用CREATE TABLE IF NOT EXISTS 这条SQL语句,但是会报出错误提示“SQLITE_MISUSE”;这种方法行不通,只好自己写个函数判断表是否存在。思路是写一个查询语句,接着判断列的个数,如果列的数目大于0,表示这个表已经创建,等于0,表示不存在这个表。代码如下: BOOL Is...

2015-05-07 15:57:14 672

空空如也

空空如也

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

TA关注的人

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