stm32微控制器怎麼產生脈衝訊號控制步進電動機

時間 2021-08-30 11:14:17

1樓:匿名使用者

簡單點的話,跟51也沒什麼分別吧!要是想stm32的硬體來處理那就看看能不能用pwm功能!!

2樓:

#include "stepmotor.h"

#include

u32 pul_cnt; // tim3脈衝計數

vu32 step_done;

vu32 run_state;

#define run_state_stop 0

#define run_state_acc 1

#define run_state_run 2

#define run_state_dec 3

void stepmotor_ctrl_init(void)

void tim3_configuration(u32 period)

//void motor_run(u32 acc, u32 dec, u32 topspeed, u32 dis)

//步進電機執行引數

//acc -- 加速度,單位: round/min/s

//dec -- 減速度,單位: round/min/s

//topspeed -- 最高速度,單位: round/min

//dis -- 總角位移,單位: round/10000

void motor_run(u32 acc, u32 dec, u32 topspeed, u32 dis)

step_acc = n_motor * ((float)topspeed*topspeed/(acc*120));

step_dec = n_motor * ((float)topspeed*topspeed/(dec*120));

if(step_all > step_acc + step_dec)

step_run = step_all - step_acc - step_dec;

else

step_run = 0;

//tim_cnt = 5.2363 * ft / (sqrt(acc*n_motor/2)); //(ft * sqrt(60)*0.676) / sqrt(acc*n_motor/2);

tim_cnt = 7.7460 * ft / (sqrt(acc*n_motor/2));

tim_rest = 0;

i = 0;

tim3_configuration(tim_cnt);

run_state = run_state_acc;

tim_cmd(tim3,enable);

step_done = 0;

while(step_done==0);

while(i

if(step_run > 0)

}run_state = run_state_dec;

tim_rest = 0;

i=0;

tim_cnt = tim_cnt + (2*tim_cnt+tim_rest) / (4*(step_dec-i)-1);

while(i

run_state = run_state_stop;

tim_cmd(tim3,disable);

}void tim2_irqhandler(void)

void tim3_irqhandler(void)

檔案:stepmotor.h 宣告步進電機控制標頭檔案

#define n_motor 10000 //步進電機細分

#define ft 24000000

void stepmotor_ctrl_init(void);

void motor_run(u32 acc, u32 dec, u32 topspeed, u32 dis);

檔案:main.c 主函式,設定加速度,減速度,最大速度和步數的引數值

#include "main.h"

#define led_set() gpio_setbits(gpiob,gpio_pin_8)

#define led_rst() gpio_resetbits(gpiob,gpio_pin_8)

#define set_dir_cw() gpio_setbits(gpioa,gpio_pin_6)

#define set_dir_ccw() gpio_resetbits(gpioa,gpio_pin_6)

void nvic_configuration(void);

void led_init(void);

void soft_delayms(u16 t);

int main(void)

return 0;

}void nvic_configuration(void)

void led_init(void)

void soft_delayms(u16 t)

}#ifndef _main_h

#define _main_h

#include "stm32f10x.h"

#include "stepmotor.h"

#endif

用stm32產生pwm訊號控制步進電機,頻率和佔空比怎麼弄啊,下面是我寫的程式,怎麼才能輸出波形

3樓:匿名使用者

你這個是bai初始化程式,子程式可用定

du時器

中斷子程zhi序細分spwm,也可dao以pwm中斷計數內細分,定時器細分佔用mcu資源容少,pwm中斷的話佔用資源比較大但精度高。spwm可以用查存放正弦波陣列取得,也可以用內部數學函式產生,或者將正弦函式初始化調到陣列再查表

stm32怎麼用pwm控制步進電機,我知道控制步進電機要有ena、dir、plu三個管腳,但具體怎麼控制呢 20

4樓:科技藝術生活

ena 是開啟 當ena 為高電平時,此時的plu 輸入的訊號 才會有效,,dir 為方向 ,0 1 分別為正,反轉,plu 就是你輸出的脈衝訊號 ,即pwm波,,

寫程式時,你定義以上三個變數,其中plu 輸入一個脈衝,就可以了,,當然脈衝頻率要看你具體的電機 ,,有了脈衝,給驅動器就能控制電機轉動,當然如果沒有驅動器,你可以做一個,用2804 等晶片,,做一個也挺簡單,沒晶片,可以找h橋電路,沒有h橋,自己用三極體 搭一下,也可以。

如何用stm32控制步進電機

5樓:匿名使用者

集體看你使用什麼步進電機驅動晶片了,stm32只負責給驅動晶片傳送訊號,驅動晶片發出驅動訊號給電機。參照驅動晶片手冊,使用對應的方式驅動就行了,有可能是spi,也可能呢是脈衝訊號。

stm32微控制器spi問題,STM32微控制器SPI問題

才慕悅臧優 基本的底層驅動都是有的,如果使用到某個感測器,而網上一時還沒有對應的驅動庫,可以自己根據感測器的手冊編寫對應的驅動 和spi口的cs sck sdi sdo是怎麼對應的 這是你從裝置上的標識吧。一般接線為 左邊主裝置,右邊從裝置 spix nss cs spix sck sck spix...

stm32微控制器怎麼跟altium designer聯絡起來

你的意思是用altium來 通過iar或mdk之類的,甚至altium自身功能來跑 再在altium裡面看效果?我只能說,你想多了。他們之間唯一的聯絡就是altium把stm32當成一個器件來使用,畫出一個pcb板子。 廖骯繕亂 新建原理相簿。選擇選單欄上的 檔案 即可看到,具體操作如下圖所示 2做...

stm32微控制器ucos這個東西要怎麼學啊

有stm32基礎的話不難 推薦看邵貝貝的書 網上有電子版的 想結合實際工程 可以看北航出版社出版的 嵌入式實時作業系統uc os ii經典例項 希望對你有幫助 先把stm32學了,至少知道有些什麼硬體資源,資源是怎麼控制的 上了作業系統,說白了就和硬體層關係就不那麼大了,所有的資源都交給作業系統去管...