基于MSP430实现的步进电机控制

合集下载

用MSP430F149单片机实现步进电机通用控制器

用MSP430F149单片机实现步进电机通用控制器
实现方法。 j。 蔓 I ● 。
霪 娶毋 r 蕈
- 0 0
0妻 嚣 j
关键词 :M S
单片机 ;步进 电机 ; 通用控制器
0 il l ≮
一I 嚣露 零 l。 l l 譬≯ l
系 统 设 计
系统 结构 本控 制 器 主要 实 现 了 多台 步进 电机 在 多段 曲线 上 的



技 术


一 一
f 放大的起动过程
运行曲线

用 机实现 单片 步进电 加/速控制, 际上 机的 减 实 就是
控制 发脉 冲的频 率 , 升速 时 , 使脉 冲频 率 增高 , 速时 相 减
反。 如果 使 用定 时 中断 来 控制 电机 的速 度 , 加减 速控 制 就
图4连续 模式的定 时间隔输 出
积小 、可 靠 性 高 。
一般不小于 5 s、脉冲序列的均匀度及高低电平方式 。 g)
7r甘 . 击 ] th : ‘ 吉 S , r 士 r , 企 I L 壬 7 7 陂 、 击 士
向一升 速 三 个过 程 。
步进 电机起动及加 / 减速控制方案




t l e .
r -
算是在定时中断外实现的, 并不 占用中断时间 , 保证电机

前D 硝 勺 I 最  ̄ c t; -P  ̄, .

后 /
\ D勺 -硝i 下- ̄  ̄t I第 c. P,
此时D l 向 II 换
的高速运行。
②证制度精性要一速准达 保控速的确;从个度确到
方 向 DR I
步 进 电 动 机 的 最 高 起 动 频 率 ( 跳 频 率 ) 般 为 突 一

MSP430单片机_步进电机与直流电机控制设计

MSP430单片机_步进电机与直流电机控制设计

//选择使用采样定时器, 转换模式选择-序列通道多次转换模式
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3
ADC12MCTL3 = ADC12INCH_7 ;
//选择模拟输入通道
ADC12IE = BIT7;
// 中断使能 ADC12IFG.5
ADC12CTL0 |= ADC12ENC;
步进电机
2电路实现--- 连接示意图
直流电机
2电路实现---IO设置
通过DRV8833控制直流电机不步进电机
5V电压通过1N5819整流为DRV8833提供工作电压
MSP430F6638端口P1.1,P1.4,P1.7,P3.1作为
DRV8833的xIN输入端口;
VDD_5V
D7 1N5819 DC_5V
步进电机运行方向IO给电顺序
3代码实现--- 功能列表
步进电机
控制换相顺序: 通电换相这一个过程称为脉冲分 配;
控制步进电动机的转向:正转,反转;
控制步进电动机的速度:给步进电机一个脉冲, 就转一步;再发一个脉冲,会再转一步;两个脉冲 的间隔时间越短,步进电动机就转得越快;调整发 出的脉冲频率,就可以对步进电机进行调速; 脉 冲的频率决定了电机的转速。
1实现原理---步进电机
三相式步进电机内部结构
1实现原理---步进电机
概念 步进电机旋转的根本原因 错齿 术语 齿距角:齿之间的距离 步距角: 转子走一步所转过的角度 失步:转子的转速慢于换相速度则会引起失步 振荡:转子在电磁力的作用下在平衡点左右振 荡 拍:对绕组通电一次的操作称为一拍 对齿 错齿
}
4代码分析--- 直流电机
直流电机运行

基于MSP430的步进电机实验-IO口控制

