直流电机的速度控制

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

EDA课程设计报告
直流电机的PWM调速
一、概述
直流电动机具有优良的调速特性,调速平滑、方便,调速范围广;过载能力大,能承受频繁的冲击负载,可实现频繁的快速起动、制动和反转;能满足生产过程自动化系统各种不同的特殊运行要求。

电动机调速系统采用微机实现数字化控制,是电气传动发展的主要方向之一。

采用微机控制后,整个调速系统实现全数字化,结构简单,可靠性高,操作维护方便,电动机稳态运转时转速精度可达到较高水平,静动态各项指标均能较好地满足工业生产中高性能电气传动的要求。

由于CPLD/FPGA性能优越,具有较佳的性能价格比,所以在工业过程及设备控制中得到日益广泛的应用。

PWM 调速系统与可控整流式调速系统相比有下列优点:由于PWM 调速系统的
开关频率较高,仅靠电枢电感的滤波作用就可获得平稳的直流电流,低速特性好;同样,由于开关频率高,快速响应特性好,动态抗干扰能力强,可以获得很宽的频带;开关器件只工作在开关状态,主电路损耗小,装置效率高。

二、PWM调速的原理
图(1)
图(1)是全桥型的电机驱动电路,利用的是三极管的电流放大来驱动电机。

从图上我们可以看到当Q4和Q3导通时,电机正转;当Q1和Q2导通时,电机反转。

设电机速度从静止开始加速,如图(2)所示,首先Q3,Q4必须维持导通一段时间,此时电机所承受的电压约为供电电压
U,称之为强加速。

待速度接近目标速度时,加速可以减缓,此时Q3,Q4和Q1,Q2轮流导通,只是Q3,Q4在一个周期内所导通的时间t
on
比Q1,Q2导通的时间
t off 长一些,在此称为弱加速。

任何时刻,电机所承受的平均电压U
O
,表示为 U
O
= U×(t
on -t
off
)( t
on
+t
off
)。

如果速度已经达到目标,便可以调整t
off
和t
on
的时间
比例使之相等,此时平均电压为0,是定速控制。

由此可知,平均电压若为正值时,是加速控制;负值时是减速控制;为零时即达到匀速。

图(2)
三、程序的设计
在整个程序设计中,我们可以把他分成几个部分
1、PWM波形的产生
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PWM IS
PORT ( CLK : IN STD_LOGIC;
U_D ,D_D: IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END PWM;
ARCHITECTURE ONE OF PWM IS
SIGNAL CQI : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF U_D = '1'AND D_D = '0' THEN
IF CQI = 255 THEN CQI <= "11111111";
ELSE CQI <= CQI + 1;
END IF;
ELSIF U_D = '0'AND D_D = '1' THEN
IF CQI=0 THEN CQI <= "00000000";
ELSE CQI<= CQI-1;
END IF;
ELSE CQI <= CQI;
END IF;
END IF;
END PROCESS;
CQ <= CQI;
END PROCESS ;
END ONE;
上述程序中,一个PWM周期由256个时钟周期clk组成。

通过U_D和D_D来改变一个周期中PWM周期中高低电平的比值,即PWM输出信号的占空比。

驱动直流电机转动的是PWM电流的平均值,PWM输出信号的占空比变化,也就改变了直流电机的转速。

U_D表示增加占空比; D_D表示减少占空比。

下面四幅仿真图表示的是四种状态:
当U_D=1,D_D=0时CQ增加;
当U_D=0,D_D=1时CQ减少;
当U_D=1,D_D=1时CQ不变;
当U_D=0,D_D=0时CQ不变;
程序的仿真图为:
图(3)
图(4)
图(5)
图(6)2、7段译码器程序
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DECL7S IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF DECL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A IS
WHEN "0000" => LED7S <= "0111111" ;
WHEN "0001" => LED7S <= "0000110" ;
WHEN "0010" => LED7S <= "1011011" ;
WHEN "0011" => LED7S <= "1001111" ;
WHEN "0100" => LED7S <= "1100110" ;
WHEN "0101" => LED7S <= "1101101" ;
WHEN "0110" => LED7S <= "1111101" ;
WHEN "0111" => LED7S <= "0000111" ;
WHEN "1000" => LED7S <= "1111111" ;
WHEN "1001" => LED7S <= "1101111" ;
WHEN "1010" => LED7S <= "1110111" ;
WHEN "1011" => LED7S <= "1111100" ;
WHEN "1100" => LED7S <= "0111001" ;
WHEN "1101" => LED7S <= "1011110" ;
WHEN "1110" => LED7S <= "1111001" ;
WHEN "1111" => LED7S <= "1110001" ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
这个程序是7段数码管的显示程序,改程序中没有考虑数码管的小数点(h 段)。

如果需要添加段h,则程序中LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)的(6 DOWNTO 0)改为(7 DOWNTO 0)。

四、体会
这次的课程设计是当做期末考试来算的,所以从一开始选题的时候就开始比较重视,是做交通灯,流水灯还是汽车尾灯这些比较经典的设计呢?还是作别的?我自己一开始也很矛盾。

后来考虑到自己最近在做电机的驱动方面的东西,所以想想可不可以用VHDL来实现。

所以就选择了这个题目。

选择了这个题目后,一开始信心还是满足的。

因为对于一些硬件的电路我还是比较熟悉的。

可是后来发现问题还是蛮多的,有些问题到现在还不知道怎么解决,所以这次的课程设计也许就不是很完美了。

在我一开始的预想中,打算使用PWM来驱动电机,然后用光电编码电路来测出实时的速度,通过反馈来调节PWM 控制电机。

对于这个思路,我是比较有信心的,因为在单片机上我实践过很多次了。

但是在实际的操作过程中,由于本身对于VHDL语言的不熟悉,有些在C 语言中的编程方法不知道怎么运用到VHDL语言中去。

还有一个比较大的问题是,我不知道如何在MAXPLUS中检测电机的实时速度,考虑到可以通过给定值,但是这个速度又是通过电机来实时改变的,所以在这个问题上也有些迷茫。

如果说通过给定一个实时速度,通过PWM的改变来使得电机的转速改变达到目标值,我个人认为也就失去了连续性,也就失去了闭环的作用,而且该场景完全可以通过手动的控制PWM的值来模拟。

鉴于上面的一些问题,也考虑到时间的问题,所以我没有把速度闭环,通过手动的调节占空比来调节电机的速度。

对于这个方案,自己也觉得比较简单,但是我也认为本次的课程设计没有结束,对于我一开始的思路,我也一直在想办法努力去实现。

对于通过手动调节占空比的程序,原型来自于书本上的一个示例程序,但是基本上把主程序给改了,对于原程序中的功能实现有了很大的改变。

首先是在分级上,我选了256级得,其次是在原程序中通过U_D的两个状态来实现占空比的增大和减少,这种方法在实际操作中会使得电机的占空比一直在改变。

所以我改进了程序,加入了一个D_D的按钮,通过与U_D组合形成四个状态,完全能够满足电机运行的几种状态。

对于译码程序,如果硬件电路中含有译码器的话就完全没有必要了,直接映射过去就可以了,如果没有的话,加入译码程序就可以在数码管上显示。

最后能做完这次设计,我觉得还是比较的不错,虽然有些预想的功能没有实现,但是没办法,我确实是努力了!当然也许这过程只有自己清楚,但是只要对得住自己的心就好了,我觉得最重要的并不是这最后的结果,只有这其中的过程才是最后重要的,我学会怎么样去探索,去求知,去解决实际问题,这都比最后的结果重要!
.。

相关文档
最新文档