2015-04-01T17:59:42.643372    |      STM32    |     AilsonJack    |     暂无评论    |     2007 views
步进电机是一种将电脉冲信号转化为角位移的执行机构。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用进电机来控制变的非常的简单。步进电机的特点:步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为角)转动。转动的速度和脉冲的频率成正比。如果想改变步进电机的转动方向,只需要改变给定步进电机的脉冲顺序即可。上面是关于步进电机的一些基础知识,今天我要给大家讲讲如何利用STM32来驱动步进电机28BYJ。虽然网上有许多的关于28BYJ的驱动程序,不过大多是用51实现的,我现在正好要用到28BYJ,而且驱动也写好了,因此在这里就分享出来用STM32驱动28BYJ的完整程序,方便大家学习使用。在开始讲解之前,先说明一下,我使用的是STM32的库函数,开发工具是Keil,大家如果还不清楚如何在Keil下搭建STM32的库函数工程,那么可以参考我的博文:Keil下建立STM32库函数工程。  这里是我的驱动28BYJ步进电机的完整的Keil工程,有需要的可以下载看看。文件:点此下载  密码:i2gg。这里对于28BYJ的一些细节的东西,我就不讲太多,有想了解更详细信息的,可以参看28BYJ的手册。我在这儿只说一些大家关心的问题。我驱动28BYJ采用的是双相八拍(A-AB-B-BC-C-CD-D-DA),一个循环使转子转动5.625/8度,那么要想使转子转过一圈,就要让这个循环512次。由于STM32的IO口输出信号不足以驱动28BYJ,因此我使用了ULN2003对IO口信号进行放大,然后再连接到步进电机的相应接口上。这里是我使用的引脚定义:IN1:PB3 IN2:PB2 IN3:PB1 IN4:PB0,下面是连接的电路图:下图是四相八拍逆时针方向的一个相序图:我在程序中定义的正反转脉冲数组:u8 cw[8]={0X09,0X01,0X03,0X02,0X06,0X04,0X0C,0X08};//双相八拍正转(顺时针)u8 ccw[8]={0X08,0X0C,0X04,0X06,0X02,0X03,0X01,0X09};//双相八拍反转(逆时针)这个数组最终体现在PB口的低4位,从上述数组中挑一个值讲讲,其余的类似。ccw[0]=0X08,即二进制的0000 1000,也即PB3 PB2 PB1 PB0 – > 1000,对应的是PB3:橙 PB2:黄 PB1:粉 PB0:蓝,对应结果和上图的第二列(序号1)一致,其余的列依此类推。要想步进电机转动的方向反向,那么就让其脉冲反向即可,这也就是ccw与cw的关系啦。理解了这个之后,剩下的大家看看我的程序就明白了。我的程序如下:motor.h:motor.c:main.c:将程序下载到板子上,接好步进电机与STM32的引脚连接,用两个按键或者直接将按键输入口接一下地,是不是看到步进电机动起来了。注:我这个驱动在我自己做的STM32小系统上能跑起来,但是在我买的开发板上貌似有点问题,而且总感觉STM32驱动步进电机的力不大,应该是IO口输出能力的问题,但是想想自己加了个驱动板,按理说,应该不会出现驱动力不足这个现象,有知道怎么回事的朋友可以交流一下。只想说,知识的世界真的很大,怎么学都有学的。
ARMSTM32嵌入式 阅读全文»
 2015-03-22T17:07:49.298401    |      STM32    |     AilsonJack    |     暂无评论    |     1351 views
