用機智雲作PWM佔空比控制電機,物聯網智能家居應用

  由於是新申請的博客,因此申請了總想往裏面加點東西,因此把我以前在機智雲寫的帖子複製了過來php

 

(各位抱歉,因爲以前上傳的文件可能有錯誤,以前上傳的文件PWM不能用,那麼我又從新上傳了一個文件,這個文件的PWM加載到電機上了,以前的電機正反轉功能沒有了,有錯誤的文件我也沒刪除你們對照着看下吧!)前些陣子在機智雲上發了一個二次開發點亮LED的帖子,看的人不少,也有不少加我QQ諮詢的,本次在這裏在介紹一下  基於gokit2.0  STM32底板 PWM開發過程。
本人QQ 522414928  (void loop)
phone 13473465975   (打廣告了哈,其實我也不是啥名人,就是分享一下個人開發過程,但願對看過個人帖子的人有幫助


廢話很少說,下面開始 個人分享


須要的東西  gokit 2.0  stm32底板 (其餘的開發板用戶也能夠看看個人程序及過程,而後看看能不能移植,c語言好的話沒問題的


1 首先第一步  建立新產品  (個人是建好的哈,你們應該都明白,方案選的是wifi,產品分類產品名稱都本身看着弄就行)
這是我建好的那個   看下圖
 

2 第二部  就比較關鍵了建立數據點,我建了不少哈,由於我把 12個外部引用的引腳都開發了,雖然不知道接什麼設備  好了,看下圖就明白了
這個也是我以前建好的,你們看明白
 


3 第三部 原本應該是手機端軟件「機智雲」掃碼查看虛擬設備有沒有錯誤,(其實這是沒必要要的,由於我認爲是不會出錯的,手機跟雲端必定是對應的)
仍是說說必要的,必要的就是進入MCU開發選項,而後生成並下載代碼
具體以下:
 
下載完以後解壓,解壓後是這樣的
 
4 第四部  用keil 5軟件 打開project 文件夾下的 這個文件:
這個是project 文件夾
 
打開以後,是這樣的,看圖   ok,就是這樣
 

5 最最關鍵步驟來了,其實下載的這個程序只是個框架,還須要咱們填程序的
首先,咱們新建兩個文件,PWM1.C 和PWM2.H (叫什麼你隨意,學過stm32的都懂)保存在Hal文件夾下的Hal_PWM1文件夾下,下面這樣
 
而後往裏面添加程序,看圖吧(圖片里程序不全,具體程序我就複製在這兩個程序下邊)
 

PWM1.C裏的
#include <math.h>
#include "Hal_PWM1/PWM1.h"

void tim3GpioConfig(void) 
{
  GPIO_InitTypeDef GPIO_InitStructure;
        
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); 
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // ??????
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}



void tim3ModeConfig(void)
{

    TIM_OCInitTypeDef  TIM_OCInitStructure;

    u16 ccr1Val = 500;
    u16 ccr2Val = 500;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        
    TIM_OCInitStructure.TIM_Pulse = ccr1Val;           
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);         
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);


    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = ccr2Val;          
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);          
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


  TIM_Cmd(TIM3, ENABLE);                          
}

void PWM1Init(void)
{
    tim3GpioConfig();
    tim3ModeConfig();
    PWM1Status(0);
}


void PWM1Control(uint8_t m1,uint8_t m2)
{
    u16 temp = (MOTOR_ARR+1) / MOTOR_MAX;

    TIM_SetCompare1(TIM3,m1*temp);        
    TIM_SetCompare2(TIM3,m2*temp);        

}

void PWM1Status(motor_t status)
{
    if(0 == status)
    {
        PWM1Control(0,0);
    }
    else
    {
        if(status > 0)
        {
            PWM1Control((abs(status)+5)*10, 0);
        }
        else
        {
            PWM1Control(0, (abs(status)+5)*10);
        }
    }  
}
pwm1.h裏的

#ifndef _PWM1_H
#define _PWM1_H

#include <stdio.h>
#include "stm32f10x_gpio.h"

#define MOTOR_SPEED_RATIO 1
#define MOTOR_SPEED_ADDITION (-5)
#define MOTOR_SPEED_DEFAULT 0




#define MOT1 PBout(8)
#define MOT2 PBout(9)

#define MOTOR_ARR 899 //8kHZ
#define MOTOR_MAX 100
#define MOTOR_MAX1 -100
#define MOTOR_MIN 0

#ifdef  MOTOR_16
typedef int16_t motor_t;
#else
typedef int8_t motor_t;
#endif

void PWM1Init(void);
void PWM1Status(motor_t status);

#endif 


6 這段程序和頭文件佔了帖子的很大地方啊,程序不太懂的加我QQ522414928,而後把它添加Hal這個裏面,看圖

 添加進來以後能夠運行一下


7這一步就是添加程序初始化到  main.c 看圖更詳細  在main.c裏面  包含文件#include "Hal_PWM1/PWM1.h" 而後在void userInit(void) 這個函數裏面添加 PWM1Init()(按照個人來就能夠了,不懂得再問我
 
8 這一步能夠算改程序的最後一步了,在gizwits_product.c  這個程序裏面找到case EVENT_PWM1:      而後在//user handle  前面加上一句程序  PWM1Status(PWM1Value); (警告,你的程序可能沒有EVENT_PWM1,這是根據你以前在數據點那起的名字所決定的
 
程序到這裏就結束了,編譯程序,而後下載到開發板,下載都會吧,不會的問我,隨時在線,個人程序下載軟件是flymcu


感謝你看個人帖子,若是對你有幫助必定要謝謝我啊,畢竟這個帖子寫了兩個小時,本人渣渣一個,大的技術不會,但願各位大神誰有更好的建議留言  劉新宇的物聯網一.zip (8.72 MB, 下載次數: 0) html

這是帖子原地址框架

http://club.gizwits.com/forum.php?mod=viewthread&tid=4249&page=1#pid33626函數


二次開發點亮一個LED詳細過程:http://club.gizwits.com/forum.php?mod=viewthread&tid=4142&page=1#pid16838oop

相關文章
相關標籤/搜索