基于MSP430实现的步进电机控制Word文档格式.docx
- 文档编号:20611226
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:20
- 大小:841.56KB
基于MSP430实现的步进电机控制Word文档格式.docx
《基于MSP430实现的步进电机控制Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MSP430实现的步进电机控制Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
1.技术数据
型号
步矩角
相数
电压
电流
电阻
电感(400Hz)
最大静转矩
定位转距
转动惯量
引线规格
35BY48BH10
7.5
4
12
0.286
42
25
400
90
7.9
UL1095AWG28
2.接线图&
外形图&
实物图
图二.1接线图图二.2外形图图二.3实物图
2、L298N
作为电机驱动的核心器件,电机驱动芯片的选型对整个系统的可靠性和性能都起着至关重要的作用。
本作品中选用了意法半导体ST生产的L298N电机驱动芯片。
其关键指标如下:
图2.2.1L298N实物图
1.供电电压可高达46V,直流电流可达4A。
完全满足步进电机的驱动要求。
2.低饱和电压。
3.过热保护。
4.逻辑0输入电压可达1.5V,可有效抑制噪声;
逻辑1输入电压可低至2.3V,所以可以用430单片机直接驱动。
综上可见,L298N电机驱动芯片可以完全满足本作品的要求。
3、Max7219
由于IO引脚有限,所以采用串行方式控制数码管,数码管驱动芯片选择Max7219,它最多能驱动8位数码管,能独立完成刷新扫描而不需要单片机的参与,每位独立控制,内部有解码器,可选择解码和不解码两种方式,亮度可以通过数字或模拟方式控制。
从各个方面来讲,它都是本例的最佳选择。
图2.2.1Max7219实物图
第五节系统原理图和单元电路介绍
系统主要由单片机,电机驱动电路,控制电路,电源电路以与数码管显示电路组成,系统原理图如图所示。
图系统原理图
下面是各个模块的具体介绍:
1.电机驱动模块
因为L298N逻辑1输入电压可低至2.3V,所以可以用430单片机直接驱动,IN1、IN2、IN3和IN4接到单片机管脚上。
Vss接供电电压,Vs接输入逻辑电压,可接3.3V,本例为了走线方便,直接接5V。
ENA和ENB接高电平,ISENA、ISENB通过一个小电阻接地,目的是限制负载电流过大,OUT1、OUT2、OUT3和OUT4直接接步进电机,因为电机的感性器件,电流不能突变,所以接上8个二极管以保护电源。
另外在Vss和Vs附近必须接一个100uF的电容,当这个大电容离器件太远时,必须在近处再接一个小电容。
图2.3.2电机驱动模块
2.电机控制模块
如图所示,滑变用来控制电机的速度,Speed接到单片机的A7脚上,通过测量电压值,计算出恰当的延时时间,达到控制速度的目的。
转动方向和Mode用来改变电机的转向和模式,即选择四相四拍或四相八拍模式。
图2.3.3电机驱动模块
3.数码管显示模块
图2.3.4电平转换模块
图2.3.5数码管驱动模块
图2.3.6数码管
注意在使用时必须在该芯片附近接一个大电容,比如4.7uF。
由于它是5V逻辑电平,而MSP430是3.3V电平,所以用74HC573进行电平转换。
数码管用的是共阴极四位数码管,这是由驱动芯片Max7219决定的。
第六节PCB板与系统元器件清单
1.PCB板
图PCB板正面
图PCB板背面
2.系统元件清单如表所示。
表元件清单
Comment
Description
LibRef
Quantity
Speed'
PotentionMeter
POT_Control
1
104
Capacitor
CAP
3
10K
Resistor
Res2
47K
50R
2
LED8_X4
四位数码管
74HC573
电平转换芯片
Max7219
DigitalLEDDriver
IN4007
二极管
8
MSP430G2231
DIP-14
MSP430G2X31
Heatsink-298
散热片
On/Off
带自锁的按键
KEY_LOCK
L298N
DualFullBridgeDriver
5V
Header,2-Pin
Header2
100uF
CAPACITORPOL
4.7uF
SteppingMoter
步进电机
Direction
转向
SWSPDT
Mode
模式
第七节PCB板设计要求和注意事项
由于是大功率器件,所以100uF电容必须离芯片越近越好,否则应再在L298N附近加上一个小电容,此外二极管也必须离芯片输出引脚越近越好。
Max7219的电容也应该离芯片越近越好。
第八节安装调试注意事项
由于是大功率器件,所以要加散热片,安装时就先焊散热片,再插入L298N,用螺丝固定到散热片上后,再焊L298N的各个管脚。
安装好的实验板、插上Laundrypad核心板后的实验板,以与连接上步进电机的实验板如下图所示。
图六.1安装好的板子
图六.2插上Laundrypad核心板后的实验板
图六.3连接上步进电机的实验板
第二章作品软件系统设计
第九节程序流程图介绍
本作品软件程序通过单片机P1.0、P1.1、P1.2和P1.3依次输出高或低产生一定的相序来驱动电机驱动芯片,进而驱动步进电机;
而转向和模式是通过重复扫描相应按键,判断其相应的高低从而对电机的转向和模式进行控制。
系统流程图如图所示。
图系统流程图
通过AD对滑变的电压值的采样来决定转动速度的快慢,这部分是在AD中断中进行的。
AD中断服务子程序如图所示。
图中断服务子程序
程序流程说明:
处理数据和显示转速百分比是放在主循环里的,但是为了逻辑上了连续,把它们放到后面和中断服务子程序一起介绍。
第十节子程序介绍
1.初始化函数
初始化函数用于设置系统的时钟、IO的配置,各个模块的配置,以与各个功能模块的初始化,只在系统初始化执行一遍,正面仅出几个重要的初始化函数的源代码,其余的读者可以自己根据需要编写:
(1)函数名:
voidInit_CLK();
输入输出变量:
无
功能:
时钟配置
(2)函数名:
voidInit_IO();
IO配置
(3)函数名:
voidConfigI_ADC();
ADC配置
voidConfigI_ADC()
{
/*ConfigureADCChannel7*/
ADC10CTL1=INCH_7+ADC10DIV_3;
//ADC10CLK/4
ADC10CTL0=SREF_1+ADC10SHT_3+REFON+ADC10ON+ADC10IE;
__delay_cycles(100);
//WaitforADCReftosettle
}
(4)函数名:
voidADC_Sample();
开始AD采样
voidADC_Sample()
ADC10CTL0|=ENC+ADC10SC;
//Samplingandconversionstart
(5)函数名:
函数名:
voidInit_Max7219();
配置Max7219的工作模式
voidInit_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只LED
Write_Max7219(INTENSITY,0x01);
//设置初始亮度
2.功能子函数
功能子函数用来实现电机转速的控制,通过对按键的扫描实现电机模式和转向的切换,电机的驱动,以与相关参数在数码管上的显示。
voidSpeedCtrl(void);
计算延时系数,进而控制转速
voidSpeedCtrl()
SpeedPercent=ADC_Result*121>
>
10;
delay=50000L-SpeedPercent*500L;
//数字后面的L声明这是一个长整型的数,不加的话系统会认为是一个整型数
}
voidKey();
按键扫描,判断电机的转向和模式
voidMoter_Driver();
电机驱动
voidMoter_Driver()
charj;
if(SpeedPercent==0)Step=8;
//StoptheMoter
else
State+=Direction;
if((Mode==2)&
&
(State<
0))State=3;
elseif((Mode==2)&
(State>
3))State=0;
elseif(State<
0)State=7;
elseif(State>
7)State=0;
Step=State*Mode;
for(j=0;
j<
8;
j++)//加速曲线
{
STEP_ALL_OFF;
Delay(delay-delay>
j);
switch(Step)
case0:
STEP_A_ON;
break;
case1:
STEP_B_ON;
case2:
STEP_B_ON;
break;
case3:
STEP_C_ON;
case4:
STEP_C_ON;
case5:
STEP_D_ON;
case6:
STEP_D_ON;
case7:
STEP_A_ON;
case8:
default:
Step=State>
1;
}
Delay(delay>
voidDisplay(charNum);
输入变量:
待显示数
显示一个二位数
voidDisplay(charNum)
charDgt1,Dgt2;
Dgt1=Num/10;
Dgt2=Num%10;
Write_Max7219(2,DigitTab[Dgt1]);
Write_Max7219(1,DigitTab[Dgt2]);
voidWOV(signedcharPace,signedcharMode);
当前电机位置,模式〔四拍、八拍〕
显示电机当前的位置和模式
3.中断服务子程序
本作品中只用到了AD中断,在中断中读取AD采样结果后退出,在主循环中进行数据处理,以达到控制转速的效果。
AD中断服务子程序如下:
#pragmavector=ADC10_VECTOR
__interruptvoidADC10_ISR(void)
ADC_Result=ADC10MEM;
ADC_Sample();
//開始下一次採樣
第十一节程序调试
1.在CCS下编写完程序后,执行编译〔Build〕
图编译、调试、下载窗口
2.编译通过,执行Debug
图调试窗口
3.调试过程中,可在线查看变量和寄存器的值
Debug窗口下,自左向右依次是去掉断点、全速运行、暂停、停止、进入、单步、汇编进入、汇编单步、返回、同步时钟、复位。
在程序运行后,暂停时可以打开Watch和Regesiter窗口内观察寄存器和变量的变化。
图查看变量、寄存器值
4.设置断点,然后全速运行,被断点断下来,察看相应的变量的值,看是否正确,如不正确则进行相应的改正。
图设置断点调试窗口
第三章总结与思考
本作品是以MSP430G2系列Launchpad开发平台为核心板,加上功能模块底板,实现了对步进电机的四相四拍和四相八拍控制,并实现了转动方向和转动速度的控制,并且用数码管显示转动方向和转动速度的百分比。
本作品的特点:
1.稳定性方面,采用了加速曲线的措施实现了较快的转速,同时保证系统的运行稳定。
2.显示方面,用数码管的前两个字显示模式和方向,如果是四拍则每次同时显示二个段码,如果是八拍显示一个,然后随着电机的转动,段码也开始转动。
方向一致,速度也随着电机转动的快慢而变化。
本作品的不足在于:
1.在电机换向的时候是没有等电机停止转动再换向,而是直接换向,这样造成电机在换向一瞬间有较大的振动。
2.没有区别对待电机从零开始加速的加速曲线和匀速运行时的加速曲线,影响电机的最高转速。
同时发现了一些硬件和软件方面的问题,比如如果用TA中断来代替延时,程序就用跑飞,而用空循环就可以正常运行;
再比如同样的程序,用IAR集成开发工具下载调试,电机就可以正常转动,而用CCS却不行。
思考题:
1.怎样进一步提高转动的稳定度与转速?
2.如果采用加速曲线,加速曲线采用线性曲线、S形曲线还是指数形曲线?
它们的实现难度如何?
3.在切换转向时应该等电机停下来之后再反向加速,怎样判断电机已经停下来了?
4.在带负载的情况下如何准确稳定控制?
5.怎样实时显示转动速度?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MSP430 实现 步进 电机 控制