基于MSP430的步进电机实验-IO口控制
二、实验内容:
1、实现步进电机开启、停止;
2、
3、实现步进电机正转、反转;;
4、实现步进电机调速。
三、实验原理:
1、步进电机控制原理:
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
Speed_Update();
delay(m);
P3OUT=BIT2+BIT3;
Speed_Update();
delay(m);
a=P1IN&0X10;//更新转向控制值
b=P1IN&0X20;//更新启动控制值
}
}
else if((a!=0x10)&&(b==0X20))//反转时序
{
while((a!=0x10)&&(b==0X20))
(1)控制换相顺序即各个控制线通电顺序,这一过程称为脉冲分配。给步进电机一列脉冲并循环下去,那么步进电机会不停地转动。
(2)控制步进电机的转向,如果给定工作方式正序换相通电,步进电机正转;如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度,如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。
{
while(tim--);
}
void Speed_Update(void)//延时选择子函数

基于MSP430单片机的步进电机细分驱动器

基于MSP430单片机的步进电机细分驱动器
种类 , 混合 式步 进 电机 兼 有永 磁式 和 反应 式 步进 电 机的优 点 , 有结构 简单 、 具 运行 平稳 、 噪音低 、 度高 精 等优点 , 到广 泛 应 用 。在 混 合式 步 进 电机 中两 相 得 混合式 步进 电机 因为 内部结构 及控制 电路结 构简单 应 用最 为广泛 。对 于混合 式步 进 电机在 传统 的整步
及半步驱动方式下工作时存在许多缺点 , 主要表现 为工作噪声大 、 振动大、 控制精度低、 故障率高等, 不 能满足许多控制领域的技术要求, 了解决这些 问 为 题, 提高步进 电机 的运行平 稳性、 可靠性及控制精 度, 这里 以 MB 4 0 片机为微控制器 , P3 单 采用细分
驱 动 的原 理 , 设计 并实 现 了步进 电机 的细分驱 动器 , 为解 决相关 的 问题提 出 了可行 的途径 。
绕组换相时 , 电机绕组中的电流是不受控制的, 在八 拍驱动模式下绕组的电流从 0变化到最大值, 或从 最大值变化到 0 而在四拍驱动模式下绕组中的电 , 流是在正向电流最大值与反向电流最大值之间交替 变化 , 在步进 电机每个驱动脉冲到来时由于绕组电
流 的剧 烈变 化就 造 成 了 电机驱 动 力矩 的 大 幅波动 , 从而使 电机 在驱 动过 程 中产 生振 动 , 且 电机 每一 并 步 的运 行过 程是 处 于一 种 自由运行 状 态 , 无法 控 制
韩党群 , 姚伟鹏
( 西安航空技术高等专科学校 电气工程系 , 陕西 西安 70 7 ) 10 7

要: 阐述 Βιβλιοθήκη 两相混合式步进 电机 的细分控制原理 , 出 了以 MS 4 0单 片机 为微 控制器 提 P3 通过 D C 6 2产 生相 A 71

基于MSP430单片机的步进电机控制系统设计

基于MSP430单片机的步进电机控制系统设计

基于MSP430单片机的步进电机控制系统设计步进电机是一种电动机,能够将电脉冲信号转换为机械转动。

它具有结构简单、运行平稳、响应速度快、定位精度高等特点,广泛应用于各种机械设备中。

本文主要介绍基于MSP430单片机的步进电机控制系统的设计。

1.系统硬件设计步进电机控制系统的硬件设计需要包括MSP430单片机、步进电机、电源以及其他辅助电路。

1.1MSP430单片机MSP430系列是由德州仪器公司推出的一款低功耗、高性能的16位单片机。

它具有低功耗、高计算性能、丰富的接口资源等特点,非常适合用于步进电机控制系统。

1.2步进电机步进电机是由转子、定子、绕组和传感器组成,可以完成定距离的转动。

根据具体需求,可以选择不同类型的步进电机,如单相、双相、两相、三相等。

1.3电源步进电机控制系统需要提供稳定的电源供电。

可以采用直流电源或者交流电源,具体电压和电流根据步进电机的额定参数确定。

1.4辅助电路辅助电路包括电机驱动电路、电流控制电路、保护电路等。

电机驱动电路可以选择使用驱动芯片,如L293D芯片,来驱动步进电机。

电流控制电路用于控制步进电机的电流大小,保护电路用于保护步进电机不受过电流、过压等问题的影响。

2.系统软件设计步进电机控制系统的软件设计需要编写相应的程序代码,并通过MSP430单片机来控制步进电机的运动。

2.1硬件初始化在软件设计开始之前,需要对MSP430单片机的相关硬件进行初始化设置。

包括设置时钟源、引脚功能、定时器等。

根据具体的单片机型号,可以参考官方提供的资源来进行初始化设置。

2.2电机控制算法步进电机的控制主要通过控制电流脉冲来实现。

根据步进电机的型号和控制要求,可以选择不同的控制算法,如单相步进、双相步进或者微步控制等。

通过控制电流脉冲的频率、信号大小来控制步进电机的转动方向以及速度。

2.3交互界面设计可以通过开发板上的按键、液晶显示屏、串口等方式,设计一个交互界面,用于用户输入控制命令、设置参数以及显示系统状态等。

基于MSP430单片机的语音无线控制步进电机系统的设计

基于MSP430单片机的语音无线控制步进电机系统的设计

基于MSP430单片机的语音无线控制步进电机系统的设计作者:潘宇黄勇朱昌洪来源:《科学与财富》2016年第25期摘要:步进电机在不少的场合都具有实际的应用价值,针对方便用户控制体验的需求,设计基于微处理器MSP430G2553单片机语音控制的步进电机系统。

系统采用LD3320作为语音识别芯片,MSP430G2553作为微处理,通过2.4G(NRF24L01)无线收发模块实现步进电机的控制,当用户通过语音识别电路发送电机反转、正转等相关的指令后,系统在程序控制下识别出指令并通过无线发送模块发送到接收模块处理,处理完毕后经过MSP430G2553微处理控制ULN2203芯片构成的驱动电路驱动步进电机进行相应的动作,系统经过调试稳定,用户体验良好,适用于玩具小车等需要控制步进电机的场合。

本文章介绍了语音无线控制步进电机系统的方案设计、电路设计、程序设计、系统调试和验证。

关键词:LD3320语音芯片;无线控制;MSP430G2553单片机1 系统方案设计系统方案如图1所示,由单片机2个最小系统、语音识别模块、无线发送及接收模块、显示模块、按键组成。

语音识别电路主要芯片采用的是LD3320语音芯片,采集到用户声音指令后,经过去除噪音、放大语音信号后,经过MSP430G2553微处理器处理,控制NRF24L01无线发送及接收一体化芯片发送信号,当无线接收模块接收到信号后,传送给微处理器控制步进电机做出相应动作。

2 硬件设计2.1 单片机本系统设计的微处理器采用的是美国德州仪器(TI)公司生产的低功耗MSP430G系列的2553单片机作为核心控制芯片,该芯片具有16位的RISC CPU,DCO可在不到1us时间内,从低功耗模式到运行模式的唤醒,以CCS v5.0作为软件开发平台,通过Cadence Allegro 16.5 软件设计原理图、PCB图[1]。

2.2 语音识别电路语音识别电路主要采用LD3320芯片,LD3320支持非特定语音辨别,每次识别的过程是把用户说出的语音内容,通过频谱转换为语音特征,再将这个转换后的语音特征和“关键词语列表” 中的条目一一进行匹配,最优匹配的一条即作为识别结果[2],工作原理框图如图2所示。

基于MSP430步进电机控制器的设计51单片机

基于MSP430步进电机控制器的设计51单片机

基于MSP430步进电机控制器的设计附录附录:源程序清单主控程序:#include<regx51.h>#define uchar unsigned char#define uint unsigned intsbit up=P2^1; //提速sbit down=P2^2; //减速sbit rotation=P2^0; //转向sbit run=P2^3;int speed=10;static ROT=0; //正转(反转)static uint step=0; //起始步//void delay (int i){int k=100;while(i--)while(k--);}Z() //步进方向{switch(step){case 0:P1=0x01;break; case 1:P1=0x04;break; }}F() //步进方向{switch(step){case 0:P1=0x02;break; case 1:P1=0x08;break; }}Fangxiang(){if(!rotation){if(!rotation){TR0=0;ROT=!ROT;TR0=1;do{}while(!rotation);P0=0;}}}void Speed1() //速度{if(!up){delay(2);speed=speed+10;}if(!down){delay(2);speed=speed-10;}}work() //启停{if(!run){delay(100);if(!run)TR0=!TR0;do{}while(!run);}}main(){TCON=0;IE=0x82;TMOD=0x01;while(1){W ork();Speed1();Fangxiang();if(ROT==0)Z();//正转else F();//反转}}void timer0() interrupt 1 {TH0=(65535-speed)/255; TL0=(65535-speed)%255;step=++step;delay(1);if(step>=2)step=0;}测速程序:#include<regx51.h>#define uchar unsigned charuchar j,k,i,a,b,sin,A1,A2,A3,aecond;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay (uchar i){for(j=i;j>0;j--)for(k=125;k>0;k--);}void display(){P0_0=0;P1=table[A1];delay(5);p0_0=1;P0_1=0;P1=table[A2];delay(5);P0_1=1;P0_2=0;P1=table[A3];delay(5);P0_2=1;}void main(){TCON=0x11;IE=0x83;TMOD=0x01;while(1){P2=R;A1=R/100;A2=R/10%10;A3=R%10;for(a=2000;a>0;a--){for(b=10;b>0;b--) display();}}}void timer0() interrupt 1 {static uchar sin=0;TH0=(65535-50000)/255; TL0=(65535-50000)%255; sin++;if(sin>=20){sin=0;R=second;second=0;}}void cesu() interrupt 0 {second++;}。

基于MSP430F449单片机的24BYJ48步进电机控制

基于MSP430F449单片机的24BYJ48步进电机控制

引言步进电机可快速启动、停止和反转,加上步进电机只有周期性的误差而无累积误差,其运行不受负载变化的影响等特点,使得在速度、位置等控制领域用步进电机来控制变得简单,因而步进电机使用非常广泛。

由于利用单片机实现的步进电机具有控制成本低、使用灵活等特点,所以越来越多地引起人们的重视。

本文介绍基于MSP430系列单片机实现的24BYJ48步进电机控制。

1步进电机1.1工作原理步进电机是一种将电脉冲转化为角位移的执行机构。

角位移与脉冲数成正比,转速与脉冲频率成正比,因此可通过改变脉冲频率实现步进电机调速。

步进电机有许多种形状和尺寸,但不论形状和尺寸如何,按照电磁转矩的产生原理可分为磁阻式(反应式BF )步进电机、永磁式步进电机BY 和感应子式(混合式)BYG 步进电机。

根据励磁绕组的相数分主要有单相、三相、四相和五相等多种[1]。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),步距角的大小反映了步进电机分辨率的大小,它与步进电机的结构和工作方式有关,可以由下式求得:Q S =360°r式中:N 为励磁绕组通电一周的状态改变次数,即为运行拍数,Z r 为步进电机转子齿数。