相信大家使用STM32或者其他芯片的时候,绝大部分时间都是在写裸机程序,不过偶尔会写一些带系统的程序,那么问题来了,这个系统怎么选,又怎么移植呢?今天我给大家讲讲如何移植μCOS-II这个嵌入式系统到STM32下工作,为什么选μCOS-II,因为目前对它比较熟的嘛,而且也适合使用在像STM32这种处理器上。下面就是移植的过程,有图哟。关于移植过程中的一些基础知识,我想大家应该知道上网搜索学习吧。  在移植之前,先下载要用到的μCOS-II的官方移植版本。地址:点此下载 密码:euom。1、首先在Keil下建立STM32库函数工程如果还不会在Keil下建立STM32库函数工程,或者记不清了,可以参考我的博文:Keil下建立STM32库函数工程,这里有详细的说明,也是带图教程哦。2、在工程下,建立存放系统文件的目录在搭建好的工程下,建立一个UCOS-II的文件夹,然后在该文件夹下,再新建两个文件夹:SRC、PORT,效果如下:3、拷贝源码的相关文件到相应的目录注:UCOS-II\SRC下的代码是 ucosii 中无需修改部分,UCOS-II\PORT下的代码是移植时需要修改的。(1)、把Micrium\Software\uCOS-II\Source下的文件拷贝至Test\UCOS-II\SRC:(2)、把Micrium\Software\uCOS-II\Ports\arm-cortex-m3\Generic\IAR下的文件拷贝至 Test\UCOS-II\PORT,把Micrium\Software\EvalBoards\ST\STM32F103ZE-SK\IAR\OS-Probe-LCD下的os_cfg.h文件拷贝到Test\UCOS-II\PORT文件夹下:4、配置Keil工程(1)、在Keil下建立如下组,然后添加对应文件到组下:(2)、添加相应的头文件路径:5、修改移植时需要修改的文件(1)、os_cpu.h:注释掉os_cpu.h文件中下面的这三个函数:void OS_CPU_SysTickHandler(void); void OS_CPU_SysTickInit(void); INT32U OS_CPU_SysTickClkFreq(void);(2)、os_cpu_c.c:把下面这些宏定义也注释掉,把 OS_CPU_SysTickHandler(), OS_CPU_SysTickInit()也注释掉:(3)、os_cpu_a.asm:PUBLIC  OS_CPU_SR_Save  ; Functions declared in this filePUBLIC  OS_CPU_SR_RestorePUBLIC  OSStartHighRdyPUBLIC  OSCtxSwPUBLIC  OSIntCtxSwPUBLIC  OS_CPU_PendSVHandler将以上的PUBLIC改为EXPORT,如下图:将RSEG CODE:CODE:NOROOT(2)修改为:;RSEG CODE:CODE:NOROOT(2)AREA |.text|, CODE, READONLY, ALIGN=2THUMBREQUIRE8PRESERVE8如下图:(4)、os_dbg.c:将该文件中的#define  OS_COMPILER_OPT  __root修改为:#define  OS_COMPILER_OPT  //__root,修改结果如下:(5)、startup_stm32f10x_hd.s:搜索startup_stm32f10x_hd.s中的PendSV_Handler,然后用OS_CPU_PendSVHandler把所有出现PendSV_Handler的地方替换掉,总共三个地方:(6)、os_cfg.h:对其做如下修改:#define OS_APP_HOOKS_EN 0#define OS_DEBUG_EN 0#define OS_EVENT_MULTI_EN 0#define OS_SCHED_LOCK_EN 0#define OS_TICK_STEP_EN 0#define OS_TASK_CHANGE_PRIO_EN 0#define OS_TASK_QUERY_EN 0#define OS_TASK_STAT_EN 0#define OS_TASK_STAT_STK_CHK_EN 0#define OS_TASK_SUSPEND_EN 0#define OS_FLAG_EN 0#define OS_MBOX_EN 0#define OS_TIME_DLY_RESUME_EN 0#define OS_TIME_GET_SET_EN 0#define OS_TIME_TICK_HOOK_EN 0#define OS_TMR_EN  0所做的修改主要是把一些功能给去掉,减少内核大小,也利于调试。等移植完成后,如果需要该功能,再做开启。(7)、stm32f10x_it.c:在该文件引用头文件:#include “ucos_ii.h”在void SysTick_Handler(void) 函数中添加如下代码:OSIntEnter();OSTimeTick();OSIntExit();(8)、ucos_ii.h:注释掉#include <app_cfg.h>:(9)、main.c:在main.c文件中引用ucos_ii.h文件:#include “ucos_ii.h”main.c文件中的代码如下:上述代码创建了两个任务,实现了PC6与PC7的IO口电平切换。仿真结果如下图:至此,在STM32上移植μCOS-II的工作就完成了,接下来,你就可以在这个工程下建立自己的应用程序。
ARMSTM32嵌入式操作系统μCOS 阅读全文»
 2015-03-09T23:22:07.514205    |      STM32    |     AilsonJack    |     暂无评论    |     2807 views
