标题:
基于STM32单片机的PWM直流调速系统仿真与程序设计
[打印本页]
作者:
__myth丶
时间:
2021-4-20 18:22
标题:
基于STM32单片机的PWM直流调速系统仿真与程序设计
本帖包含仿真与例程,是基于STM32单片机的PWM直流电机调速,通过定时器3的三通道即B0口输出PWM波,继而通过L298N驱动芯片驱动电机转动,并通过LCD液晶显示电机的状态与挡位。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(44.26 KB, 下载次数: 40)
下载附件
2021-4-20 19:16 上传
单片机源程序如下:
#include "sys.h"
#include "timer.h"
#include "gpio.h"
#include "key.h"
#include "math.h"
#include "lcd12864.h"
int main(void)
{
u16 arr=60000;
u16 psc=2;
u16 led_dt = 550;
unsigned char KEY=0;
int start=0;//电机启停变量
int D=100;//电机转速调节参数
int d=1;//电机挡位变量,挡位1-6
RCC_Configuration(); //系统时钟初始化
GPIO_Configuration();//端口初始化
TIM3_Configuration(arr,psc);//定时器和pwm配置
Key_Init();
Init_12864(); //初始化12864液晶
LCD_DispACat(8,8);
LCD_P6x8Str(5,45,"PWM-->Motor");
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
while(1)
{
TIM_SetCompare3(TIM3,led_dt*D); //用的是TIM3的通道2,输出PWM 送到相应的寄存器中
KEY=Key_Scan();
//***********************电机启停***************************//
if(KEY==67)//C启动
{
delay_ms(1);//延时消抖
start=1;
GPIO_SetBits(GPIOC,GPIO_Pin_5);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,25," start ");
}
if(KEY==68)//D停止
{
start=0;
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,25," stop ");
}
//*********************电机正反转***************************//
if((KEY==42)&&(start==1))//“*”的ascll码是42,控制电机反转
{
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,11,"Negative Direction");
}
if((KEY==35)&&(start==1))//“#”的ascll码是35,控制电机正转
{
GPIO_SetBits(GPIOC,GPIO_Pin_5);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,11,"Positive Direction");
}
//**********************电机加减速**************************//
if((KEY==65)&&(start==1))//A加速
{
D=D-20;
d++;
if(D<10)
{
D=0;
d=6;
}
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,27," Speed up ");
}
if((KEY==66)&&(start==1))//B减速
{
D=D+20;
d--;
if(D>100)
{
D=100;
d=1;
}
LCDClearScreen(AllScreen);
LCD_P6x8Str(4,27," Slow down ");
}
if(start!=0)
{
Key_Gear(d);
}
// if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)== Bit_RESET)
}
}
复制代码
屏幕可以显示,但是电机不转,求帮助:
Desktop.7z
(283.04 KB, 下载次数: 42)
2021-4-20 19:17 上传
点击文件名下载附件
作者:
51hei团团
时间:
2021-4-20 19:23
不管按哪个键,电机都不转,问题大概在哪里?
作者:
__myth丶
时间:
2021-4-21 12:41
我是作者,俺也不知道咋回事,就是在加LCD之前都还是好好的,加了之后就感觉仿真带不动了一样,其实我感觉整个程序和仿真应该没有问题,但是屏蔽关于LCD的代码也不管用了。电机是转的,要先点启动键,才能执行其他操作,但是一点启动键就会变很卡,建议打开示波器会看的明显一些,再然后你点加速会在卡一会后观察到PWM波形占空比发生变化。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1