以三相步进电机为例,假设步进电机转子的齿数为40,以单三拍方式工作,通电顺序为A →B →C →A ,通电一周的状态改变次数为3(即3拍),则步距角为3度。

若以三相六拍方式工作,通电顺序为A →AB →B →BC →C →CA →A ,通电一周的状态改变次数为6,则步距角为1.5度,分辨率提高一倍。

三相三拍运行方式时,当通电顺序为A →B →C →A ,步进电机将不断地按顺时针方向转动,叫正转,那么当通电顺序按A →C →B →A 进行时,则电机反时针旋转,叫反转。

可见控制步进电机正反转只是三相绕组通电顺序不同而已。

同理,三相六拍运行方式时,正转通电顺序为A →AB →B →BC →C →CA →A ,反转通电顺序为A →AC →C →CB →B →BA →A 。

基于MSP430F149单片机实现的步进电机通用控制器

基于MSP430F149单片机实现的步进电机通用控制器

1.前言基于步进电机的控制系统,除了步进电机一般还需要专门的驱动电源,驱动电源仅仅完成功率驱动部分,用户并不能使整个控制系统按预定的、期望的工作状态运行,必须对它的驱动电源予以控制,用户需要再次开发。

鉴于此,设计了基于MSP430F149单片机实现的步进电机通用控制器,可以满足大多数控制场合下的要求。

控制器的主要功能为:①可控制多套步进电机驱动系统;目前可同时控制3套系统。

②工作方式灵活,可按设定的曲线运行,曲线最多达8段;可按外部检测到的控制信号运行;可按模拟调节测试功能运行;2.系统的设计2.1系统的结构本控制器主要实现了多台步进电机在多段曲线上的运行控制。

系统结构如图1所示。

本设计选用了TI公司所生产的MSP系列单片机MSP430F149。

目的是应用其丰富的接口资源和强大的定时器功能,MSP430F149的性能特点如下:①6个八位并行接口;完全可以实现该系统所有信号的输入、输出,无须硬件扩展,其中P1、P2八位并行端口的每根口线都具有中断功能,使键盘的软、硬件设计变的非常简单。

②12位A/D转换器ADC;完成模拟设定功能。

③强大的定时器功能;TIMER-A3、TIMER-B7分别为带有3个和7个捕捉/比较寄存器的16位定时器,可以满足系统速度的设定及曲线定时的要求。

④液晶驱动模块;⑤内置2KB RAM、60KB的FLASH;MSP430F149所提供的丰富资源,外围硬件扩展只需做很少的工作,不仅设计变得非常简单,而且该控制器体积小、可靠性高。

2.3步进电机起动及加/减速控制方案步进电动机的最高起动频率(突跳频率)一般为0.1KHz到3-4KHz,而最高运行频率则可以达到N*102 KHz。

以超过最高起动频率的频率直接起动,将出现"失步"现象,甚至无法起动。

较为理想的起动曲线,应是按指数规律起动。

但实际应用对起动段的处理可采用按直线拟合的方法,即"阶梯升速法"。

MSP430单片机_步进电机与直流电机控制设计

MSP430单片机_步进电机与直流电机控制设计

MSP430单片机_步进电机与直流电机控制设计步进电机和直流电机是常用于控制系统中的电机类型,它们在工业自动化、机器人、医疗设备等领域有着广泛的应用。

本文将重点介绍MSP430单片机控制步进电机和直流电机的设计。

步进电机是一种将电脉冲信号转化为角位移或线性位移的电机,它具有定步进角、驱动简单、精度高等特点。

下面是步进电机控制设计的主要步骤:1.确定电机的参数:步进电机的参数包括相数、相电阻、相感应、步距角等,这些参数决定了控制步进电机的电流大小和步进角度。

2.选择正确的驱动电路:常见的步进电机驱动电路有双极性驱动和四相八线驱动。

双极性驱动适用于电流较大的步进电机,而四相八线驱动适用于电流较小的步进电机。

3.设计控制电路:步进电机的控制电路通常是由一个逻辑电平产生器和一个驱动电路组成。

逻辑电平产生器用于产生脉冲信号,而驱动电路则根据脉冲信号控制步进电机的运行方向和速度。

4.编写控制程序:使用MSP430单片机编写控制程序,通过控制IO口输出脉冲信号,将步进电机驱动起来。

控制程序需要根据步进电机的参数来确定脉冲频率和方向,以实现步进电机的转动。

5.调试和优化:通过调试和优化控制程序,调整脉冲频率和方向,使步进电机能够按照预定的角度或线性位移进行运动。

直流电机是一种常见的电动机,在各种控制系统中被广泛应用。

下面是直流电机控制设计的主要步骤:1.确定电机的参数:直流电机的参数包括额定电压、电流和功率等,这些参数决定了控制直流电机的电流大小和速度。

2.选择正确的驱动电路:常见的直流电机驱动电路有H桥驱动和单向驱动。

H桥驱动适用于正反转控制,而单向驱动只能实现单一方向的运动。

3.设计控制电路:直流电机的控制电路通常由一个PWM信号发生器和一个驱动电路组成。

PWM信号发生器产生调制信号,控制电机的转速和转向,驱动电路则根据PWM信号给电机供电。

4.编写控制程序:使用MSP430单片机编写控制程序,通过控制IO口产生PWM信号,将直流电机驱动起来。

基于MSP430步进电机控制器的设计

基于MSP430步进电机控制器的设计

基于MSP430步进电机控制器的设计摘要随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。

研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。

本设计是采用MSP430单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机;同时,用 4个按键来对电机的状态进行控制,并用数码管动态显示电机的转速。

系统由硬件设计和软件设计两部分组成。

其中,硬件设计包括MSP430单片机的电源模块、键盘控制模块、测速模块、步进电机驱动(集成达林顿ULN2003)模块、数码显示(SM420361K数码管)模块6个功能模块的设计,以及各模块在电路板上的有机结合而实现。

软件设计包括键盘控制、步进电机脉冲、数码管动态显示以及转速信号采集模块的控制程序,最终实现对步进电机转动方向及转动速度的控制,并将步进电机的转动速度动态显示在LED数码管上,对速度进行实时监控显示。

软件采用在IAR for MSP430软件环境下编辑的C语言。

本系统具有智能性、实用性及可靠性的特点。