今天给大家讲讲如何在Keil下建立STM32的库函数工程,还不会的博友们,可以来看看,带图教程哦。。。好了,废话不多说,直接进入今天的主题吧。注:在看这个教程之前,先到教程底部把文件下载了,待会要用的哟。1、在桌面上创建Test文件夹,并且在Test文件夹下面创建如下图所示文件注: CORE用来存放核心文件和启动文件;   OBJ是用来存放编译过程文件以及hex文件;   LIB用来存放 ST 官方提供的库函数源码文件;   USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括 system_stm32f10x.c等等。2、打开Keil创建工程(1)、点击 Keil的菜单:Project–>New Uvision Project,然后将目录定位到刚才建立的文件夹Test之下的USR目录,工程命名为Test,点击保存:(2)、接下来会出现一个选择Device的界面,就是选择我们的芯片型号,这里我们定位到STMicroelectronics下面的STM32F103ZE(这是我使用的STM32芯片的型号,如果你是其他芯片,请选择对应的型号即可),点击OK按钮:(3)、弹出如下图对话框,我们选择”否”:3、将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面上面已经创建好了一个工程,接下来就需要将将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。(1)、打开官方固件库包,定位到我们准备好的固件库包的目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,将目录下面的src,inc文件夹拷贝到我们刚才建立的LIB文件夹下面。注:src存放的是固件库的.c文件,inc存放的是对应的.h文件。(2)、打开官方固件库包,定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,将文件core_cm3.c和文件core_cm3.h复制到CORE下面去。然后定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面,将里面startup_stm32f10x_hd.s文件复制到CORE下面。现在我们的CORE文件夹下面的文件如下:注:对于103系列,主要是用其中3个启动文件(请根据你的芯片容量选择):startup_stm32f10x_ld.s:适用于小容量产品(flash≤32K)startup_stm32f10x_md.s:适用于中等容量产品(64K≤flash≤128K)startup_stm32f10x_hd.s:适用于大容量产品(flash≥256K)(3)、打开官方固件库包,定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面,将里面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的USER目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下面的 4 个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER目录下面至此我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。4、工程相关配置(1)、右击Source Group 1,点击Remove Group 'Source Group 1’ and its Files,弹出的对话框选择”是”,如下图:右击Target,点击Add Group,设置其名为USR,如下图:按照上述步骤,添加LIB,CORE,如下图:(2)、下面我们往Group里面添加我们需要的文件右击USR,点击Add Existing Files to Group‘USR'...,在USR目录下,添加所有的.c文件:按照上述操作,将CORE目录下的.c文件与.s文件添加到CORE组中;将LIB目录下的src文件中你用得到的.c文件添加到LIB组中,这里我都添加进去:添加完成后,各个组中的文件如下图:(3)、点击Keil中的图标,然后点击“Output”选项下面的“Select folder for objects...”,然后选择目录为我们上面新建的OBJ目录,并且勾选Create HEX File;接着点击“Listing”选项下面的“Select folder for Listings...”,然后也选择我们上面新建的OBJ目录:(4)、点击Keil中的图标,然后点击c/c++选项.然后点击Include Paths右边的按钮。弹出一个添加path的对话框,然后我们将上面的3个目录添加进去,将”STM32F10X_HD,USE_STDPERIPH_DRIVER”(逗号是英文状态下的逗号)输入到Define 输入框里面,具体如下图:注:你用的是中容量那么STM32F10X_HD修改为STM32F10X_MD,小容量修改为STM32F10X_LD然后点击OK退出。5、编译程序点击下图所示的编译图标,编译程序:上述程序实现了PA0高低电平的切换,其仿真结果如下图:   好了至此,基于Keil的STM32的库函数工程建立完了,大家如果还有什么不明白的,可以留言提问。   这里是我建立的工程及官方库函数,请下载:点此下载
各种芯片ARMSTM32库函数工程建立 阅读全文»
 2015-03-05T11:12:21.740057    |      STM32    |     AilsonJack    |     暂无评论    |     1283 views
注:本文参考了网上相关资料,且通过了本人的尝试。前天刚刚把原子哥的汉字显示实验看完,并且成功的将字库及FATFS的cc936.c文件装到SD卡,昨天又开始研究将UCGUI的汉字库装到SD卡里,为此上网查了许多资料。最开始我用的是论坛里坛友—洋洋kan世界的方法,但是显示出来的汉子不太好,汉子中间有一横线,(可能是自己移植的不太好吧,还有跟字库有很大的关系),因此自己又上网查找相关的解决办法,终于找到了办法,思路和坛友—洋洋kan世界的差不多。这次添加外置字库,最大的问题就是字库的获取上,我的大部分时间也是浪费在这上面的。辛苦了一天的成果,在这里拿出来和大家分享,希望对那些打算将UCGUI的汉字库放在SD卡的朋友们有帮助吧。步骤如下(下面附件有修改好的相关代码文件):1.在GUIType.h文件里添加如下内容:注意:该内容不能放在太靠前的位置,这里我把它放在“/* PROPAA: Proportional, antialiased fonts, 2bpp, SJIS encoding */”的前面。2.将GUI_UC_EncodeNone.c文件里的内容改为如下内容:3.新建文件GUICharPEx.c文件,并且将它加入工程,其内容如下:4.接下来就是新建三个自己的与字体相关的文件分别是:GUI_Font12.c,GUI_Font14.c,GUI_Font16.c,并且将它们加入工程。GUI_Font12.c内容如下:注意:下述代码的字库在SD卡的路径(SD卡卷标为0,且” SYSTEM”文件夹为SD卡根目录下的文件夹 )。至于GUI_Font14.c,GUI_Font16.c,的内容,可查看下面的附件。至此,UCGUI的外置字库添加完成.然后可在main()函数所在的文件里面输入:再在main()函数里面输入如下代码(只是部分代码,相关初始化什么的就自己去弄吧):移植不是随便编的,有图有真相哦 ,其效果图如下:好了,至此,应该就完成了UCGUI添加外置字库到SD卡的全过程。  下面是一些附件: 点此下载注:SYSTEM.rar是SD卡根目录下的字库。直接将其解压,然后将解压得到的文件夹拷贝到SD卡的根目录下即可。
各种芯片ARMSTM32μCGUI字库 阅读全文»
  • 1

  本站信息

目前本站共被浏览 155780 次
目前本站已经运行 3339 天
目前本站共有 165 篇文章
目前本站共有 6 条评论信息
目前本站共有 104 个标签
目前本站共有 0 条留言信息
网站创建时间: 2015年03月01日
最近更新时间: 2023年11月26日
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号