步进电机控制实验
一、实验目的
步进电机作为一种数字控制电机,可以准确的控制角度和距离应用非常广泛,本实验利用SPCE061A 单片机通过自己编写程序实现步进电机的控制使我们加深对步进电机的了解,同时学会使用步进电机的驱动芯片WZM-2H042M 。另外要求我们掌握单片机控制步进电机的硬件接口电路,以及熟悉步进电机的工作特性。 二、实验内容
根据步进电机驱动电路,使用单片机驱动步进电机,控制步进电机正转、反转操作。 三、实验要求
按实验内容编写程序,并在实验仪上调试和验证。 四、实验说明
1.步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。若每旋转一圈以20个励磁信号来计算,则每个励磁信号前进18度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。
2.步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。图为步进电动机的控制等效电路,适应控制A 、B 、/A、/B的励磁信号,即可控制步进电动机的转动。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,即可步进电动机连续转动。
a .1相励磁法:在每一瞬间只有一个线圈导通。消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走18度。若欲以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
b .2相励磁法:在每一瞬间会有二个线圈同时导通。因其转矩大,振动小,故为目前使用最多的励磁方式,每送一励磁信号可走18度。若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
c .1-2相励磁法:为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走9度,故亦广泛被采用。若以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
3.电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至其极限时,步进电动机即不再运转。所以在每走一步后,程序必须延时一段时间。
4.步进电机电路原理如下图通过对凌阳十六位单片机的编程控制I0A 口的输出通过驱动电路实现对步进电机的控制。改变输出脉冲的频率可以改变步进电机的转速,通过控制发送脉冲的个数实现位置的精确定位。
图2-1 步进电机电路
本实验中我们通过中断控制使得步进电机下一运行状态和上一状态相反,比较容易的实现了电机的正反转。
部分程序:
void IRQ3(void)__attribute__((ISR)); void IRQ3(void) {
i=*P_IOA_Data;
if(*P_INT_Ctrl&0x0100) *P_IOA_Data=(i^=0x0002); *P_INT_Clear=0x0100;
}
五、实验步骤
根据步进电机电路接线,在使用步进电机驱动模块之前仔细阅读使用手册以防止接线不当烧毁驱动器。
在PC 机上调试程序确定无误后下载到单片机中驱动步进电机运行。 #include"SPCE061A.h" main()
{unsigned int i,j; *P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff; *P_IOA_Data=0x0001;
*P_IOB_Dir=0x0000;//上拉电阻 *P_IOB_Attrib=0x0300; *P_IOB_Data=0x000c; *P_INT_Ctrl=0x0300; asm("INT IRQ"); while(1) {
i=*P_IOA_Data; j=100;
while(j--);
*P_IOA_Data=(i^=0x0001); *P_Watchdog_Clear=0x0001;} }
unsigned int i;
void IRQ3(void)__attribute__((ISR)); void IRQ3(void) {
i=*P_IOA_Data;
if(*P_INT_Ctrl&0x0100) *P_IOA_Data=(i^=0x0002); *P_INT_Clear=0x0100; } 六.拓展
修改程序重新下载实现位置的精确控制。
程序流程图:
直流电机测速与控制
一、实验目的
通过凌阳十六位单片机控制直流电机的驱动实验掌握芯片L298N 的使用,以及通过通过软件编程改变输出波形的占空比实现直流电机的调速,增强我们的动手能力,为以后的大模块设计打下基础。 二、实验内容
根据老师提供以及我们自己搜索的直流电机驱动、测速电路的资料通过使用单片机驱动直流电机,测量直流电机的转速,控制直流电机稳定运行在要求的某一范围内。 三、实验要求
按实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明
使用栅格圆盘和光电门组成测速系统。当直流电机通过传动部分带动栅格圆盘旋转时,测速光电门获得一系列脉冲信号。这些脉冲信号通过单片机两个定时/计数器配合使用,一个计数,一个定时。计算出单位时间内的脉冲数m ,经过单位换算,就可以算得直流电机旋转的速度。
直流电机转速计算公式:n=60·m/(N1·T ·N)(rpm)
其中:n 为直流电机转速,N 为栅格数,N1为T0中断次数,m 为计数器T1在规定时间内测得的脉冲数,T 为定时器T0定时器溢出时间。
使用外接显示电路,可把电机的转速显示出来
电机测速模型如下,将栅格圆盘变化通过光电发射器和接收器以及外围转换电路的作用送给单片机通过数学运算得到单片的的转速。
具体测速模型如下
直流电机转速调节:
某些场合往往要求直流电机的转速在一定范围内可调节,例如,电车、机床等,调节范围根据负载的要求而定。调速可以有三种方法:(1)改变电机两端电压;(2)改变磁通;(3)在电枢回路中,串联调节电阻。本实验采用第一种方法:通过改变施加于电机两端的电压大小达到调节直流电机转速的目的。 部分操作程序 while(1) }
void IRQ3(void)__attribute__((ISR)); void IRQ3(void)
{if(*P_INT_Ctrl&0x0100)
{while(*P_IOB_Data^0x000c) //高速 { }
else if(*P_INT_Ctrl&0x0200)
{while(*P_IOB_Data^0x000c) //低速 { } }
修改P_TimerB_Ctrl与P_TimerA_Ctrl配合实现正转反转,程序类似,不加赘述。
五、实验步骤
1) 连接电路如图,
2)启动PC 机,打开unSP IDE 2.0.02软件,加载程序,编译,下载,运行。
3)通过程序控制直流电机旋转, 实现软件调速,通过数码管显示电机转速。
*P_TimerA_Ctrl=0x0070; //1/16 *P_Watchdog_Clear=0x0001;}
*P_TimerA_Ctrl=0x03b0; //14/16 *P_Watchdog_Clear=0x0001;}
{
*P_TimerA_Ctrl=0x0230; //8/16
*P_Watchdog_Clear=0x0001;} //中速
*P_INT_Clear=0x0100;
*P_INT_Clear=0x0200;
电路接线图 附录: 操作程序:
#include"SPCE061A.h" main() {
*P_IOA_Attrib=0xffff;
*P_IOB_Dir=0x0300;
*P_IOA_Data=0x0003;
*P_IOB_Attrib=0x0300; *P_IOB_Data=0x000c; *P_INT_Ctrl=0x0300; }
void IRQ3(void)__attribute__((ISR)); void IRQ3(void)
{if(*P_INT_Ctrl&0x0100)
asm("INT IRQ");
{
*P_TimerA_Ctrl=0x0230; //8/16
*P_Watchdog_Clear=0x0001;} //中速
*P_IOA_Dir=0xffff;
while(1)
{while(*P_IOB_Data^0x000c) //高速 { }
else if(*P_INT_Ctrl&0x0200)
{while(*P_IOB_Data^0x000c) //低速 { } }
*P_TimerA_Ctrl=0x0070; //1/16 *P_Watchdog_Clear=0x0001;}
*P_TimerA_Ctrl=0x03b0; //14/16 *P_Watchdog_Clear=0x0001;}
*P_INT_Clear=0x0100;
*P_INT_Clear=0x0200;
电路图
:
步进电机控制实验
一、实验目的
步进电机作为一种数字控制电机,可以准确的控制角度和距离应用非常广泛,本实验利用SPCE061A 单片机通过自己编写程序实现步进电机的控制使我们加深对步进电机的了解,同时学会使用步进电机的驱动芯片WZM-2H042M 。另外要求我们掌握单片机控制步进电机的硬件接口电路,以及熟悉步进电机的工作特性。 二、实验内容
根据步进电机驱动电路,使用单片机驱动步进电机,控制步进电机正转、反转操作。 三、实验要求
按实验内容编写程序,并在实验仪上调试和验证。 四、实验说明
1.步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。若每旋转一圈以20个励磁信号来计算,则每个励磁信号前进18度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。
2.步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。图为步进电动机的控制等效电路,适应控制A 、B 、/A、/B的励磁信号,即可控制步进电动机的转动。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,即可步进电动机连续转动。
a .1相励磁法:在每一瞬间只有一个线圈导通。消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走18度。若欲以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
b .2相励磁法:在每一瞬间会有二个线圈同时导通。因其转矩大,振动小,故为目前使用最多的励磁方式,每送一励磁信号可走18度。若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
c .1-2相励磁法:为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走9度,故亦广泛被采用。若以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。
3.电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至其极限时,步进电动机即不再运转。所以在每走一步后,程序必须延时一段时间。
4.步进电机电路原理如下图通过对凌阳十六位单片机的编程控制I0A 口的输出通过驱动电路实现对步进电机的控制。改变输出脉冲的频率可以改变步进电机的转速,通过控制发送脉冲的个数实现位置的精确定位。
图2-1 步进电机电路
本实验中我们通过中断控制使得步进电机下一运行状态和上一状态相反,比较容易的实现了电机的正反转。
部分程序:
void IRQ3(void)__attribute__((ISR)); void IRQ3(void) {
i=*P_IOA_Data;
if(*P_INT_Ctrl&0x0100) *P_IOA_Data=(i^=0x0002); *P_INT_Clear=0x0100;
}
五、实验步骤
根据步进电机电路接线,在使用步进电机驱动模块之前仔细阅读使用手册以防止接线不当烧毁驱动器。
在PC 机上调试程序确定无误后下载到单片机中驱动步进电机运行。 #include"SPCE061A.h" main()
{unsigned int i,j; *P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff; *P_IOA_Data=0x0001;
*P_IOB_Dir=0x0000;//上拉电阻 *P_IOB_Attrib=0x0300; *P_IOB_Data=0x000c; *P_INT_Ctrl=0x0300; asm("INT IRQ"); while(1) {
i=*P_IOA_Data; j=100;
while(j--);
*P_IOA_Data=(i^=0x0001); *P_Watchdog_Clear=0x0001;} }
unsigned int i;
void IRQ3(void)__attribute__((ISR)); void IRQ3(void) {
i=*P_IOA_Data;
if(*P_INT_Ctrl&0x0100) *P_IOA_Data=(i^=0x0002); *P_INT_Clear=0x0100; } 六.拓展
修改程序重新下载实现位置的精确控制。
程序流程图:
直流电机测速与控制
一、实验目的
通过凌阳十六位单片机控制直流电机的驱动实验掌握芯片L298N 的使用,以及通过通过软件编程改变输出波形的占空比实现直流电机的调速,增强我们的动手能力,为以后的大模块设计打下基础。 二、实验内容
根据老师提供以及我们自己搜索的直流电机驱动、测速电路的资料通过使用单片机驱动直流电机,测量直流电机的转速,控制直流电机稳定运行在要求的某一范围内。 三、实验要求
按实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明
使用栅格圆盘和光电门组成测速系统。当直流电机通过传动部分带动栅格圆盘旋转时,测速光电门获得一系列脉冲信号。这些脉冲信号通过单片机两个定时/计数器配合使用,一个计数,一个定时。计算出单位时间内的脉冲数m ,经过单位换算,就可以算得直流电机旋转的速度。
直流电机转速计算公式:n=60·m/(N1·T ·N)(rpm)
其中:n 为直流电机转速,N 为栅格数,N1为T0中断次数,m 为计数器T1在规定时间内测得的脉冲数,T 为定时器T0定时器溢出时间。
使用外接显示电路,可把电机的转速显示出来
电机测速模型如下,将栅格圆盘变化通过光电发射器和接收器以及外围转换电路的作用送给单片机通过数学运算得到单片的的转速。
具体测速模型如下
直流电机转速调节:
某些场合往往要求直流电机的转速在一定范围内可调节,例如,电车、机床等,调节范围根据负载的要求而定。调速可以有三种方法:(1)改变电机两端电压;(2)改变磁通;(3)在电枢回路中,串联调节电阻。本实验采用第一种方法:通过改变施加于电机两端的电压大小达到调节直流电机转速的目的。 部分操作程序 while(1) }
void IRQ3(void)__attribute__((ISR)); void IRQ3(void)
{if(*P_INT_Ctrl&0x0100)
{while(*P_IOB_Data^0x000c) //高速 { }
else if(*P_INT_Ctrl&0x0200)
{while(*P_IOB_Data^0x000c) //低速 { } }
修改P_TimerB_Ctrl与P_TimerA_Ctrl配合实现正转反转,程序类似,不加赘述。
五、实验步骤
1) 连接电路如图,
2)启动PC 机,打开unSP IDE 2.0.02软件,加载程序,编译,下载,运行。
3)通过程序控制直流电机旋转, 实现软件调速,通过数码管显示电机转速。
*P_TimerA_Ctrl=0x0070; //1/16 *P_Watchdog_Clear=0x0001;}
*P_TimerA_Ctrl=0x03b0; //14/16 *P_Watchdog_Clear=0x0001;}
{
*P_TimerA_Ctrl=0x0230; //8/16
*P_Watchdog_Clear=0x0001;} //中速
*P_INT_Clear=0x0100;
*P_INT_Clear=0x0200;
电路接线图 附录: 操作程序:
#include"SPCE061A.h" main() {
*P_IOA_Attrib=0xffff;
*P_IOB_Dir=0x0300;
*P_IOA_Data=0x0003;
*P_IOB_Attrib=0x0300; *P_IOB_Data=0x000c; *P_INT_Ctrl=0x0300; }
void IRQ3(void)__attribute__((ISR)); void IRQ3(void)
{if(*P_INT_Ctrl&0x0100)
asm("INT IRQ");
{
*P_TimerA_Ctrl=0x0230; //8/16
*P_Watchdog_Clear=0x0001;} //中速
*P_IOA_Dir=0xffff;
while(1)
{while(*P_IOB_Data^0x000c) //高速 { }
else if(*P_INT_Ctrl&0x0200)
{while(*P_IOB_Data^0x000c) //低速 { } }
*P_TimerA_Ctrl=0x0070; //1/16 *P_Watchdog_Clear=0x0001;}
*P_TimerA_Ctrl=0x03b0; //14/16 *P_Watchdog_Clear=0x0001;}
*P_INT_Clear=0x0100;
*P_INT_Clear=0x0200;
电路图
: