P3MP4M P5MP6M VCCRP11223344551KU3MABCD12345678IN1IN2IN3IN4IN5IN6IN7GNDOUT1OUT2OUT3OUT4OUT5OUT6OUT7COM16151413121110VCC9ABCDSASBSCSD20*4MOTO-S123M45VCCULN2003
实验程序
#INCLUDE
#DEFINE UCHAR UNSIGNED CHAR #DEFINE UINT UNSIGNED INT
VOID DELAY(UINT A);
CONST UCHAR STEP_TABLE1[]={0X01,0X02,0X04,0X08};// SBIT ZHENGZHUANG=P2^0; SBIT FANZHUANG=P2^1; SBIT STOP=P2^2;
VOID DELAY(UINT A) {
UINT I,J; FOR(I=A;I>0;I--) FOR(J=122;J>0;J--); }
VOID MAIN() {
UCHAR I,FLAG0;
WHILE(1) {
ZHENGZHUANG=1; FANZHUANG=1; STOP=1; FLAG0=0;
IF((!ZHENGZHUANG)&&(FANZHUANG)&&(STOP)) FLAG0=1; IF((ZHENGZHUANG)&&(!FANZHUANG)&&(STOP)) FLAG0=2;
6
IF(!STOP) FLAG0=3; IF(FLAG0!=0) {
FOR(I=0;I<4;I++)
{ IF(FLAG0==1)
P1=STEP_TABLE1[I]; IF(FLAG0==2)
P1=STEP_TABLE1[3-I]; IF(FLAG0==3) P1=0; P1=~P1; DELAY(100);
} } } }
五 实验心得体会
本次实验成功的实现了步进电机的正反转控制,对仿真软件以及51单片机编译软件能更加熟练地运用,试验中,了解了步进电机的基本原理,掌握控制步进电机转动的编程方法。对试验台中外部电路也有了进一步的人是和了解,了解了单片机控制外部设备的常用电路。
实验六 直流电机控制实验串行静态显示实验
一、实验目的
1.了解脉宽调制(PWM)的原理 2.学习用PWM输出模拟量驱动直流电机 3.熟悉51系列单片机的延时程序
二、实验说明
1. 输入给定程序,配置选项,调试并运行程序,观察程序控制下仿真器输
出的变化。
2.
选中此项keil为硬件仿真
3. 设置Port 串口:一般为COM3,Baudrate 波特率为最大值:115200bit/s, 最后确认 4. PWM是单片机上常用的模拟量输出方法,用占空比不同的脉冲驱动直流
电机转动,从而得到不同的转速。程序中通过调整输出脉冲的占空比来调节直流电机的转速。使用光电测速元件测速,当它与圆盘上的空位相靠近时,光电元件输出低电平,当它被遮住时,光电元件输出高电平。圆盘转动一周时则产生12个脉冲,直流电机转动时,光电元件输出连续的脉冲信号,单片机记录其脉冲信号,就可以测出直流电机的转速。另外增加显示电路,可把电机的转速显示出来。
5. 用C51进行程序设计,选择汇编或者C语言编程均可,要求程序结构清
晰,模块化结构,反复调用部分做成子模块,有必要的注释。编写程序上机调试通过,实验报告要求提交程序流程图及源程序。
6. 顺便说一下:易念恩老师处有大量关于各种单片机的资料(8G以上),
如果确实有兴趣在这方面发展可以带上USB3.0的U盘或者移动硬盘(USB2.0拷贝太慢)找易老师拷贝资料。
三、实验内容及步骤(完成分值:60分/单个程序)
本实验需要用到本实验需要用到单片机最小应用系统(F1区)、串行静态显示(I3区)和直流电机驱动模块(M1区 )。
1. 单片机最小应用系统的P1.7接直流电机驱动模块的PWM输入口Control,
最小系统的INTO接直流电机驱动模块 PULSEOUT,最小系统的P1.0、P1.1接串行静态显示的DIN、CLK。打开相关模块电源。
2. 用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机锁
紧插座中,请注意仿真器的方向:缺口朝上。请指导老师检查接线后再打开模块电源。打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误。全速运行程序。 3. 观察直流电机转速,一段时间后控制在程序设定的值30转/S的左右。
四、电路原理图 1 2 +DC-MOTOR ULN2003DC-MotorA 116IN1OUT1215 IN2OUT2-314IN3OUT3Control413 IN4OUT4512IN5OUT5 611IN6OUT6710 IN7OUT7 89GNDCOMVCC VCCVCC R1MR2MR3M 4.7K330220Q1M
14AEVCC RUN74LS1423 KC141VCC1A 光电门1326A1Y123 6Y2APulseOut1145A2Y105 5Y3A964A3Y 874YGND
实验程序 #include
typedef unsigned char uchar; typedef unsigned int uint; sbit PWM_out=P1^7; sbit mRun=P2^0; sbit Din=P1^0;// sbit CLK=P1^1;//
uint period=300; uint time=0; uint PWM_h=100; uint count=0; uint speed=0; uint dat_t=0; uchar dispflag=0;
uchar data disdata[8]; unsigned char code LED_Map[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0,0x40 };//0-F , ,-
21VCCJ1M
void delay(int count) {
unsigned int i;
for(i=0;i uchar LED_code[8]; uchar i,j,chr,sel; /////////////// for(i=0;i<8;i++) LED_code[i]=LED_Map[disdata[i]]; // LED_code[i]=0x3f; for(i=0;i<8;i++) { chr= LED_code[i]; // if(i==1) chr= chr|0x80; sel=0x80; for(j=0;j<8;j++) { Din=chr&sel; CLK=0; sel=sel>>1; delay(1); CLK=1; delay(1); } } } void speed_disp()//速度显示 { // speed=123; disdata[0]=speed/100;//取10位 disdata[1]=speed0/10;//取个位 disdata[2]=speed;//取个位 disdata[3]=16; disdata[4]=16; disdata[5]=16; disdata[6]=16;