关键词:步进电机 MSP430单片机角位移转速控制方向控制AbstractWith the development of microelectronics and computer technology, increasing demand for stepper motor, which is widely used in printers, electronic toys and consumer products such as CNC machine tools, industrial robots, medical equipment and electrical products, and its various national fields are applied. Of stepper motor control system to improve the control accuracy and response speed, energy conservation and so important.This design is used MSP430 of Stepping motor control, through the IO port as a square wave output of the timing of step motor control signal, the signal through the ULN2003 driver chip stepper motor; the same time, with four buttons to the status of the motor control, and dynamic display with digital control motor speed.System consists of hardware and software design of two parts. Among them, the hardware design, including minimum system MSP430 microcontroller, power supply module, keyboard control module, stepper motor drive (integrated Darlington ULN2003) module, digital display (SM420361K digital control) module, speed modules (including the Hall probe UGN3020) six function modules, and each module in the circuit board to achieve the organic combination. Software design, including keyboard control, stepping motor pulse, the digital dynamic display and speed signal acquisition module, control procedures, and ultimately to the stepper motor rotation direction and rotation speed control of stepper motor rotation speed and dynamic display in the LED digital tube, real-time monitoring of the speed display. Software used in the software environment to edit IAR for MSP430 C language. This system has the intelligence, practicality and reliability features.Key Words:Stepping motor MSP430 Angular displacement Speed control Direction control目录摘要 (I)第一章绪论 (1)1.1课题背景 (1)1.2国内外发展现状 (1)1.3本文设计的任务 (3)第二章系统概述 (4)2.1系统的总体框架 (4)2.1.1 系统的组成 (4)2.1.2系统的工作原理 (5)2.2系统的主要功能 (5)2.2.1 步进电机的主要功能 (5)2.2.2 系统的特点 (5)3.1MSP430系列单片机简介 (6)3.1.1 MSP430系列单片机功能特性 (6)3.1.2 MSP430系列单片机的应用 (8)3.2MSP430F149型单片机 (8)3.2.1 MSP430F149的引脚图 (8)3.2.2 MSP430F149的微处理器CPU (9)3.2.3工作方式 (9)3.3步进电机 (11)3.3.1 步进电机概述 (11)3.3.2 步进电机的特性 (11)3.3.3 步进电机的种类 (12)3.3.4 永磁步进电机的控制原理 (12)3.4步进电机控制器系统的组成 (14)3.4.1 电源设计 (15)3.4.2 键盘控制电路 (15)3.4.3 LED数码显示电路 (16)3.4.4 测速电路介绍 (18)3.4.5 步进电机驱动电路 (19)第4章控制系统软件的设计 (22)4.1程序设计前期准备 (22)4.1.1 程序设计平台 (22)4.1.2 程序设计思路 (24)4.2程序流程图 (25)4.2.1 主程序流程图 (25)4.2.2 读键盘子程序流程图 (26)4.2.3 键盘处理子程序流程图 (27)4.2.4 电机控制中断程序流程图 (30)第5章系统调试 (35)5.1系统的调试 (35)5.2运行结果 (35)第6章总结 (37)致谢 (38)参考文献 (39)附录 (41)南京工业大学本科生毕业设计(论文)第一章绪论1.1 课题背景当今社会,电动机在工农业生产、人们日常生活中起着十分重要的作用。

基于MSP430实现的步进电机控制

基于MSP430实现的步进电机控制

基于MSP430实现的步进电机控制步进电机是一种常见的电动机,特点是步进角固定,平稳运行,精度高,广泛应用于机械和自动控制领域。

本文主要介绍基于MSP430微控制器的步进电机控制实现。

步进电机是一种将电能转换为机械能的装置,其转子每次运动一定的角度,可以控制定位的精度。

步进电机由定子和转子组成,定子上有若干个绕组,每个绕组对应一个磁极。

转子上有若干个永磁体,与定子的磁极相对应。

定子绕组按照特定的顺序通电,可以使转子定角度运动。

MSP430是一种低功耗的微控制器,广泛应用于嵌入式系统中。

它具有丰富的外设和强大的运算能力,适用于实时控制任务。

步进电机控制的关键是按照特定的顺序给定子绕组通电。

常见的控制方式有单相全步进、双相全步进、单相半步进等。

每种控制方式具有不同的定位精度和工作效率。

在MSP430上实现步进电机控制,需要连接步进电机驱动电路并编写控制程序。

步进电机驱动电路由MSP430的IO口控制,通过输出高低电平来控制步进电机的运动。

控制程序需要按照特定的顺序将对应的IO口设置为高电平,从而达到控制步进电机运动的目的。

以下是基于MSP430实现步进电机控制的一般步骤:1.连接步进电机驱动电路:根据步进电机的型号和电路要求,连接驱动电路到MSP430的IO口。

通常需要一个或多个MOSFET或BJT来控制步进电机的相位。

2.初始化IO口:在程序开始时,需要将用来控制步进电机的IO口初始化为输出模式,并设置初始电平。

3.编写控制程序:根据步进电机的控制方式,编写相应的控制程序。

通常使用循环结构,按照特定的序列控制IO口的高低电平。

4.循环控制:在控制程序中,使用循环结构无限循环执行步进电机的运动。

根据步进电机的控制方式,确定每一步的运动方向和步长。

5.延时控制:步进电机的转动需要一定的时间间隔,控制程序中需要添加延时函数,保证每步的时间一致。

可以使用MSP430的定时器来实现精确的延时操作。

6.控制运动范围:根据需要控制步进电机的运动范围,可以通过控制循环次数或其他方式实现。

基于MSP430F169的步进电机控制系统

基于MSP430F169的步进电机控制系统

基于MSP430F169的步进电机控制系统董磊;王春民;尹晶;翟红艺【期刊名称】《吉林大学学报(信息科学版)》【年(卷),期】2011(029)006【摘要】为使光电经纬仪调焦系统达到最佳成像效果,设计了基于MSP430F169单片机的步进电机位置控制系统.该系统采用电位计作为位置反馈元件,采用单片机内部A/D( Analog to Digital)定时采样位置信息,并与给定位置进行控制位置误差对比.硬件系统包括单片机及接口电路、电机驱动电路、液晶显示电路和键盘.结合硬件电路设计了系统软件,使步进电机能停止在按键设定的给定位置并通过液晶显示给定位置.实验结果表明,该系统达到了理想的控制精度,方差达到0.000 003 67 ~0.000 012 92.【总页数】5页(P549-553)【作者】董磊;王春民;尹晶;翟红艺【作者单位】长春理工大学光电信息学院电子工程系,长春130012;长春理工大学光电信息学院电子工程系,长春130012;吉林大学仪器科学与电气工程学院,长春130021;长春理工大学光电信息学院电子工程系,长春130012;长春理工大学光电信息学院电子工程系,长春130012【正文语种】中文【中图分类】TP273;TM92115;TN914【相关文献】1.基于MSP430F169的金属探测小车控制系统设计 [J], 蒋雪琴;汪金刚2.基于PLC的步进电机控制系统设计 [J], 王勋3.一种基于FPGA的步进电机控制系统的设计 [J], 邱靖超;刘新妹;殷俊龄;杨冰4.基于PLC的自动化步进电机控制系统设计 [J], 张新军5.基于增量式PID的步进电机速度控制系统设计 [J], 许洋;周奎;杨亚会;杨倩;向婧燕因版权原因,仅展示原文概要,查看原文内容请购买。

msp430单片机控制步进电机实验的电路图及C程序

msp430单片机控制步进电机实验的电路图及C程序

