基于单片机的直流电机测速装置研究与设计

摘要: 基于单片机的直流电机测速装置采用了对直流电机的中枢供电回路串联取样电阻的方式实现对电机转速的精确实时测量。系统由滤波电路、信号放大电路、单片机控制电路以及稳压电源等功能模块电路构成。工作过程中高频磁环作为载体,利用电磁感应的基本原理对直流电机转动时所产生的磁漏进行检测,最后通过调理电路对电信号进行检测,最终由单片机进行处理,实现对直流电机转速的精确测量。结论表明,该系统测速稳定、精确,具有重要的理论意义与实践应用价值。
关键词: 直流电机; 单片机; 测速; 装置; 装置

1 设计方案选择

1. 1 测速方案

对于电机的测速主要有以下两个方案,第一个就是采用一个固定的圆盘与电机实现机械连接,圆盘按照测速的精度均匀设置有多个通光槽,在圆盘的前后位置分别设置发光原件与受光原件,通过光电转换装置,可以一定周期时间的脉冲数目进行转速的测量; 第二个方案就是通过电机高速运行时,通过电机中枢与内部电刷接触产生的磁漏进行测量,通过电磁感应可以实现电磁信号的转换,通过信号调理电路送给单片机进行脉冲检测,最终实现测速。因为电磁感应的测速受外界干扰较小,同时具有较高的灵敏度,在测速方面具有一定的技术优势,所以采取了第二种测速方案。

1. 2 电机调速方案

电机的调速方案可以采用PWM 实现,同时也可以采用电压反馈控制的方式进行。采用PWM 方案需要在设计中采用专用的PWM 芯片以及驱动电路,这样的方式会增加测速电路的复杂度,同时也会增加设计成本,第二种方案采用LM2596 放大器的反馈输出对电流电机的电压进行控制从而实现对电机进行调速,本方案简单可行,可靠性强,设计中选用方案二。在系统选择方案的过程中,要从系统的稳定性与系统的成本进行综合考虑。PWM 是目前广泛采用的一种方式,具有测量精度高、测速较快等方面的显著优势,但是在高速测速领域PWM 的误差会引起整体测速的系统误差,因此在本系统中选择了电压测量的方案,电压测量方案的线性度较为良好,能够有效解决高速测速领域测量精度等方面的问题。同时采用的放大器能够将信号放大,有效提升测量的精确度。

2 系统设计与工作原理分析

2. 1 总体设计方案

基于单片机的直流电机测速系统主要包含单片机控制模块、电源模块、显示单元、测速模块以及信号调理模块等。信号调理模块主要是对测量的电磁信号进行滤波放大等处理,保证单片机能够实现有效检测。基于单片机的电机测速系统总体框图如图1 所示。


2. 2 工作原理分析

1) 信号处理电路。信号处理电路又称为调理电路,主要是对取样电阻上的电压信号进行处理,以满足单片机的输入要求。信号处理电路主要有滤波电路以及放大电路,滤波电路采用了巴特沃斯二阶低通滤波器对电压信号高频杂波进行滤除,同时采用基于运放的LM324 对信号实现放大。信号调理电路属于电路中中间环节,同时也对电路的工作效果起到了重要的作用。

2) 电源电路。由于本电路对于电源的稳定性要求较高,所以系统采用了DC - DC 稳压芯片进行电源供给,保证电路能够在精确稳定的电源支持下稳定工作。与传统的串联型稳压电源相比,DC - DC 稳压单元电路输出纹波系数小,THD 符合系统的工作要求。
3) 电机调速模块。在电路中通过取样电阻以及LM2596反馈电压进行电机电压的调整,最终可以实现对电机转速的精确有效调整,LM2596 反馈引脚的输出电压为1. 25 V,因此可以通过电位器实现对输出电压的改变。
4) 单片机测量与显示电路。单片机是整个系统的微控制单元,能够对调理电路的信号进行处理以及计算,最后通过液晶显示,显示电路的工作效果。系统中采用了STC12C5A60S2单片机能够适应高频信号的输入要求,本系统处理效率高,同时能够适应复杂的工作场所。在显示中本系统采用了LCD12864 模块对系统的工作状态进行实时显示。

3 系统调试

3. 1 调试要求

