当前位置:首页 > 嵌入式课程设计
1 任务提出与方案论证
步进电机控制系统的整个设计中最重要的部分是利用PWM细分实现步进电机调速的处理,虽然PWM调速很早就开始研究应用,但如何用PWM细分调速的快速性和准确性至今仍是生产和科研的课题。随着微电子技术的发展与普及,更多高性能的单片机应用使得PWM细分实现步进电机PWM调速的快速性和准确性都有了极大的提高。 1.1 任务提出
总体方案根据课题要求,本设计采用STM32cortex-M3处理器,由SPGT62C19B电机控制模块作为直流电机的驱动芯片,由ADC输入电位器产生调速命令,用TFT彩色LCD作为显示模块。 1.2 方案论证
步进电机控制系统硬件方案
本系统主要由一块STM32平台、SPGT62C19B型步进电机驱动模块构成,以STM32为核心,包括电机驱动、电机、A/D转换、LCD显示等模块。系统的结构框图如图 2.1所示。
STM32作为主控芯片,通过I/O端口来控制SPGT62C19B型步进电机驱动芯片,从而实现对步进电机的控制。通过ADC输入电位器产生调速命令反馈给STM32,STM32调节SPGT62C19B型步进电机驱动模块的状态,从而使电机改变转速和方向。同时,电机转速可由彩色液晶LCD显示出来,用ADC输入电位器来对步进电机的转动方向和转速等进行设定。 步进电机控制系统软件方案
硬件功能的实现离不开软件的设计与完成。软件设计是步进电机控制系统设计中最重要、最关键的部分,也是本次毕业设计的难点之处。由于本系统使用STM32平台,运用Keil for ARM开发环境,在Keil u Vision软件平台进行开发。本课题软件设计的思想主要是自顶向下,模块化设计,逐一设计各个子模块,分别进行调试,最后的连调整个程序,判断是否达到预期的要求,做出结论。各个部分函数都可相互调用又相对独立可调,保证调试的便利与程序的可读性。
2 总体设计
第一部分具体介绍了步进电机控制系统的硬件设计,包括SPGT62C19B电机控制模块电路的设计;第二部分阐述了步进电机控制系统的软件设计; 2.1系统的硬件设计
本系统采用STM32作为主控制器,采用ADC输入电位器作为输入部分,步进电机及其驱动电路采用SPGT62C19B型步进电机驱动模块。下面分别对STM32以及相关模块的特性进行具体介绍。 (1)步进电机模块
本设计选用专用的电机驱动芯片SPGT62C19B。SPGT62C19B电机控制模组是为学生以及单片机爱好者学习步进电机和直流电机控制而设计的学习套件。模组采用凌阳SPGT62C19B电机驱动芯片,配置两相步进电机和直流电机各一台,并提供4位LED数码管用来显示电机转速等信息。模组配备的步进电机为35BYJ26型永磁步进电机,工作方式为双极性两相四拍。步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机接收到一个脉冲信号,它就按设定的方向转动一个固定的角度(称为“步距角”)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率实现步进电机的调速。 (2)LCD显示模块
显示电路是本设计硬件的主要构成部分,STM32外接TFT模块,MzT24彩色TFT模块是一个2.8英寸的TFT模块,内置TFT控制器,对外连接直接通过8位的8080总线进行指令和数据的传输。MzT24有像素点数为240×320,色彩深度为16位色,也就是每一个像素点需要用16位的数据来表示其显示的内容。MzT24模块的显示操作非常简便,需要改变某一个像素点的颜色时,只需要对该点所对应的2个字节的显存进行操作即可。这部分电路连接时主要是把数据准确稳定的显示出来,因此连接电路时需注意端口对应的准确连接,否则严重影响数据显示的稳定,甚至出现显示不出来数据。 2.2控制系统软件设计 控制系统软件设计步骤:
对于一个完整的嵌入式应用系统的开发,硬件的设计与调试工作仅占整个工
作量的一半,应用系统的程序设计也是嵌入式系统设计一个非常重要的方面,程序的质量直接影响整个系统功能的实现,好的程序设计可以克服系统硬件设计的不足,提高应用系统的性能,反之,会使整个应用系统无法正常工作。
不同于基于PC平台的程序开发,嵌入式系统的程序设计具有其自身的特点,在编写嵌入式系统应用程序时,可采取如下几个步骤:
(1) 明确所要解决的问题:根据问题的要求,将软件分成若干个相对独立的部分,并合理设计软件的总体结构
(2) 合理配置系统的资源:与基于8位或16位微控制器的系统相比较,基于32位微控制器的系统资源要丰富得多,但合理的资源配置可最大的限度发挥系统的硬件潜能,提高系统的性能。对于一个特定的系统来说,其系统资源,如Flash、EEPROM、SDRAM、中断控制等,都是有限的,应合理配置系统资源。
(3) 程序的设计、调试与优化:根据软件的总体结构编写程序,同时采用各种调试手段,找出程序的各种语法和逻辑错误,最后应使各功能程序模块化,缩短代码长度以节省存储空间并减少程序的执行时间。
此外,由于嵌入式系统一般都应用在环境比较恶劣的场合,易受各种干扰,从而影响到系统的可靠性,因此,应用程序的抗干扰技术也是必须考虑的,这也是嵌入式系统应用程序不同于其他应用程序的一个重要特点。 Keil for ARM软件开发环境
本次设计的软件部分采用模块化的设计思想,将各个功能都编成了相应的子程序。程序运行时,通过主程序的调用及相应模块之间的嵌套调用,实现系统的整体功能。
本设计所需的STM32的外设包括PA口、PB口、PC口和定时器端口,所以也要对外设的时钟进行设置。由于PA口、PB口、PC口在APB1系统总线外设上,定时器TIM2和TIM3在APB2系统总线外设上,所以要对APB1和APB2总线的时钟频率进行设置。经过APB1与APB2的分频,将SYSCLK转换成可以进行外设及TIM可以接收的系统时钟。在时钟初始化子程序中先对系统时钟的模式进行选择,即将系统时钟设置为HSE模式(外部时钟模式),然后设置AHB时钟等于系统时钟,且设置了低速或高速AHB,最后使能的时钟,时钟初始化子程序的流程。
3 程序设计及仿真
3.1设计主要程序部分
(主函数)
#include \#include \#include \#include \#include \#include \#include\#include \//?D????ê?
#include \?????ê? extern const u8 gImage_jiemian[]; float t1; u16
t,t11,t12,t13,t14,result;
unsigned char beatcode2[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
unsigned char beatcode1[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};
int main(void) { unsigned char temp=0,angle=0,index=0,flag1;
unsigned long beat=0; int key=2; Drive_Init();
uart_init(9600); //′??ú3?ê??ˉ?a9600
delay_init(); KEY_Init();
LCD_Init(); LED_Init();
while(1) {
key=KEY_Scan(0); if(key==1) {
temp++; if(temp>2) temp=0;
}
if(key==2) {
angle+=15; if(angle>=360) angle=0; flag1=1; }
if(temp==2) {
for(index=0;index<8;index++)
{GPIOA->ODR=beatcode2[index];
delay_ms(2);} }
else if(temp==1) {
for(index=0;index<8;index++)
{GPIOA->ODR=beatcode1[index];
delay_ms(2);} }
else if(temp==0) GPIOA->ODR=0;
while(flag1) {
beat=(angle*4076)/360; while(beat--) {
GPIOA->ODR=beatcode1[index];
index++;
index=index&0x07;
delay_ms(2); }
flag1=0; }
LED0=!LED0;
}
delay_ms(10); }
共分享92篇相关文档