首页 > 其他分享 >19_直流电机驱动

19_直流电机驱动

时间:2023-11-30 15:11:05浏览次数:33  
标签:__ 20 19 void unsigned Delay 直流电机 驱动 include

直流电机驱动

直流电机介绍

image-20231126210651049

电机驱动电路

image-20231127131453876

PWM介绍

image-20231127132138765

使用PWM控制呼吸灯

main.c

#include <REGX52.H>

sbit LED=P2^0;

void Delay(unsigned int 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);
			}
		}
		for(Time=100;Time>0;Time--) 
		{
			for(i=0;i<20;i++)
			{
				LED=0;
				Delay(Time);
				LED=1;
				Delay(100-Time);
			}
		}
		
	}
}

运行效果

VID_20231127_145625

产生PWM方法

image-20231127145952634

直流电机调速

Timer0.c

#include <REGX52.H>

/**
* @brief 定时器0初始化,100微秒@12.000MHz
  * @param 无
  * @retval 无
  */
void Timer0_Init(void)
{
	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x01;			//设置定时器模式
	TL0 = 0x9C;				//设置定时初始值
	TH0 = 0xFF;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;
}

/* 定时器中断函数模板
void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x9C;				//设置定时初始值
	TH0 = 0xFF;				//设置定时初始值
	T0Count++;
	if(T0Count>=1000)
	{
		T0Count=0;
		
	}
}
*/

Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__

void Timer0_Init(void);

#endif

Key.c

#include <REGX52.H>
#include "Delay.h"

/**
  * @brief 获取独立按键键码
  * @param 无
  * @retval 按下按键的键码,范围:0~4, 无按键按下返回0
  */
unsigned char Key()
{
	unsigned char KeyNumber=0;
	if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
	if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
	if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
	if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
	return KeyNumber;
}

Key.h

#ifndef __KEY_H__
#define __KEY_H__

unsigned char Key();

#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"

sbit Motor=P1^0;

unsigned char Counter,Compare;
unsigned char KeyNum,Speed;

void main()
{
	Timer0_Init();
	Compare=5;
	while(1)
	{
		KeyNum=Key();
		if(KeyNum==1)
		{
			Speed++;
			Speed%=4;
			switch(Speed)
			{
				case 0:Compare=0;break;
				case 1:Compare=50;break;
				case 2:Compare=75;break;
				case 3:Compare=100;break;
			}
		}
		Nixie(1,Speed);
	}
}

void Timer0_Routine() interrupt 1
{
	TL0 = 0x9C;				//设置定时初始值
	TH0 = 0xFF;				//设置定时初始值
	Counter++;
	Counter%=100;
	if(Counter<Compare)
	{
		Motor=1;
	}
	else
	{
		Motor=0;
	}
}

标签:__,20,19,void,unsigned,Delay,直流电机,驱动,include
From: https://www.cnblogs.com/mzx233/p/17867417.html

相关文章

  • 8-1900E - Transitive Graph
    题意:思路:tarjan缩点后,对新图DAG进行拓扑dp。代码:点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+7;constintinf=1e9+7;typedefpair<int,int>pll;intn,m;intdfn[N],low[N];intvis[N];vector<int>ve[N]......
  • 19、Flutter StatelessWidget 、 StatefulWidget
    在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget / StatefulWidget。StatelessWidget是无状态组件,状态不可变的widgetStatefulWidget是有状态组件,持有的状态可能在widget生命周期改变。通俗的讲:如果我们想改变页面中的数据的话这个时候就需要用到Statef......
  • 【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O
    什么是Node.js?Node.js是一个基于ChromeV8引擎的JS运行环境,允许你在服务器上构建你的应用程序。它采用了一套事件驱动、非阻塞式I/O模型,让JS可以运行在服务器上的开发平台。为什么要用Node.js?为什么现在主流前端框架Vue、React等都需要基于Node环境进行开发呢?基本原因1:不基......
  • 三大核心成长驱动力,C海光:国产CPU领军,加速突破高端市场
    1.3“数字经济”及“东数西算”推动核心行业市场服务器国产替代数字经济是近年来提出的全新的国家战略,随着各行业数字化转型进程的加快,所产生的数据呈现指数式爆发增长,算力已成为数字经济发展的核心因素,而数据的传输、存储与计算都与服务器息息相关。2022年1月,国务院发布的......
  • 入门Windows驱动程序
    来自:https://www.anquanke.com/post/id/85972入门Windows驱动程序:0x1 背景笔者在学习中发现,关于Windows驱动编程的文章多不胜数,但是其中很多文章的内容繁杂不便于了解与学习,缺少对内容精准的概括与总结,所以本篇文章将对Windows驱动编程进行一次总结性介绍。文章将分为两个部......
  • AI如何改变数据驱动决策的方式
    导语在这个信息爆炸的时代,数据成为了企业和组织最为宝贵的资源。然而,单纯的数据堆积并没有太大价值,只有通过分析和挖掘,才能真正发挥数据的潜力。随着AI技术的飞速发展,我们正见证着数据驱动决策方式发生深刻变革。在这篇文章中,我们将探讨AI如何改变数据驱动决策的方式,以及DataFocu......
  • 开源大模型驱动的编程能力测试
    随着人工智能技术的不断发展,开源大模型已经成为了一个备受关注的话题。在这些开源大模型中,WizardCoder和WizardLM是两个备受瞩目的项目。本文将重点介绍这两个模型的特点和优势,并探讨它们在写代码能力测试中的应用。一、开源大模型WizardCoderWizardCoder是一个基于Python的......
  • 《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源Et
     更新一期视频教程:BSP视频教程第28期:CANopen协议栈专题,CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法视频版:https://www.bilibili.com/video/BV1H84y1Q717/ 1、航空航天级CANopen协议栈https://gitlab.com/n7space/canopenhttps://canopen.space/#download lely-......
  • 19.删除链表的倒数第N个节点
    leetcode题目链接题目描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1]提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=10......
  • Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI -->
    Android之看“马达”如何贯通Android系统(从硬件设计-->驱动-->HAL-->JNI-->Framework-->Application)-如果天空不死-博客园https://www.cnblogs.com/skywang12345/p/3404808.html  在Android2.3(Gingerbread)系统的时候,我写过一篇关于“Android震动马达......