由于电磁感应出的电信号具有复杂的高频干扰成分,所以在设计中低通滤波器的性能就显得尤为重要,低通滤波器采用选频特性良好的巴特沃斯低通滤波器,通过对电容电阻值的选择进行上限与下限截止频率的选择。对于放大电路要采用两级放大的方案,保证能够对微弱信号实现有效放大,同时也不能因为放大倍数过大,尤其是前级放大器的放大倍数要控制在3 倍以内,高频感应线圈的稳定度要通过示波器多次观察进行选择确定。在调试过程中要求测速电路的测试精确度能够达到0. 5%,在控制系统中要选择高速单片机,系统中的单片机选型为STC12C5A60S2,通过高速脉冲读取实现对高频脉冲信号的实时测量。

3. 2 调试结果

首先使用专业的测速表( 计量专业部门提供) 对电机的转速进行测量,电机转速由600 转/min 逐渐提升为6 400 转/min,对其中的几个典型转速进行测量,并实现本测量方案与专业测速的对比,通过误差分析对本系统的性能进行分析。测试结果如表1 所示。

本系统之所以产生误差主要有以下几个方面的原因,首先就是取样电阻对于电机的运行产生了一定的影响。取样电阻的值过大对对电机的转速具有影响,电机会出现转速过低或者抖动等情况,但是电阻值过小则会引起采样电压较低,难以实现有效测量; 其次就是电磁转换的精度也对测量效果具有显著影响,线圈的匝数以及线圈的线径等都会对测量精度产生不利的影响; 最后就是信号处理电路中的噪声也会对测量产生影响。

4 结语

基于单片机的直流电机测试系统基于高速单片机进行设计,采用了对漏磁进行检测的方案对直流电机的转速进行测试。从测试结果分析,基于单片机的直流电机测速系统具有良好的工作性能,能够满足正常情况下对于电机进行测速的应用领域。系统测试精确度高,误差较小,同时产品的性价比较高,具有一定的工程推广价值。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是基于Keil C51编译器的51单片机直流电机测速显示数码管代码示例: ```c #include <reg52.h> // 定义端口 sbit INA = P1^0; // 正向旋转信号 sbit INB = P1^1; // 反向旋转信号 sbit SPEED_IN = P1^2; // 速度检测信号 sbit S1 = P2^0; // 数码管第一位 sbit S2 = P2^1; // 数码管第二位 sbit S3 = P2^2; // 数码管第三位 sbit S4 = P2^3; // 数码管第四位 // 定义延时函数 void Delay(unsigned int xms) { unsigned int i,j; for(i=xms;i>0;i--) for(j=112;j>0;j--); } // 显示函数 void Display(unsigned char num, unsigned char pos) { switch(pos) { case 1: S1=0,S2=1,S3=1,S4=1;break; case 2: S1=1,S2=0,S3=1,S4=1;break; case 3: S1=1,S2=1,S3=0,S4=1;break; case 4: S1=1,S2=1,S3=1,S4=0;break; } P0 = num; Delay(5); P0 = 0x00; } // 主函数 void main() { unsigned char speed = 0; // 速度计数值 unsigned int time = 0; // 计时器值 unsigned long count = 0; // 计数器值 unsigned char display_data[4] = {0, 0, 0, 0}; // 显示数据 unsigned char display_pos = 1; // 显示位置 TMOD = 0x01; // 定时器0工作在模式1 TH0 = 0x3C; // 定时器初值为0x3C TL0 = 0xB0; TR0 = 1; // 启动定时器0 while (1) { if (SPEED_IN == 0) // 速度检测信号为低电平 { count++; // 计数器加1 } if (time >= 200) // 计时器值达到200ms { TR0 = 0; // 停止定时器0 speed = count / 4; // 计算速度,每个脉冲代表4ms count = 0; // 计数器清零 time = 0; // 计时器清零 TR0 = 1; // 启动定时器0 } if (display_pos == 1) // 第一位显示速度的百位 { display_data[0] = speed / 100; } else if (display_pos == 2) // 第二位显示速度的十位 { display_data[1] = speed % 100 / 10; } else if (display_pos == 3) // 第三位显示速度的个位 { display_data[2] = speed % 10; } else if (display_pos == 4) // 第四位显示电机旋转方向 { if (INA == 1 && INB == 0) // 正向旋转 { display_data[3] = 0x06; // 数码管显示“F” } else if (INA == 0 && INB == 1) // 反向旋转 { display_data[3] = 0x09; // 数码管显示“r” } } Display(display_data[display_pos-1], display_pos); // 数码管显示 display_pos++; // 显示位置加1 if (display_pos > 4) { display_pos = 1; // 显示位置恢复为1 } time++; // 计时器加1 } } ``` 需要注意的是,以上代码仅为示例,具体实现还需要根据硬件电路和电机的实际情况进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电气_空空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值