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學了,至少知道有些什麼硬體資源,資源是怎麼控制的 上了作業系統,說白了就和硬體層關係就不那麼大了,所有的資源都交給作業系統去管...