利用STM32控制直流電機正反轉及轉速,通過labview發送指令給STM32控制電機的正反轉及轉速,并將電機的轉速實時顯示在波形圖中
3.jpg (16.61 KB, 下載次數: 93)
下載附件
2016-6-25 16:57 上傳
4.png (35.21 KB, 下載次數: 94)
下載附件
2016-6-25 16:57 上傳
2.png (29.78 KB, 下載次數: 98)
下載附件
2016-6-25 16:57 上傳
1.png (32.63 KB, 下載次數: 87)
下載附件
2016-6-25 16:57 上傳
實驗器材:
MiniSTM32F103開發板V3版本
實驗目的:
本實驗為新建工程實驗,僅供大家新建工程時參考。
新建工程詳細步驟,請看《STM32不完全手冊-庫函數版本》第3.3節。
實驗現象:
本實驗下載后,B0,B1交替閃爍
注意事項:
無.
部分程序預覽:
- #include "moter.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "lcd.h"
- #include "pwm.h"
- #include "key.h"
- #include "timer.h"
- #include "encoder.h"
- #include "control.h"
- //#include "usmart.h"
- #include "malloc.h"
- #include "MMC_SD.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- int main(void)
- {
- u32 fontcnt;
- u8 i,j;
- u8 fontx[2];//gbk碼
- u8 key,t;
-
- u8 KEY_TEMP;
- char buffer[4]; //浮點轉字符數組
- delay_init(); //延時函數初始化
- KEY_Init(); //初始化與按鍵連接的硬件接口
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2
- uart_init(9600); //串口初始化為9600
- MOTER_Init(); //初始化與電機連接的硬件接口
- TIM1_PWM_Init(899,0);//不分頻。PWM頻率=72000/(899+1)=80Khz
- LCD_Init();
-
- //usmart_dev.init(72); //usmart初始化
- mem_init(); //初始化內存池
- exfuns_init(); //為fatfs相關變量申請內存
- f_mount(fs[0],"0:",1); //掛載SD卡
- f_mount(fs[1],"1:",1); //掛載FLASH.
- font_init();
-
-
- TIM3_Int_Init(99,7199);//10Khz的計數頻率,計數到5000為500ms
- Encoder_Init_TIM2(); //初始化編碼器1
- AIN0=1;AIN1=0;
- /***************PI 參數**********************/
- Kp=1.2;
- Ki=0.0011;
- Kd=6;
-
- Encoder_set=0;
-
- USART_RX_BUF[0]='a';
-
- while(1)
- {
-
- KEY_TEMP=KEY_Scan(0); //得到鍵值
- switch(KEY_TEMP)
- {
- case KEY0_PRES:
- Encoder_set+=1; break;
- case KEY1_PRES:
- Encoder_set-=1; if(Encoder_set=0)Encoder_set=0; break;
- default:break;
- }
- if(USART_RX_STA&0x8000)
- {
- USART_RX_STA=0;
- // Encoder_set=(USART_RX_BUF[1]-'0')*100+(USART_RX_BUF[2]-'0')*10+(USART_RX_BUF[3]-'0');
- Encoder_Err_Sum=0;//OutPwm=0;
- if(USART_RX_BUF[0]=='a') {AIN0=1;AIN1=0;Encoder_set=(USART_RX_BUF[1]-'0')*100+(USART_RX_BUF[2]-'0')*10+(USART_RX_BUF[3]-'0');}
- if(USART_RX_BUF[0]=='b') {AIN0=0;AIN1=1;Encoder_set=(USART_RX_BUF[1]-'0')*100+(USART_RX_BUF[2]-'0')*10+(USART_RX_BUF[3]-'0');}
- }
-
- POINT_COLOR=BLUE;
- Show_Str(0,30,240,24,"基于PI的電機速度控制",24,0);
- POINT_COLOR=BLACK;
- Show_Str(1,70,200,16,"電機速度",16,0); LCD_ShowxNum(130 ,70,LABview_moter,5,16,0); Show_Str(180,70,200,16,"轉/分",16,0);
- sprintf(buffer, "%10.2f", LABview_wheel);
-
- Show_Str(1,90,200,16,"輪子速度",16,0);LCD_ShowString(90,90,200,16,16,buffer);Show_Str(180,90,200,16,"轉/分",16,0);
- sprintf(buffer, "%10.2f", pwm_precent);
- Show_Str(1,110,200,16,"PWM百分比",16,0);
- POINT_COLOR=BLACK;
- if(pwm_precent<=20)POINT_COLOR=BLUE;
- if(pwm_precent>=80)POINT_COLOR=RED;
- LCD_ShowString(90,110,200,16,16,buffer);
- POINT_COLOR=BLACK;
- Show_Str(190,110,200,16,"%",16,0);
-
- Show_Str(1,130,200,16,"電機狀態",16,0);
- if( (USART_RX_BUF[0]-'a')==0 ){
- Show_Str(150,130,200,16,"正轉",16,0);}
- else{
- Show_Str(150,130,200,16,"反轉",16,0);}
-
- //LCD_ShowxNum(180,170,Encoder_moter,5,16,0);
- POINT_COLOR=RED;
- Show_Str(50,210,200,16,"1304105022 方立超",16,0);
- Show_Str(50,230,200,16,"1304105025 張 馮",16,0);
- Show_Str(50,250,200,16,"1304105023 陸 煬",16,0);
- Show_Str(50,270,200,16,"1304105024 沈 磊",16,0);
-
-
-
-
- delay_ms(10);
- printf("%f", LABview_wheel);
- printf("\r\n");//插入換行
-
- }
- }
復制代碼
完整程序下載:
電機控制程序.7z
(599.24 KB, 下載次數: 287)
2021-8-26 05:09 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
|