FPGA使用pwm波控制电机附带检测转速
1.基础部分:
任务要求:
a.速度调节:设计输入电路,实现电机转数设定(10进制显示)。
b.通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。
任务解析:
对于输入电路,可以应用数字键盘实现十进制数的数据输入,并通过比较器,让输入的数据和锯齿波产生模块产生的数据进行比较,进而产生pwm波来控制直流电机旋转。
对于输出电路,由于额定转速是2520,进而只需要8位数码管即可完成显示任务,可以采用先位选再段选的动态扫描显示电路。
2.发挥部分:
任务要求:
a.设计“去抖动”电路,实现直流电机转速的精确测量。
b.实现直流电机的闭环控制,电机转数设定值与实时值误差<2%。
任务解析:
1、由于电机外部问题,轮脉冲信号可能存在抖动,因此加入计数延时器滤除42HZ以上的杂波信号,完成消抖。
2、采用开关控制闭环设计,根据设定与读取信号的差值修改PWM波占空比达到修改转速效果,实测误差约为2%。
3.系统原理框图
图1.1
(一)通过问题论证方案
1.直流电机空载额定转数为多少?控制字需要多少位?如何计算?
答:额定转数2520转/分,系统误差需在2%以内,因此需要6位二进制,保证每步小于2%
2. PWM波如何产生?设计方法?
答:通过将锯齿波和输入数据进行比较产生高低电平组成PWM波,如果输入数据>锯齿波数据,就产生高电平,如果输入数据<=锯齿波数据,就产生低电平
3. PWM波载波(锯齿波)如何产生?频率为多少?位宽为多少?设计依据?
答:锯齿波通过计数器实现,频率不宜过高或过低,经过测试,选择输出锯齿波频率为800HZ,输入频率为200KHZ,产生0到256的锯齿波,因此位宽为8位,
4.频率计的组成?原理?
答:本次课设使用测周法计算,原理为以5KHZ信号位基准时钟计算每个轮脉冲获得的基准信号个数N,电机频率为5000x60/N。
5.频率计输出多少位比较合适?
答:由于输出圈数最大为额定转数,所以输出12位即可。 6.为什么要在电机转数采集后加去抖动电路?去抖原理?
答:由于电机转动不平等原因,霍尔元件可能接触不良,导致出现抖动信号使得测量不准。原理为采用延迟系统滤除高于42HZ的杂波信号,只有当信号高电平持续时间在参考时间以上才输出信号,并以该信号的下降沿作为分频依据,去除延迟导致的信号缺失。
7.如何选择去抖动电路的参考频率?
答:80HZ,因为额定转速为2520转/分,即42HZ,需要滤除高于42HZ的杂波信号,但过于接近可能使需要的信号被滤除,所以采用二倍参考频率。
8.如何控制电机实际转数和预置转数之间的误差?闭环控制原理?
答:测试发现开环系统时电机与PWM波占空比之间关系非线性,因此将数据分为多个接近线性的区间,在不同区间内选择不同的算法达到输出所需信号,实测空载时误差50转/秒,达到要求。
闭环控制采用计算预设和实际转数的差值,改变增加或减少输出占空比的差值,使实际转数能接近预设转数,实测空载误差为30转/秒,达到要求。
(二)通过比较论证方案
方案一:采用开环控制系统预先制定好ROM文件,在获取设定转速时输出预设好的占空比,达到控制效果。
方案二:采用闭环控制系统,实时测量电机转动速度,通过算法比较设定转速和实际转速的差距,从而实时调节电机转速以达到目标转速。
方案一优点为:能够快速到达要求转速,但缺点较为明显:电机空载和负载状态所需占空比不同,仅能在空载的特定电机下使用。
方案二优点为:不论电机空载或者使用不同参数直流电机系统依旧能够生效,但缺点为:由于电机两端调节为非线性,可能出现高低转速时调节时间过长或出现超调难以恢复。
最终实验同时采用两种实现方法,使用开关控制系统切换。
三、 各个模块设计
(一)矩阵键盘模块
1.封装及I/O口
图3.1.1
2.结论说明
内置5KHZ分频模块,以及延迟5ms消抖模块,使用状态机进行扫描键盘,当首先拉高四行电平,通过状态检测,直到发现有一行电平被拉低,进入消抖模块,延时5ms后仍为低电平则输出高电平Key_State表示按键按下,同时检测列电平,找到按下的按键通过Key_Value输出到FDAU四位数运算模块。因需要使用硬件输入,未进行仿真波形,具体在硬件显示体现。
(二)FDAU四位数运算模块
1.封装及I/O口
图3.2.1
2.核心代码设计
图3.2.2
3.仿真结果演示
图3.2.3
4.结论说明
Data获取到矩阵键盘传输的数据,同时Clk获取键盘已经被按下的状态,在Clk上升沿进行运算。将先输入的数据向右移位,当获得已经获得四位数时截取百位到个位乘十然后加入新的数以实现一直有四位数据。
(三)FBS 十进制转BCD码模块
1.封装及I/O口
图3.3.1
2.核心代码设计
图3.3.2
3.仿真结果演示
图3.3.3
4.结论说明
NData获取四位十进制数当NData改变时运算,将各位数据分解给到P1-4,使得四位十进制转换成4个4位BCD码,方便数码管输出。
(四)DCD_138显示模块
1.封装及I/O口
图3.4.1
2.核心代码设计
图3.4.2
4.结论说明
本模块内置1KHZ分频,通过8个4位BCD码获取8位数码管输出,因为人眼的残影效果,无需过高频率即可得到同时显示的效果。因主要由硬件测试,本模块未进行波形仿真。
(五)XD消抖模块
1.封装及I/O口
图3.5.1
2.核心代码设计
图3.5.2
3.仿真结果演示
图3.5.3
4.结论说明
因电机旋转可能出现不平,可能轮脉冲会出现抖动情况,因电机满功率运行时为2520转每分,即42HZ,所以选用80HZ信号消除高于80HZ信号的杂波信号,(理论可使用更低信号,因已经满足实验要求,未调试)并通过轮脉冲下降沿分频,使得获得的频率不会因为消抖而缺失。
(六)COUNT频率计模块
1.封装及I/O口
图3.6.1
2.核心代码设计
图3.6.2
3.仿真结果演示
图3.6.3
4.结论说明
内置分频5KHZ,通过计算每个轮脉冲时间内通过的基准5KHZ信号计算具体轮脉冲信号频率,计算公式:Fs=5000x60/n,由于前个模块有分频作用,具体数值需要除2。
(七)CAL计算模块
1.封装及I/O口
图3.7.1
2.核心代码设计
图3.7.2 (上为开环设计,下为闭环设计)
3.结论说明
闭环系统通过比较输入数据及预设数据,若差值过大则增大输出差值,过小则减少,以达到转速要求。由于电机需要时间改变转速,因此检测频率不宜过高,所以在时钟信号前加入两个分频模块,使模块可以2s检测一次,实测闭环系统达到预设值的速度较慢,可通过PID算法和修改检测频率改善,误差在30转以内,符合设计要求。
本模块需电机配合输出,因此未进行仿真,具体效果由硬件显示。
(八)PWM波产生模块
1.封装及I/O口
图3.8.1
2.核心代码设计
图3.8.2
3.仿真结果演示
图3.8.3
4.结论说明
采用256级即8位二进制选择占空比,经过测量精度可达到实验要求。因为过高或过低的频率可能使设计控制效果过差,最终通过实测数据选用800HZ PWM信号可以满足实际要求。通过UPP获得的占空比信号,模块内部加法器不断累加,当数值小于占空比信号时输出高电平,数值高于占空比信号时输出低电平。
1.额定转速的测量
图4.1
从图中可以看出,额定转速位显示2500,接近2520,达到实验要求。
2.观测转数
图4.2
从图中可以看出,在输入预置转速位1700时,测量的实际转速位1648,满足实验要求。
3.演示闭环控制
图4.3.1
图4.3.2
图4-3-1刻意将实际转速跳大,用来检测闭环系统反馈是否可用,通过图4-3-2可以看出闭环控制系统工作良好,可以在预置转速位1700时,将实际转速缓慢的调控到1700左右,图中从(600→1700),基本满足设计要求。
4.测试性能概览
开环控制系统 | 闭环控制系统 | ||
设定转速 | 实际转速 | 设定转速 | 实际转速 |
2500 | 2459 | 600 | 583 |
1700 | 1768 | 1700 | 1709 |
600 | 643 | 2500 | 2500(较长时间) |
计算得到开环控制系统平均误差为56.6,闭环控制系统平均误差为8.6,满足实验误差要求
5.误差分析
开环系统中采用多个线性区间组合完成PWM波占空比输出,计算得到的占空比可能误差会大于闭环控制系统,且测量模块与实际转速也存在误差,尚待改进。
综上基本解决设计要求,但仍有很多问题未完善仍需改进。
1.遇到的问题:
1、闭环系统测试时间过长,需等待2秒进行一次检测,且未采用PID算法加权计算差值,导致采用闭环系统时电机响应时间较长。
2、矩阵键盘与电机PWM波接收模块接口过近,可能产生扰乱,实验时曾出现键盘无法使用的状况,加入键盘防抖后问题解决。
3、由于电机负载与未负载情况差距较大,且处于非线性的对应关系,开环系统不能很好达到所需转速,常常在两端误差较大。
4、闭环系统未考虑上下安全范围,出现数据过量或为负使系统状态紊乱,加入安全运算范围后问题解决。
2.心得体会:
通过本次实验深入了解了FPGA中verilog语言的设计思路以及电子系统设计的详细流程。在老师视频以及线下的指导下,在前人经验的基础上进行了独立的改进与重新编译,最终完成了全部实验要求。但是因为自身经验与知识储备的不足,具体系统实现仍然存在漏洞,且对于FPGA板的未深入了解,导致在实验过程中出现了很多棘手的问题,如:加入PWM波输出后键盘无法使用等……在经过长时间的调试与尝试后才解决,如果对于实验箱有足够的了解和认识相信这些问题不会耗去如此之多的时间。同时自主完成了答辩以及方案设计的每个步骤,对于明年即将来到的毕业答辩有了初步的认识,在老师的点拨下认识到自己所作的不足之处,相信在之后的答辩中能够不再犯本次实验所犯的错误。