找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2485|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)無(wú)刷直流電機(jī)驅(qū)動(dòng)程序與Proteus仿真圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include "sys.h"         
  2. #include "led.h"
  3. #include "lcd.h"
  4. #include "motor.h"
  5. #include "delay.h"        
  6. #include "includes.h"

  7. ////////////////////////事件標(biāo)志組//////////////////////////////
  8. #define KEY_FLAG                0x01
  9. #define KEYFLAGS_VALUE        0X00                                                
  10. OS_FLAG_GRP        *EventFlags;                //定義一個(gè)事件標(biāo)志組

  11. /////////////////////////UCOSII任務(wù)設(shè)置///////////////////////////////////

  12. //START 任務(wù):創(chuàng)建其他任務(wù)的入口//開始任務(wù)的優(yōu)先級(jí)設(shè)置為最低

  13. #define START_TASK_PRIO                              10 //設(shè)置任務(wù)優(yōu)先級(jí)
  14. #define START_STK_SIZE                                  64 //設(shè)置任務(wù)堆棧大小
  15. OS_STK START_TASK_STK[START_STK_SIZE];//任務(wù)堆棧
  16. void start_task(void *pdata);        //任務(wù)函數(shù)
  17.                         
  18.                         
  19. //LED0任務(wù):每100ms:完成紅色LED的一個(gè)周期閃爍、檢測(cè)一次按鍵且將結(jié)果發(fā)送到事件標(biāo)志組

  20. #define LED0_TASK_PRIO                               9 //設(shè)置任務(wù)優(yōu)先級(jí)
  21. #define LED0_STK_SIZE                                      64 //設(shè)置任務(wù)堆棧大小
  22. OS_STK LED0_TASK_STK[LED0_STK_SIZE];        //任務(wù)堆棧        
  23. void led0_task(void *pdata);        //任務(wù)函數(shù)

  24. //LCD任務(wù):每500ms:在屏幕上顯示adc、電機(jī)轉(zhuǎn)速

  25. #define LCD_TASK_PRIO                               8 //設(shè)置任務(wù)優(yōu)先級(jí)
  26. #define LCD_STK_SIZE                                      64//設(shè)置任務(wù)堆棧大小
  27. OS_STK LCD_TASK_STK[LCD_STK_SIZE];        //任務(wù)堆棧        
  28. void LCD_task(void *pdata);        //任務(wù)函數(shù)

  29. //MOTOR任務(wù):每200ms:控制電機(jī)換向、測(cè)量一次ADC

  30. #define MOTOR_TASK_PRIO                               7 //設(shè)置任務(wù)優(yōu)先級(jí)
  31. #define MOTOR_STK_SIZE                                      64//設(shè)置任務(wù)堆棧大小
  32. OS_STK MOTOR_TASK_STK[MOTOR_STK_SIZE];        //任務(wù)堆棧        
  33. void MOTOR_task(void *pdata);        //任務(wù)函數(shù)

  34. //LCD_KEY任務(wù): 每100ms: 在屏幕上顯示(事件)開關(guān)是否按下

  35. #define LCD_KEY_TASK_PRIO                               6 //設(shè)置任務(wù)優(yōu)先級(jí)
  36. #define LCD_KEY_STK_SIZE                                      64//設(shè)置任務(wù)堆棧大小
  37. OS_STK LCD_KEY_TASK_STK[LCD_KEY_STK_SIZE];        //任務(wù)堆棧        
  38. void LCD_KEY_task(void *pdata);        //任務(wù)函數(shù)


  39. int main(void)
  40. {        
  41.          
  42.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  43.         delay_init();            //延時(shí)函數(shù)初始化         
  44.         LED_Init();                          //初始化與LED連接的硬件接口
  45.         LCD_Init();                                //初始化與LCD連接的硬件接口
  46.         MOTOR_Init();                //初始化PWM/GPIO復(fù)用硬件接口
  47.         MOTOR_ADC_Init();        //初始化ADC復(fù)用硬件接口
  48.         OSInit();   
  49.          OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務(wù)
  50.         OSStart();                  
  51. }
  52.          
  53. //開始任務(wù)
  54. void start_task(void *pdata)
  55. {
  56.         INT8U err;
  57.         
  58.   OS_CPU_SR cpu_sr=0;
  59.         pdata = pdata;
  60.   OS_ENTER_CRITICAL();                        //進(jìn)入臨界區(qū)(無(wú)法被中斷打斷)
  61.         
  62.         //事件創(chuàng)建
  63.         EventFlags = OSFlagCreate (KEYFLAGS_VALUE, //事件標(biāo)志組初始值
  64.                                                                 &err);                                        //錯(cuò)誤碼
  65.         
  66.         //LED紅燈的任務(wù)創(chuàng)建
  67.          OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);               

  68.         //事件標(biāo)志----LCD_KEY的任務(wù)創(chuàng)建
  69.          OSTaskCreate(LCD_KEY_task,(void *)0,(OS_STK*)&LCD_KEY_TASK_STK[LCD_KEY_STK_SIZE-1],LCD_KEY_TASK_PRIO);        

  70.         //電機(jī)的任務(wù)創(chuàng)建
  71.         OSTaskCreate(MOTOR_task,(void *)0,(OS_STK*)&MOTOR_TASK_STK[MOTOR_STK_SIZE-1],MOTOR_TASK_PRIO);                        
  72.                
  73.         //屏幕的任務(wù)創(chuàng)建
  74.         OSTaskCreate(LCD_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);        

  75.         OSTaskSuspend(START_TASK_PRIO);        //掛起起始任務(wù).
  76.         OS_EXIT_CRITICAL();                                //退出臨界區(qū)(可以被中斷打斷)
  77. }
復(fù)制代碼

Keil代碼與Proteus仿真求指導(dǎo): 無(wú)刷直流電機(jī).7z (373.34 KB, 下載次數(shù): 135)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1075527 發(fā)表于 2023-5-8 16:21 | 只看該作者
請(qǐng)問有C語(yǔ)言編程程序嗎樓主?
回復(fù)

使用道具 舉報(bào)

板凳
ID:228452 發(fā)表于 2023-5-9 00:35 | 只看該作者
LCD_MOTOR_CODE   dir included in package  Keil software..
回復(fù)

使用道具 舉報(bào)

地板
ID:1079577 發(fā)表于 2023-5-24 21:54 | 只看該作者
這啥玩意 不好使啊
回復(fù)

使用道具 舉報(bào)

5#
ID:374009 發(fā)表于 2024-3-9 06:42 | 只看該作者
代碼寫的挺規(guī)范,但是運(yùn)行不起來。跑的系統(tǒng)
回復(fù)

使用道具 舉報(bào)

6#
ID:316613 發(fā)表于 2024-5-10 16:29 | 只看該作者
電機(jī)不轉(zhuǎn)動(dòng)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表