大家好,欢迎来到IT知识分享网。
一、介绍直流电机
介绍
电机驱动电路
点击的负载较大,直接接在单片机I/O口上无法驱动,所以需要驱动电路
大功率器件直接驱动
续流二极管的作用:
由于电机是感应器件,是电感,在线路断开时会是电压缓慢降下,而此时没有电流,电感就会感应出高电压来产生电流,这样就可能会导致电路损坏。而这个二极管的作用就是在电路断开时,与电机形成回路,延续电流使电机电压缓慢降低。
H桥驱动
IN1与IN4、IN2与IN3形成通路来达到改变方向的效果,不过这种结构无法添加续流二极管,对硬件的耐电性要求较高
集成电路线路图
PWM介绍
产生PWM的方法
模型结构
与波形对比图
二、实例
1.呼吸灯案例
通过改变供电占比实现,设定一个固定周期,通过改变在这个周期里的供电占比即可实现。不过使用延时函数比较占用CPU
#include <REGX52.H> sbit LED = P2^0; // 快速延时函数 void Delay(t){
while(t--); } void main(){
unsigned char Time,i; while(1){
// 增大低电平周期占比,增加亮度 for(Time = 0;Time < 100;Time++){
// 延缓变化速度 for(i = 0;i < 20;i++){
LED = 0; Delay(Time); LED = 1; Delay(100-Time); // 一次周期定位为100 } } // 降低低电平周期占比,降低亮度 for(Time = 100;Time > 0;Time--){
// 延缓变化速度 for(i = 0;i < 20;i++){
LED = 0; Delay(Time); LED = 1; Delay(100-Time); // 一次周期定位为100 } } } }
2.直流电机调速
注意:由于单片机默认高电平,所以打开开关的一瞬间电机是通电状态,会转一会
#include <REGX52.H> #include "Delay.h" #include "Key.h" #include "Time0Init.h" #include "Nixie.h" sbit Motor = P1^0; // 开关引脚 unsigned char Counter,Compare; // 周期、比较值 unsigned char KeyNum,Speed; void main(){
Time0_Init(); while(1){
KeyNum = Key(); // 以Speed控制挡位,按键1控制Speed if(KeyNum == 1){
Speed++; Speed %= 4; // 大于等于4变为0 // 改变挡位(比较值) if(Speed == 0){
Compare = 0; } if(Speed == 1){
Compare = 40; // 太小会导致电压太小不足以驱动电机 } if(Speed == 2){
Compare = 60; } if(Speed == 3){
Compare = 100; } } Nixie_show(1,Speed); } } // 中断函数 void Timer0_Routine() interrupt 1 {
TL0 = 0xA4; //设置定时初始值 TH0 = 0xFF; //设置定时初始值 Counter++; // 设置周期 if(Counter>=100){
Counter = 0; } // 与比较值进行比较 if(Counter<Compare){
Motor = 1; // 给电 }else{
Motor = 0; // 不给电 } }
补充:本案例使用的按键、数码管都不是采用定时器扫描,数码管只需要静态显示不用消影操作
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/111065.html