各模块的电路图如下:试验程序如下:#include <msp430x14x.h>#define DCO_FREQ 1000000 // DCO frequency#define ONE_SEC_CNT 512 // Number of WDT interrupts in 1 second#define DEBOUNCE_CNT 0x05 // (1/512)*5 = ~10 msec debounce#define DIR_MASK 0x01 // 0x01 is clockwise, 0x00 is counter-clockwise #define STEP_MASK 0x02 // 0x00 is full-stepping, 0x02 is half-stepping #define MOTION_MASK 0x04 // 0x00 is continuous, 0x04 is single-step#define DEFAULT_RA TE 0x8000 // Default stepping rate#define MIN_RATE 0x8000 // Minimum stepping rate#define MAX_RATE 0x0800 // Maximum stepping rate// Default state is full-stepping, clockwise, continuousunsigned char state = 1; // State variableunsigned char stepIndex = 0; // State table indexunsigned int rate = DEFAULT_RA TE; // Stepping rateunsigned char change_rate_flag = 0; // Flag indicating rate changeunsigned int max_rate = MAX_RA TE; // Maximum stepping rateunsigned int min_rate = MIN_RA TE; // Minimum stepping rate unsigned int SW[4];void sys_init(void);void Set_DCO(unsigned long freq);void timerA_Init(void);void uart0_Init(void);void wdt_Init(void);void toggle_stepping_mode(void);void increase_stepping_rate(void);void decrease_stepping_rate(void);void toggle_motion(void);void toggle_direction(void);//定义串口操作变量char nRev_UART0; // 串口0 的接收标志char UART0_TX_BUF[10]; // 串口0 的发送缓冲区char UART1_RX_Temp[10];char UART0_RX_BUF[10]; // 串口0 的接收缓冲区int nTX0_Len;int nRX0_Len;int nRX0_Len_temp;char nTX0_Flag;int nSend_TX0;// 整步状态表Astatic const unsigned char fullStepA[] ={0x00,0x00,0x01,0x01};// 半步状态表Bstatic const unsigned char fullStepB[] ={0x01,0x00,0x00,0x01};// 半步状态表Astatic const unsigned char HalfStepA[] = {0x01, // 001 10x06, // 110 20x00, // 000 30x00, // 000 40x00, // 000 50x07, // 111 60x01, // 001 70x01 // 001 8};// 逆时钟、半步状态表Bstatic const unsigned char CcwHalfStepB[] = {0x01, // 001 10x01, // 001 20x01, // 001 30x06, // 110 40x00, // 000 50x00, // 000 60x00, // 000 70x07 // 111 8};// 顺时钟、半步状态表Bstatic const unsigned char CwHalfStepB[] = {0x00, // 000 10x00, // 000 20x00, // 000 30x07, // 111 40x01, // 001 50x01, // 001 60x01, // 001 70x06 // 110 8};void main(void){int i;// 停止WDTWDTCTL = WDTPW + WDTHOLD;sys_init();_EINT();for(;;){if(nRev_UART0 == 1){nRev_UART0 = 0;for(i = 0;i < nRX0_Len;i++) UART1_RX_Temp[i] = UART0_RX_BUF[i];if((UART1_RX_Temp[0] == 'A') && (UART1_RX_Temp[1] == 'T')){UART0_TX_BUF[0] = 'O';UART0_TX_BUF[1] = 'K';UART0_TX_BUF[2] = 13;nTX0_Len = 3;switch(UART1_RX_Temp[2]){case 'D': // 方向toggle_direction();break;case 'C': // 运动模式toggle_motion();break;case 'M': // 步进模式toggle_stepping_mode();break;case 'F': // 增加速率increase_stepping_rate();break;case 'S': // 降低速率decrease_stepping_rate();break;default: break;}}else{UART0_TX_BUF[0] = 'E';UART0_TX_BUF[1] = 'R';UART0_TX_BUF[2] = 'O';UART0_TX_BUF[3] = 'R';UART0_TX_BUF[4] = 'R';UART0_TX_BUF[5] = 13;nTX0_Len = 6;}// 设置中断标志,进入发送中断程序IFG1 |= UTXIFG0;nRX0_Len = 0;}}}void sys_init(void){// 设置下降沿触发中断P1IES = 0x0f;P1IFG = 0x00;P1IE = 0x0f;// 设置P2.3,2,1,0 为输出// 设置P3.3,2,1,0 为输出P2OUT = 0x00;P3OUT = 0x00;P2DIR |= 0x0f;P3DIR |= 0x0f;// 设置DCOSet_DCO(DCO_FREQ);// 初始化Timer AtimerA_Init();// 初始化UART0uart0_Init();// 初始化WDTwdt_Init();}void Set_DCO(unsigned long freq){unsigned int clkCnt;unsigned int numDcoClks;unsigned int prevCnt = 0;// ACLK = LFXT1CLK/8 = 4096 HzBCSCTL1 |= DIV A_3;numDcoClks = freq/4096;TACCTL2 = CM_1 + CCIS_1 + CAP; TACTL = TASSEL_2 + MC_2 + TACLR; while(1){while( !(TACCTL2 & CCIFG) ){}TACCTL2 &= ~CCIFG;clkCnt = TACCR2 - prevCnt;prevCnt = TACCR2;if( numDcoClks == clkCnt ){break;}else if( clkCnt > numDcoClks ){DCOCTL--;if( DCOCTL == 0xFF ){if( BCSCTL1 & 0x07 ){BCSCTL1--;}else{break;}}}else{DCOCTL++;if( DCOCTL == 0x00 ){if( (BCSCTL1 & 0x07) != 0x07 ){BCSCTL1++;}else{break;}}}}// ACLK = LFXT1CLK/1 = 32768 HzBCSCTL1 &= ~DIV A_3;TACCTL2 = 0;TACTL = 0;}void wdt_Init(void){// 设置时钟源为ACLK,1秒内产生512此WDTCTL = WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL + WDTIS0 + WDTIS1; }void uart0_Init(void){//将寄存器的内容清零U0CTL = 0X00;//数据位为8bitU0CTL += CHAR;U0TCTL = 0X00;//波特率发生器选择ACLKU0TCTL += SSEL0;//波特率为9600UBR0_0 = 0X03;UBR1_0 = 0X00;UMCTL_0 = 0x4A;//使能UART0的TXD和RXDME1 |= UTXE0 + URXE0;//使能UART0的RX中断IE1 |= URXIE0;//使能UART0的TX中断IE1 |= UTXIE0;//设置P3.4为UART0的TXDP3SEL |= BIT4;//设置P3.5为UART0的RXDP3SEL |= BIT5;//P3.4为输出管脚P3DIR |= BIT4;}void timerA_Init(void){TACCR0 = rate;TACCTL0 = CCIE;TACTL = TASSEL_2 + MC_1 + TACLR;}interrupt [TIMERA0_VECTOR] void TimerA_ISR(void) {unsigned char index;unsigned char p2 = 0;unsigned char p3 = 0;// 判断步进速率是否需要改变if( change_rate_flag ){TACCR0 = rate;change_rate_flag = 0;}// 判断状态switch( (state & 0x3) ){case 0x00: // 整步、逆时钟方向index = stepIndex & 0x03;p2 |= fullStepA[index];p3 |= fullStepB[index];P2OUT = p2;P3OUT = p3;++stepIndex;break;case 0x01: // 整步、顺时钟方向index = stepIndex & 0x03;p3 |= fullStepA[index];p2 |= fullStepB[index];P3OUT = p3;P2OUT = p2;++stepIndex;break;case 0x02: // 半步、逆时钟方向index = stepIndex & 0x07;p2 |= HalfStepA[index];p3 |= CcwHalfStepB[index];P2OUT = p2;P3OUT = p3;++stepIndex;break;case 0x03: // 半步、顺时钟方向index = stepIndex & 0x07;p3 |= CwHalfStepB[index];p2 |= HalfStepA[index];P3OUT = p3;P2OUT = p2;++stepIndex;break;default: break;}// 如果单步状态下,禁止定时器中断if( state & MOTION_MASK ){TACCTL0 &= ~CCIE;}}////////////////////////////////////////// 处理来自串口0 的接收中断interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void) {//接收来自的数据UART0_RX_BUF[nRX0_Len_temp] = RXBUF0;nRX0_Len_temp += 1;if(nRX0_Len_temp >= 2)if(UART0_RX_BUF[nRX0_Len_temp - 2] == '\r' && UART0_RX_BUF[nRX0_Len_temp - 1] == '\n') {// 过滤掉回车换行(\r\n)if(nRX0_Len_temp == 2){nRX0_Len_temp = 0;}else if(nRX0_Len_temp > 2){nRX0_Len = nRX0_Len_temp;nRev_UART0 = 1;nRX0_Len_temp = 0;}}}////////////////////////////////////////// 处理来自串口0 的发送中断interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void) {if(nTX0_Len != 0){// 表示缓冲区里的数据没有发送完nTX0_Flag = 0;TXBUF0 = UART0_TX_BUF[nSend_TX0];nSend_TX0 += 1;if(nSend_TX0 >= nTX0_Len){nSend_TX0 = 0;nTX0_Len = 0;nTX0_Flag = 1;}}}interrupt [WDT_VECTOR] void WDT_ISR(void){unsigned char sw_state;static unsigned char one_sec_flag = 0;// 获得P1口的输入sw_state = ~P1IN & 0x0f;// 判断是否有键按下if( sw_state == 0x00 ){// 禁止看门狗中断IE1 &= ~WDTIE;// 判断是否S2的激活状态小于1秒if( !one_sec_flag && (SW[1] >= DEBOUNCE_CNT) ){toggle_motion();}// 复位状态计数器SW[0] = 0;SW[1] = 0;SW[2] = 0;SW[3] = 0;// 复位标志one_sec_flag = 0;// 使能P1口的中断功能P1IFG = 0x00;P1IE = 0x0f;}else{// 检查是否是S1状态if( sw_state & 0x01 ){if( SW[0] < ONE_SEC_CNT ){// 增加状态计数器++SW[0];}if( SW[0] == DEBOUNCE_CNT ){toggle_direction();}}else{SW[0] = 0;}// 检查是否是S2状态if( sw_state & 0x02 ){if( SW[1] < ONE_SEC_CNT ){// 增加状态计数器++SW[1];}if( SW[1] == ONE_SEC_CNT )toggle_stepping_mode();one_sec_flag = 1;SW[1] = 0;}}else{// 判断是否S2的激活状态小于1秒if( !one_sec_flag && (SW[1] >= DEBOUNCE_CNT) ) {toggle_motion();}one_sec_flag = 0;SW[1] = 0;}// 检查是否是S3状态if( sw_state & 0x04 ){// 检查是否是连续模式if( (state & MOTION_MASK) == 0 ){if( SW[2] < ONE_SEC_CNT ){// 增加状态计数器++SW[2];}if( SW[2] == DEBOUNCE_CNT ){increase_stepping_rate();}}else // 单步模式{// 增加状态计数器++SW[2];if( (SW[2] % DEBOUNCE_CNT) == 0 ){increase_stepping_rate();}}else{SW[2] = 0;}// 检查是否是S4状态if( sw_state & 0x08 ){if( SW[3] < ONE_SEC_CNT ){// 增加状态计数器++SW[3];}if( SW[3] == DEBOUNCE_CNT ){decrease_stepping_rate();}}else{SW[3] = 0;}}}interrupt [PORT1_VECTOR] void PORT1_ISR(void) {// 禁止端口1的中断P1IE = 0x00;// 清除端口1的中断标志P1IFG = 0x00;// 使能看门狗中断IE1 |= WDTIE;}void increase_stepping_rate(void){unsigned int new_rate;// 检查是否是连续模式if( (state & MOTION_MASK) == 0 )new_rate = rate >> 1;if( new_rate >= max_rate ){rate = new_rate;change_rate_flag = 1;}}//使能定时器A的中断TACCTL0 |= CCIE;}void decrease_stepping_rate(void){// 检查是否是连续模式if( (state & MOTION_MASK) == 0 ){if( rate <= (min_rate >> 1) ){rate <<= 1;change_rate_flag = 1;}}// 使能定时器A的中断TACCTL0 |= CCIE;}void toggle_stepping_mode(void){// 切换步进模式state ^= STEP_MASK;// 检查是否是半步模式if( state & STEP_MASK ){// 从整步模式切换到半步模式// 定时器的频率加倍rate = (rate >> 1);change_rate_flag = 1;max_rate = (MAX_RA TE >> 1);min_rate = (MIN_RATE >> 1);}else // 整步模式// 从半步模式切换到整步模式// 定时器的频率减半rate = (rate << 1);change_rate_flag = 1;max_rate = MAX_RATE;min_rate = MIN_RA TE;}}void toggle_motion(void){state ^= MOTION_MASK;// 检查是否是连续步进模式if( (state & MOTION_MASK) == 0 ){// 使能定时器中断TACCTL0 |= CCIE;}}void toggle_direction(void){state ^= DIR_MASK;}。

