功能介绍:采用stm32单片机作为主控CPU,采用自带编码器测速的直流电机,采用stm32单片机采集电机的实时转速,使用LCD1602显示,通过按键设置速度报警值,当实际转速大于设置值时,蜂鸣器进行报警,文末有资料分享:
10-基于stm32单片机直流电机测速报警系统(程序+原理图+元件清单全套资料)
程序部分展示,有中文注释,新手容易看懂
void duzhi()
{
if(K3==0)
{
num=num+1;
}
}
int main(void)
{
SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz
delay_init(72); //延时函数初始化
uart_init(9600);
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init();
//Timer1_Init(0xffff,0);
// TIM3_PWM_Init(899,0);
LCD1602_Init();
KEY_Init();
OUT1=0;
OUT2=1;
buf1=200;
while(1)
{
duzhi();
buf++;
duzhi();
if(K1==0) //编码器检测
{
buf1++;
}duzhi();
if(K2==0)
{
buf1--;
if(buf1<1) buf1=1;
} duzhi();
if(buf>20)//没转20次计数一次
{
buf=0;
speed=num;
num=0;
}duzhi();
LCD_Write_Command(0x80);
LCD_Write_Date('S');duzhi();
LCD_Write_Date('P');
LCD_Write_Date('E');duzhi();
LCD_Write_Date('E');
LCD_Write_Date('D');duzhi();
LCD_Write_Date(':');
LCD_Write_Date(speed %10000/1000+0x30);duzhi();//显示速度
LCD_Write_Date(speed %1000/100+0x30);
LCD_Write_Date(speed %100/10+0x30);duzhi();
LCD_Write_Date('.');duzhi();
LCD_Write_Date(speed %10+0x30);
LCD_Write_Command(0x80+0x40); duzhi();//显示设置值
LCD_Write_Date('Y');
LCD_Write_Date('U');duzhi();
LCD_Write_Date('Z');
LCD_Write_Date('H');duzhi();
LCD_Write_Date('I');
LCD_Write_Date(':');duzhi();
LCD_Write_Date(buf1 %10000/1000+0x30);
LCD_Write_Date(buf1 %1000/100+0x30);duzhi();
LCD_Write_Date(buf1 %100/10+0x30);
LCD_Write_Date('.');duzhi();
LCD_Write_Date(buf1 %10+0x30);duzhi();
if(speed>buf1) OUT1=0;
else OUT1=1;
}
}
下面是原理图文件展示: