标题:
通过MCU串口发送调试直流电机的占空比,接受完数据后,电机停止转动,大佬帮分析一下
[打印本页]
作者:
captaine
时间:
2022-6-23 11:22
标题:
通过MCU串口发送调试直流电机的占空比,接受完数据后,电机停止转动,大佬帮分析一下
#include <STC12C5A60S2.H>
#include <intrins.h>
#include <stdio.h>
#include <math.h>
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit ENA=P1^2; //直流电机的端口定义
unsigned int Counter=0,compare,median;//定时器中断,占空比,接收串口发送的数据
unsigned int s;
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD; //
TR1 = 1;
EA = 1;
复制代码
作者:
captaine
时间:
2022-6-23 12:16
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
}
unsigned char GetChar(void)
{
while(!RI);
RI = 0;
return SBUF; //
}
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
unsigned char zhuanhuang(unsigned char a)
{
s = a - '0';
return s;
}
void Timer0Init(void)
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0xAE;
TH0 = 0xFB;
TF0 = 0;
TR0 = 1;
ET0=1;
EA=1;
}
void main()
{
UartInit();
Timer0Init();
compare = 10;
while(1)
{
IN1=1;
IN2=0;
ENA=~ENA;
median = GetChar();
compare=zhuanhuang(median);
SendByte(compare);
}
}
void Timer0_Routine() interrupt 1
{
TL0 = 0xAE;
TH0 = 0xFB;
Counter++;
if (Counter>=100) Counter = 0;
if (Counter >compare)
{
IN1=0;
IN2=0;
}
}
作者:
的花朵
时间:
2022-6-23 13:59
captaine 发表于 2022-6-23 12:16
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; // SCON:
有点乱,只是想模拟pwm控制电机吗
作者:
glinfei
时间:
2022-6-23 16:10
1、应该用ENA注入pwm; 删除 ENA=~ENA; 再把中断这句改成
if (Counter >compare)
ENA=1;
else
ENA=0;
2、 还有一句改一下 SendByte(compare+'0');
作者:
lkc8210
时间:
2022-6-23 16:15
ENA=~ENA;是干啥的?
while(!RI);死循环了
作者:
captaine
时间:
2022-6-24 10:33
用串口控制pwm转速。
ENA在定时中断里面,发送数据后,电机没有反应,保持原来的转速。但是数据过于小,电机就会停止转动。
ENA是控制PWM的,使能端,while(!RI); 是接收串口发送过来的数据,是我在例程里面复制过来的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1