基于MSP430单片机的步进电机控制系统设计

基于MSP430单片机的步进电机控制系统设计
图$ 定时器中断服务程序流程图
单 片 机 的 应 用 程 序 。 通 过 综 合 利 用 ’()%$"*&$# 单 片 机 的
+,’-./0 中 断 模 块 , 串 行 异 步 通 信 模 块 , 键 盘 以 及 1-2
的接口以及配套的相应设备, 可 以 建 立 步 进 电 机 控 制 系 统 模型。它具有通过串口和按键 两 种 控 制 方 式 控 制 步 进 电 机 的转速、旋转方向以及启动和停止步进 电 机 , 并 且 在 1-2 上显示当前步进电机运行状态信息的功能,包括运行速 度,当前运行的距离等信息。 系统的工作流程图如图 ! 所示:
’()%$"+&$# 单 片 机 , 通 过 -4’=GH, 定 时 器 产 生 脉 冲 信
号,通过对脉冲信号的控制完成对步进电机的控制。 步进电机的驱动图如图 & 所示,其中 )IC 表示步进脉 冲 输 入 端 , >4G 表 示 步 进 电 机 旋 转 方 向 的 正 反 选 择 位 ,
’()%$" 的 &* 位 定 时 器 中 断 可 用 于 时 间 计 数 , 时 序 发
利 用 ’()%$" 专 用 工 具 而 设 计 的 扩 展 功 能 , 提 供 了 友 好 的 用 户 界 面 和 强 大 的 调 试 系 统 , 十 分 便 于 开 发 ’()%$" 系 列
收稿日期: !""# — "* — !.
$*
机电工程技术 !""# 年第 $% 卷第 && 期
电机控 制
% 步进电机的驱动
步进电机不同于一般的电机,所以它的驱动需要一 个专门的驱动器。驱动器的作用是根据控制信号,使步 进电机的绕组按照特定的顺序通断电,完成电机转子的 转动动作。 在本系统中采用 >’>%"$ 步进电 机 驱 动 器 , 该 驱 动 器 可 以 进 行 !#* 细 分 , 可 以 完 成 步 进 距 离 的 毫 米 精 度 的 控 制,满足本&<=& 年生,陕西西安人,硕士研究 生。研究领域:工业自动化和嵌入式控制系统。

基于MSP430步进电机控制器的设计

基于MSP430步进电机控制器的设计

基于MSP430步进电机控制器的设计步进电机控制器是一种用于驱动步进电机的控制设备,能够精确控制电机的速度和位置。

本文将基于MSP430微控制器进行步进电机控制器的设计,并详细介绍设计的过程和主要功能。

首先,我们选择MSP430微控制器作为步进电机控制器的核心芯片。

MSP430是一款低功耗的微控制器,具有强大的运算能力和丰富的外设接口,非常适合用于步进电机控制。

