一:项目名称
直流电机调速控制
二:项目内容和要求
内容:
根据给定的直流电机,试设计、制作一个PWM调速可逆驱动控制电路,能在0V、5V的方向控制电压和0——5V的转速控制电压的作用下,使电机正转、反转、加速、减速。电路形式不限。 要求:
画出电路的系统框图,说明电路方案设计的思路、理由或依据; 分单元画出各单元具体的电路图,阐述电路的工作原理,介绍电路中主要元器件的作用及其参数的确定原则或依据;
画出完整的电气原理图,介绍整体电路的工作原理;
如果采用了单片机,给出单片机程序的流程图和清单,说明程序的工作原理。
制作实物电路,验证设计、制作是否正确。
三:题目分析及设计思路
脉宽调制PWM是通过控制固定电压的直流电源开关频率,改变负载两端电压的有效值,从而达到控制要求的一种电压调整方法,可利用微处理器的数字输出来对模拟电路进行控制。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来控制电动机的转速。 电动机实现正反转,可以通过调换电源的正负极和励磁电源正负极,对于永磁直流电动机,只能调换电源正负极。我们可以单片机的某个I/O口输出扫地电平,再通过外围电路,驱动电机,实现电机正反转。
四:方案设计说明
1:电路分析
数码管显示电路
AD转换电路
整体电路
电路由AD转换芯片采集电压量后,转换为数字信号,由单片机进行处理,转变成占空比不同的PWM信号,经单片机I/O口P2.1,P2.1输出,由外围电路对电机进行驱动控制。按照程序控制目的来对电机进行控制。
五:完整电路分析
1:AD转换分析
AD转化使用的adc0804,这个芯片能把模拟的电压量装换为数字的电压信号,提供给单片机使用需要值得注意的是,在进行模拟信号和数字信号的转换的时候需要时间,应在程序中给足够的时间来完成转换。且连线上芯片的Wr需要一个由低电平变高电平的脉冲信号才能启动转换数据,而Cs为低电平时才能启动转换。 2:数码管显示
在数码管显示部分,由于便于使用开发板,就按开发板上利用锁存器的方法来接,这样一来节约了一组A/O口。需要注意的是P2.6连接数码管的段选信号P2.7,连接数码管的位选信号。 3:按键与PWM输出
PWM输出使用了P2.1和P2.2口,在正转的时候,P2.1输出PWM信号,P2.2输出低电平(模拟接地),反转的时候又是由P2.2输出PWM信号,P2.1输出低电平(模拟接地)。
程序中使用的是中断的方式来切换转向,所以使用了P3.4口来开中断。 4:程序
电路整体框架图 程序如下:
//控制口定义////////////////////// #include #define uchar unsigned char #define uint unsigned int #define ad0_7 P1 sbit cs=P0^7; sbit rd=P3^7; sbit wr=P3^6; sbit zheng=P2^1; sbit fan=P2^2; sbit dula=P2^6; sbit wela=P2^7; sbit gg=P3^4; uint i; uchar a,A1,A2,A3,A6,adval,di_num,flag,gao_num; uchar led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //5ms延时子程序///////////////// void delay(uint i) { uint j; for(;i>0;i--) for(j=0;j<50;j++); } //启动AD转换子程序 ////////////////////////////////////////////////////////// void start_ad(void) { wela=1; cs=0; wr=0;_nop_();wr=1; cs=1; } //读A/D数据子程序/////////////////////////////////////// read_ad() { uint ad_data; ad0_7=0xff; wela=1; cs=0; rd=0; _nop_(); ad_data=ad0_7; adval=ad0_7; wela=1; rd=1;cs=1; return(ad_data); } //数据处理与显示子程序////////////////////////////////////// void data_shout(uint ad_data) { uint a=50,w1,w2,,m; w1=gao_num/10; w2=gao_num%10; m=A6; { dula=0; P0 = led[w2]; dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); dula=0; P0 = led[w1]; dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0 = led[m]; dula=1; dula=0; wela=0; P0=0x5f; wela=1; wela=0; } } void main(void) { gg=0; wela=1; P0=0x7f; wela=0; EA=EX1=1; IT1=1; flag=0; di_num=15; zheng=fan=0; while(1) { start_ad(); gao_num=adval/10; di_num=25-gao_num; if(flag==0) { fan=0;A6=0; if(di_num!=0) { for(i=0;i for(i=0;i } else { zheng=0;A6=1; if(di_num!=0) { for(i=0;i for(i=0;i } } } void duan0() interrupt 2 { EA = 0; flag=~flag; EA = 1; } 六:制作与调试 在制作过程中,用protel将电路的仿真图画好后开始进行程序的编写,经过多次的修改与调试,仿真能达到预期的效果后,开始接线调试。接线完成后发现电机不能按照预期的结果运行,达不到控制效果。最后在老师的指导下采用示波器观察输出的PWM信号。后经思考与分析,在单片机的外围电路中没有加入驱动电机的电路,后来在老师的指导下加入由NEE555构成的电机的驱动电路H桥,成功实现对电机的驱动与控制。 七:心得体会 在此次运动控制的实训中,我学会了利用AD转换器对模拟信号与数字信号的转换。在此次项目实践中,值得注意的是,调节PWM的占空比无法达到对电机的运转速度的控制。分析原因后发现,由于PWM信号产生的时间较短,而在高速运转的电机上。肉眼无法观察到电机的变化,因此需要通过修改程序中PWM产生的时间来更好的观察电机的辩护。 在老师的知道下,多次的调试与修改之后中最终达到了实训目的。从中我懂得了小细节造成大错误,因此学会了认真的对待每一个细节。反复的实践才能得到更完善的结果。 因篇幅问题不能全部显示,请点此查看更多更全内容