51单片机drv8870驱动直流电机pwm调速正反转代码
时间: 2023-06-11 07:06:10 浏览: 105
以下是51单片机驱动DRV8870直流电机的PWM调速正反转代码,供参考:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit INA=P3^4; //INA引脚
sbit INB=P3^5; //INB引脚
sbit EN=P3^3; //使能引脚
void delay_ms(uint ms); //延时函数
void Init_PWM(void); //初始化PWM
void main()
{
Init_PWM(); //初始化PWM
EN=1; //使能
while(1)
{
//正转
INA=1;
INB=0;
//占空比增加,速度逐渐加快
for(uint i=0;i<100;i++)
{
P1=i;
delay_ms(20);
}
//反转
INA=0;
INB=1;
//占空比减小,速度逐渐减慢
for(uint i=100;i>0;i--)
{
P1=i;
delay_ms(20);
}
}
}
//初始化PWM函数
void Init_PWM(void)
{
TMOD=0x01; //定时器0工作在模式1
TH0=0xff; //定时器0初始值
TL0=0xff;
P1=0; //P1口输出0
ET0=1; //允许定时器0中断
TR0=1; //启动定时器0
EA=1; //允许总中断
}
//定时器0中断函数
void Timer0_ISR() interrupt 1 using 0
{
static uint cnt=0;
cnt++;
if(cnt>=100)
{
cnt=0;
}
if(cnt<=P1)
{
//PWM占空比
P3|=0x08;
}
else
{
P3&=~0x08;
}
}
//延时函数
void delay_ms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<110;j++);
}
}
```
其中,INA和INB分别为DRV8870的IN1和IN2引脚,控制电机的正反转;EN为DRV8870的EN引脚,控制电机的使能。在主函数中,先让电机正转并且速度逐渐加快,然后反转并且速度逐渐减慢。PWM的占空比通过定时器0中断函数来控制,具体实现见代码中的注释。
相关推荐
![PcbDoc](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)