此外,MSP430还具有低功耗特性,可以提高步进电机控制器的效能。

步进电机的控制原理是通过依次激活电机的每个相位来实现旋转。

因此,我们需要在步进电机控制器中添加适当的驱动电路,以实现相位的选择和激活。

在步进电机控制器中,我们可以使用MSP430的GPIO(通用输入输出)引脚来实现与电机驱动电路的连接。

通过一个引脚来控制电机的使能信号,可以实现对电机的启停控制;通过几个引脚来控制电机的相位选择,可以实现对电机的旋转方向和速度的控制。

同时,我们还可以利用MSP430的定时器来生成适当的脉冲信号,用于控制步进电机的旋转。

通过设置定时器的周期和占空比,可以实现不同的步进模式(如全步进和半步进),从而实现更精细的电机控制。

此外,为了提高步进电机控制器的稳定性和可靠性,我们可以添加额外的保护电路和状态监测功能。

例如,通过添加电流检测电路,可以实现对电机工作状态的实时监测;通过添加过压和过载保护电路,可以避免电机因异常情况而损坏。

这些保护电路可以通过MSP430的ADC(模数转换器)模块进行数据采集和处理。

总结来说,基于MSP430微控制器的步进电机控制器的设计需要考虑硬件设计和软件设计两个方面。

在硬件设计中,需要选择合适的外设连接并添加保护电路和状态监测功能;在软件设计中,需要编写驱动程序和控制算法,并使用MSP430的软件开发工具进行开发和调试。

通过合理设计和优化,我们可以实现一个高效、稳定和可靠的步进电机控制器。

根据MSP430实现的步进电机控制

根据MSP430实现的步进电机控制

作品概述第一节基本情况MSP430G2系列Launchpad是TI推出的一款低成本的开发平台。

它适用于适用于TI 最新MSP430G2xx 系列产品,其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。

本作品选择MSP430G2231为Launchpad核心板的单片机,采用Launchpad核心板加底板的形式,实现了对步进电机的四相四拍和四相八拍控制,并实现了转动方向和转动速度的控制,并且用数码管显示转动方向和转动速度的百分比。

第二节软硬件总体设计方案本作品选择MSP430G2231为Launchpad核心板的单片机,采用Launchpad核心板加底板的形式,对步进电机进行控制。

滑变,即滑动变阻器,用来控制电机的转速,本系统共有两个拨动按键,一个拨动按键用来选择步进电机的模式,如四相八拍或四相四拍,另一个拨动按键用来控制转动方向。

数码管可用来显示模式和方向,以及转速的百分比。

系统总体设计框图如下图1.2.1 系统总体设计框图在硬件设计时,只需设计外围电路,留出与Launchpad核心板的接口即可,既节约了设计时间,又节省了成本,而且无需额外购买仿真器,从而使设计成本到达最低。

在软件设计方面,可充分利用G2系列单片机的各个功能模块,如时钟系统、TA定时器、ADC10模数转换器,看门狗,以及IO口中断等资源,设计出高效率、低功耗、结构紧凑而又功能强大的产品。

第一章作品硬件系统设计第一节MSP430G2系列Launchpad开发板组成及硬件资源情况介绍MSP430G2系列Launchpad是TI推出的一款低成本的开发平台。

它适用于适用于TI 最新MSP430G2xx 系列产品,其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。

LaunchPad 具有集成的DIP 目标插座,可支持多达20 个引脚,从而使MSP430 Value Line 器件能够简便地插入LaunchPad 电路板中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

作品概述第一节基本情况MSP430G2系列Launchpad是TI推出的一款低成本的开发平台。

它适用于适用于TI 最新MSP430G2xx 系列产品,其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。

本作品选择MSP430G2231为Launchpad核心板的单片机,采用Launchpad核心板加底板的形式,实现了对步进电机的四相四拍和四相八拍控制,并实现了转动方向和转动速度的控制,并且用数码管显示转动方向和转动速度的百分比。

第二节软硬件总体设计方案本作品选择MSP430G2231为Launchpad核心板的单片机,采用Launchpad核心板加底板的形式,对步进电机进行控制。

滑变,即滑动变阻器,用来控制电机的转速,本系统共有两个拨动按键,一个拨动按键用来选择步进电机的模式,如四相八拍或四相四拍,另一个拨动按键用来控制转动方向。

数码管可用来显示模式和方向,以及转速的百分比。

系统总体设计框图如下图1.2.1 系统总体设计框图在硬件设计时,只需设计外围电路,留出与Launchpad核心板的接口即可,既节约了设计时间,又节省了成本,而且无需额外购买仿真器,从而使设计成本到达最低。

在软件设计方面,可充分利用G2系列单片机的各个功能模块,如时钟系统、TA定时器、ADC10模数转换器,看门狗,以及IO口中断等资源,设计出高效率、低功耗、结构紧凑而又功能强大的产品。

第一章作品硬件系统设计第一节MSP430G2系列Launchpad开发板组成及硬件资源情况介绍MSP430G2系列Launchpad是TI推出的一款低成本的开发平台。

它适用于适用于TI 最新MSP430G2xx 系列产品,其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。

LaunchPad 具有集成的DIP 目标插座,可支持多达20 个引脚,从而使MSP430 Value Line 器件能够简便地插入LaunchPad 电路板中。

此外,其还可提供板上Flash 仿真工具,以直接连接至PC 轻松进行编程、调试和评估。

LaunchPad 试验板还能够对eZ430-RF2500T 目标板、eZ430-Chronos 手表模块eZ430-F2012T/F2013T 目标板进行编程。

此外,它还提供了从MSP430G2xx 器件到主机PC 或相连目标板的9600 波特UART 串行连接。

其实物图如图2.1所示。

图2.1.1 MSP430G2系列Launchpad开发板实物图MSP430G2系列Launchpad开发板硬件资源:• USB 调试与编程接口无需驱动即可安装使用,且具备高达9600 波特的UART 串行通信速度• 支持所有采用PDIP14 或PDIP20 封装的MSP430G2xx 和MSP430F20xx 器件• 分别连接至绿光和红光LED 的两个通用数字I/O 引脚可提供视觉反馈• 两个按钮可实现用户反馈和芯片复位• 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板• 高质量的20 引脚DIP 插座,可轻松简便地插入目标器件或将其移除第二节关键器件选型以及性能指标参数一、步进电机本作品选用的是常州市德利来电器有限公司生产的35BY48BH10型步进电机,其技术数据、接线图、外形图和实物图如下所示。

1.技术数据型号步矩角相数电压电流电阻电感(400Hz)最大静转矩定位转距转动惯量引线规格35BY48BH10 7.5 4 12 0.286 42 25 400 90 7.9 UL1095 AWG282.接线图 & 外形图 & 实物图图二.1接线图图二.2 外形图图二.3 实物图二、L298N作为电机驱动的核心器件,电机驱动芯片的选型对整个系统的可靠性和性能都起着至关重要的作用。

本作品中选用了意法半导体ST生产的L298N电机驱动芯片。

其关键指标如下:图2.2.1 L298N实物图1.供电电压可高达46V,直流电流可达4A。

完全满足步进电机的驱动要求。

2.低饱和电压。

3.过热保护。

4.逻辑0输入电压可达1.5V,可有效抑制噪声;逻辑1输入电压可低至2.3V,所以可以用430单片机直接驱动。

综上可见,L298N电机驱动芯片可以完全满足本作品的要求。

