单片机 IO引脚直接驱动直流电机

本文介绍了如何使用单片机通过三极管驱动直流电机,详细解析了基本的驱动电路设计,包括利用肖特基二极管保护三极管。此外,还提供了正反转功能的电路仿真图,展示了通过控制单片机的两个引脚实现电机的正转和反转。电路适用于小功率电机,并且适用于5v或12v电源。
摘要由CSDN通过智能技术生成

单片机的引脚输出电流是非常小的,一般在10~20mA左右,而直流电机的驱动电流在100mA以上。
高电平输出状态下,电压虽然没有太大变化,但电流很小,这就使得单片机引脚是无法直接驱动直流电机的。

而如果只驱动一个电机实现简单的启停功能,这时候没有必要用电机驱动模块,仅通过小小的三极管就能实现。

利用三极管做一个开关驱动。
电路原理图↓
在这里插入图片描述

I/O进行控制:高电平转动,低电平停止。
IO口高电平时:三极管集电级和发射级导通,电机能量来源于VCC输入,足以满足电机工作。

该电路缺点是只能控制单方向转动。
SS14肖特基二极管主要是防止电路断开瞬间电机电感发生突变,从而烧坏三极管,利用肖特基二极管工作速度快,电流大等特点,在电路断开瞬间进行电路续流,把这个无路可去的大电流二次经过电机给消耗掉。

扩展内容↓
考虑到有的需要电机正反转功能,顺便把正反转的电路图也给放出来。

仿真图↓
在这里插入图片描述
电源5v、12v都能驱动,只是5v驱动功率小一些。

A、B口接单片机引脚

A口给高电平 B口低电平时电机正转,反之则电机反转。

#include //器件库 #include //延时函数库 #include //标准I/O函数库 #include //标准函数库 unsigned char m0,m1,m2; unsigned char s,s1; // 单片机定时器0溢出中断服务程序段 // 产生伺服电机动作所需要的脉宽 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0xBA; if(s<m0)PORTA.0=1;else PORTA.0=0; if(s<m1)PORTA.1=1;else PORTA.1=0; if(s127) { s=0; s1=0; TCCR0=0x00; TCCR1B=0x02; TCNT1H=0xff; TCNT1L=0x59; } } // 单片机定时器1溢出中断服务程序段 // 产生0.5ms的开始脉宽和5ms以上的间隔脉宽 interrupt [TIM1_OVF] void timer1_ovf_isr(void) { #asm("wdr"); //喂狗 TCNT1H=0xff; TCNT1L=0x59; s1++; if(s170) { TCCR1B=0x00;TCCR0=0x01;s1=0;TCNT0=0xBA;} } } void main(void) { unsigned char i,j,count=0; unsigned char c[3]; unsigned int k; // 设置A口为输出状态,并且初始值为低电平 PORTA=0x00; DDRA=0xFF; // 设置B、C、D、E口为高阻输入状态,在该程序中不使用 PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; //设置定时器0的时钟来源为系统晶体 //设置计数周期为8000KHZ,清空计数寄存器 TCCR0=0x00; TCNT0=0x00; OCR0=0x00; //设置定时器1的时钟来源为系统晶体 //设置计数周期为1000KHZ,清空计数寄存器 TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; //使能定时器 TIMSK=0x82; // 串口模数据:8个数据位,1个停止位,无奇偶效验 // 串口使能:发送、接收 // 串口模式:异步 // 串口速率:9600 UCSRA=0x02; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x34; //设置模拟比较器 ACSR=0x80; //使能看门狗,设置喂狗周期为 时钟/2048 WDTCR=0x1F; WDTCR=0x0F; // 打开总中断 #asm("sei") delay_ms(500); putchar(0x0d); putchar(0x0a); putsf("***********************************\r"); putsf("* 3路舵机驱动小程序 *\r"); putsf("* 顺德职业技术学院 机电工程系 *\r"); putsf("* 罗建章 *\r"); putsf("***********************************\r"); while (1) { count=0; putsf("输入舵机编号(1~3):"); putchar(0x0d); n1:i=getchar(); if((i
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值