步进电机正反转实验_单片机控制直流电机正反转调速--基础简单实现

c6b25a22e7470270e98e5ab688eb2845.png

如何使用单片机控制直流电机呢?

真正控制之前我们要知道以下三点:

1、直流电机的控制是通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低。

2、单片机的I/O口是不能直接驱动电机的,所以你还需要用一个驱动芯片。像 LG9110、CMO825 L298 等。驱动芯片可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。本文采用的是 L298。

3、为了实现调节转速功能必须来个滑动变阻器和数模转化器ADC0831, 同时使用开关控制电机正反转。

开始行动~

b0ea1cccb67bbbd49161b99f5595753d.png
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit CS = P3^0;
sbit CLK = P3^1;
sbit DO = P3^6;
sbit sw = P3^7;  //定义正反转开关

sbit s0 = P2^0;
sbit s1 = P2^1;
sbit ENA = P2^4;
int total = 256;
void delay(int time){
	int i;
	for(i = 0;i < time;i++){
		//...
	}
}
void Move(int time){
	ENA = 1;
	delay(time);
	ENA = 0;
	delay(total - time);
}
int readData(){
	int temp = 0;
	int i;
	DO = 1;
	_nop_();
	_nop_();
	CS = 0;
	_nop_();
	_nop_();
	CLK =0;
	_nop_();
	_nop_();
	CLK =1;
	_nop_();
	_nop_();
	CLK = 0;
	_nop_();
	_nop_();
	CLK = 1;
	_nop_();
	_nop_();
	CLK = 0;
	_nop_();
	_nop_();
	for(i = 0;i < 8;i++){
		CLK = 1;
		_nop_();
		_nop_();
		temp <<= 1;
		if(DO){
			temp ++;
		}
		CLK = 0;
		_nop_();
		_nop_();
	}
	CS = 1;
	_nop_();
	_nop_();
	return temp;
}
void main(){
	int state = sw;
	int time = 0;
	while(1){
		state = sw;
		if(state){
			s0 = 0;s1 = 1;//正转
		}
		else{
			s0 = 1;s1 = 0;//反转
		}
		time = readData();
		Move(time);
	}
	
}

OK 一切就绪

ecc0a5e9f31ce1fa0b329820be14c0e9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值