三、Max7219由于IO引脚有限,所以采用串行方式控制数码管,数码管驱动芯片选择Max7219,它最多能驱动8位数码管,能独立完成刷新扫描而不需要单片机的参与,每位独立控制,内部有解码器,可选择解码和不解码两种方式,亮度可以通过数字或模拟方式控制。

从各个方面来讲,它都是本例的最佳选择。

图2.2.1 Max7219实物图第三节系统原理图和单元电路介绍系统主要由单片机,电机驱动电路,控制电路,电源电路以及数码管显示电路组成,系统原理图如图2.3.1所示。

图2.3.1 系统原理图下面是各个模块的具体介绍:1.电机驱动模块因为L298N逻辑1输入电压可低至2.3V,所以可以用430单片机直接驱动,IN1、IN2、IN3和IN4接到单片机管脚上。

Vss接供电电压,Vs接输入逻辑电压,可接3.3V,本例为了走线方便,直接接5V。

EN A和EN B接高电平,I SEN A、I SEN B通过一个小电阻接地,目的是限制负载电流过大,OUT1、OUT2、OUT3和OUT4直接接步进电机,因为电机的感性器件,电流不能突变,所以接上8个二极管以保护电源。

另外在Vss和Vs附近必须接一个100uF的电容,当这个大电容离器件太远时,必须在近处再接一个小电容。

图2.3.2 电机驱动模块2.电机控制模块如图所示,滑变用来控制电机的速度,Speed接到单片机的A7脚上,通过测量电压值,计算出恰当的延时时间,达到控制速度的目的。

转动方向和Mode用来改变电机的转向和模式,即选择四相四拍或四相八拍模式。

图2.3.3 电机驱动模块3.数码管显示模块由于IO引脚有限,所以采用串行方式控制数码管,数码管驱动芯片选择Max7219,它最多能驱动8位数码管,能独立完成刷新扫描而不需要单片机的参与,每位独立控制,内部有解码器,可选择解码和不解码两种方式,亮度可以通过数字或模拟方式控制。

从各个方面来讲,它都是本例的最佳选择。

图2.3.4 电平转换模块图2.3.5 数码管驱动模块图2.3.6 数码管注意在使用时必须在该芯片附近接一个大电容,比如4.7uF。

由于它是5V逻辑电平,而MSP430是3.3V电平,所以用74HC573进行电平转换。

数码管用的是共阴极四位数码管,这是由驱动芯片Max7219决定的。

第四节PCB板与系统元器件清单1.PCB板图2.4.1 PCB板正面图2.4.2 PCB板背面2.系统元件清单如表2.4.1所示。

表2.4.1 元件清单第五节PCB板设计要求和注意事项由于是大功率器件,所以100uF电容必须离芯片越近越好,否则应再在L298N 附近加上一个小电容,此外二极管也必须离芯片输出引脚越近越好。

Max7219的电容也应该离芯片越近越好。

第六节安装调试注意事项由于是大功率器件,所以要加散热片,安装时就先焊散热片,再插入L298N,用螺丝固定到散热片上后,再焊L298N的各个管脚。

安装好的实验板、插上Laundrypad核心板后的实验板,以及连接上步进电机的实验板如下图所示。

图六.1 安装好的板子图六.2插上Laundrypad核心板后的实验板图六.3 连接上步进电机的实验板第二章作品软件系统设计第一节程序流程图介绍本作品软件程序通过单片机P1.0、P1.1、P1.2和P1.3依次输出高或低产生一定的相序来驱动电机驱动芯片,进而驱动步进电机;而转向和模式是通过重复扫描相应按键,判断其相应的高低从而对电机的转向和模式进行控制。

系统流程图如图3.1.1所示。

图3.1.1 系统流程图通过AD对滑变的电压值的采样来决定转动速度的快慢,这部分是在AD中断中进行的。

AD中断服务子程序如图3.1.2所示。

图3.1.2 中断服务子程序程序流程说明:处理数据和显示转速百分比是放在主循环里的,但是为了逻辑上了连续,把它们放到后面和中断服务子程序一起介绍。

第二节子程序介绍1.初始化函数初始化函数用于设置系统的时钟、IO的配置,各个模块的配置,以及各个功能模块的初始化,只在系统初始化执行一遍,正面仅出几个重要的初始化函数的源代码,其余的读者可以自己根据需要编写:(1)函数名:void Init_CLK();输入输出变量:无功能:时钟配置(2)函数名:void Init_IO();输入输出变量:无功能:IO配置(3)函数名:void ConfigI_ADC();输入输出变量:无功能:ADC配置void ConfigI_ADC(){/* Configure ADC Channel 7 */ADC10CTL1 = INCH_7 + ADC10DIV_3; // ADC10CLK/4ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;__delay_cycles(100); // Wait for ADC Ref to settle }(4)函数名:void ADC_Sample();输入输出变量:无功能:开始AD采样void ADC_Sample(){ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start }(5)函数名:函数名:void Init_Max7219();输入输出变量:无功能:配置Max7219的工作模式void Init_Max7219(void){Write_Max7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1) Write_Max7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)Write_Max7219(DECODE_MODE,0x00); //选用全译码模式Write_Max7219(SCAN_LIMIT,0x03); //4只LEDWrite_Max7219(INTENSITY,0x01); //设置初始亮度}2.功能子函数功能子函数用来实现电机转速的控制,通过对按键的扫描实现电机模式和转向的切换,电机的驱动,以及相关参数在数码管上的显示。

(1)函数名:void SpeedCtrl(void);输入输出变量:无功能:计算延时系数,进而控制转速void SpeedCtrl(){SpeedPercent = ADC_Result*121>>10;delay =50000L-SpeedPercent*500L;// 数字后面的L声明这是一个长整型的数,不加的话系统会认为是一个整型数}(2)函数名:void Key();输入输出变量:无功能:按键扫描,判断电机的转向和模式(3)函数名:void Moter_Driver();输入输出变量:无功能:电机驱动void Moter_Driver(){char j;if(SpeedPercent == 0) Step=8; // Stop the Moterelse{State+=Direction;if((Mode==2) && (State<0))State=3;else if((Mode==2) && (State>3))State=0;else if(State<0)State=7;else if(State>7)State=0;Step = State * Mode;}for(j=0;j<8;j++) //加速曲线{STEP_ALL_OFF;Delay(delay-delay>>j);switch (Step){case 0: STEP_A_ON;break;case 1: STEP_A_ON;STEP_B_ON;break;case 2: STEP_B_ON; break;case 3: STEP_B_ON;STEP_C_ON;break;case 4: STEP_C_ON; break;case 5: STEP_C_ON;STEP_D_ON;break;case 6: STEP_D_ON; break;case 7: STEP_D_ON;STEP_A_ON;break;case 8: STEP_ALL_OFF; break;default: Step = State >>1;}Delay(delay>>j);}}(4)函数名:void Display(char Num);输入变量:待显示数功能:显示一个二位数void Display(char Num){char Dgt1,Dgt2;Dgt1 = Num/10;Dgt2 = Num%10;Write_Max7219(2,DigitTab[Dgt1]);Write_Max7219(1,DigitTab[Dgt2]);}(5)函数名:void WOV(signed char Pace,signed char Mode);输入变量:当前电机位置,模式(四拍、八拍)功能:显示电机当前的位置和模式3.中断服务子程序本作品中只用到了AD中断,在中断中读取AD采样结果后退出,在主循环中进行数据处理,以达到控制转速的效果。

相关文档
最新文档