|
本帖包含仿真與例程,是基于STM32單片機(jī)的PWM直流電機(jī)調(diào)速,通過定時(shí)器3的三通道即B0口輸出PWM波,繼而通過L298N驅(qū)動(dòng)芯片驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),并通過LCD液晶顯示電機(jī)的狀態(tài)與擋位。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (44.26 KB, 下載次數(shù): 40)
下載附件
2021-4-20 19:16 上傳
單片機(jī)源程序如下:
- #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;//電機(jī)啟停變量
- int D=100;//電機(jī)轉(zhuǎn)速調(diào)節(jié)參數(shù)
- int d=1;//電機(jī)擋位變量,擋位1-6
- RCC_Configuration(); //系統(tǒng)時(shí)鐘初始化
- GPIO_Configuration();//端口初始化
- TIM3_Configuration(arr,psc);//定時(shí)器和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 送到相應(yīng)的寄存器中
- KEY=Key_Scan();
- //***********************電機(jī)啟停***************************//
- if(KEY==67)//C啟動(dòng)
- {
- delay_ms(1);//延時(shí)消抖
- 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 ");
- }
- //*********************電機(jī)正反轉(zhuǎn)***************************//
- if((KEY==42)&&(start==1))//“*”的ascll碼是42,控制電機(jī)反轉(zhuǎn)
- {
- 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,控制電機(jī)正轉(zhuǎn)
- {
- GPIO_SetBits(GPIOC,GPIO_Pin_5);
- GPIO_ResetBits(GPIOC,GPIO_Pin_6);
- LCDClearScreen(AllScreen);
- LCD_P6x8Str(4,11,"Positive Direction");
- }
- //**********************電機(jī)加減速**************************//
- 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)
- }
- }
復(fù)制代碼
屏幕可以顯示,但是電機(jī)不轉(zhuǎn),求幫助:
Desktop.7z
(283.04 KB, 下載次數(shù): 42)
2021-4-20 19:17 上傳
點(diǎn)擊文件名下載附件
|
|