chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Art-Pi+TMC2209步進(jìn)電機(jī)細(xì)分控制測試

冬至子 ? 來源:小小李sunny ? 作者:小小李sunny ? 2023-12-11 16:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.背景

前幾天找出個步進(jìn)電機(jī),用L298N驅(qū)動測試了一下,具體見上篇文章簡單的步進(jìn)電機(jī)驅(qū)動調(diào)試。但是L298N無法實現(xiàn)細(xì)分控制,在低速轉(zhuǎn)動時,聲音比較大,且振動厲害,因此想著嘗試一下細(xì)分控制效果。于是花十二塊大洋某寶購買了一塊T“MC2209步進(jìn)電機(jī)超靜音驅(qū)動模塊”來測試一下。

2.硬件及連接

2.1硬件

ART-Pi、TMC2209模塊、DC12V電源。

2.2接口連接

TMC2009模塊的接口連接如下:

1.jpg

3.原理介紹

3.1 TMC2209模塊介紹

TMC2209是TRIAMINIC推出的一款步進(jìn)電機(jī)驅(qū)動模塊。驅(qū)動模塊靜音且高精度,可以實現(xiàn)高達(dá)1/256步細(xì)分控制,實現(xiàn)更平滑靜音的步進(jìn)電機(jī)控制。模塊內(nèi)嵌12.5 MHz的內(nèi)部振蕩器,簡單串行數(shù)據(jù)傳輸?shù)?a href="http://www.brongaenegriffin.com/tags/uart/" target="_blank">UART。性價比較高的步進(jìn)電機(jī)驅(qū)動模塊。

3.2 TMC2209規(guī)格

工作電壓:5.5 – 38V
最大內(nèi)部時鐘頻率:12.5 MHz
每相最大電流:2 A
峰值輸出電流:2.8A
邏輯工作電壓:3/5V

3.3 TMC2209針腳定義

1.jpg

3.4 微步細(xì)分配置

1)硬件細(xì)分配置

TMC2209模塊提供了硬件微步配置,通過MS1和MS2可以實現(xiàn)1/8、1/16、1/32、1/64的細(xì)分控制,具體如下:

1.jpg

2)軟件細(xì)分配置

如果想實現(xiàn)更高的細(xì)分控制,則需要通過USART口進(jìn)行配置,具體如下:

(測試中,測試完完善進(jìn)來)

4.程序代碼

4.1 TMC2209初始化

//硬件微步設(shè)置
void micro_step_set(rt_uint8_t step)
{
switch (step) {
case 8:
rt_pin_write(MS1_PIN, PIN_LOW);
rt_pin_write(MS2_PIN, PIN_LOW);
break;
case 16:
rt_pin_write(MS1_PIN, PIN_HIGH);
rt_pin_write(MS2_PIN, PIN_HIGH);
break;
case 32:
rt_pin_write(MS1_PIN, PIN_HIGH);
rt_pin_write(MS2_PIN, PIN_LOW);
break;
case 64:
rt_pin_write(MS1_PIN, PIN_LOW);
rt_pin_write(MS2_PIN, PIN_HIGH);
break;
default:
break;
}
}
static int tmc2209_init(void)
{
rt_pin_mode(EN_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(MS1_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(MS2_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(STEP_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(DIR_PIN, PIN_MODE_OUTPUT);
rt_pin_write(EN_PIN, PIN_LOW);
micro_step_set(MICRO_STEP);
hwtimer_init();
return 0;
}
INIT_APP_EXPORT(tmc2209_init);

4.2 PWM設(shè)置

這里采用了PWM(ART-Pi默認(rèn)的PWM5通道1)來輸出脈沖信號控制步進(jìn)電機(jī)的轉(zhuǎn)動速度,下面是使用函數(shù):

int pwm_set(rt_uint16_t fre, rt_uint8_t duty_cycle)
{
rt_uint32_t period = 0;
rt_uint32_t pulse = 0;
pwm_dev = (struct rt_device_pwm )rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!n", PWM_DEV_NAME);
return RT_ERROR;
}
period = 1000000000 / fre;
pulse = period * duty_cycle / 100;
/
設(shè)置PWM周期和脈沖寬度默認(rèn)值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能設(shè)備 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
return 0;
}

4.3 定時器配置

這里采用硬件定時器(ART-Pi默認(rèn)TIM13,PS:settings雖然可以直接配置,但是cubemx默認(rèn)沒配置TIM13,所以直接使用還是不行,需要cubemx配置后才能使用)來控制PWM輸出指定的脈沖數(shù)量,通過計算步進(jìn)電機(jī)轉(zhuǎn)動的角度所需要的脈沖個數(shù),以及轉(zhuǎn)動速度計算的脈沖時間,計算出定時器的計時時間,超時后停止PWM輸出,并禁止TMC2209(不禁止的話電機(jī)會發(fā)熱)。

#define HWTIMER_DEV_NAME "timer13" /* 定時器名稱 /
/
定時器超時回調(diào)函數(shù) /
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);//停止PWM輸出
rt_pin_write(EN_PIN, PIN_HIGH);//禁止TMC2209
return 0;
}
int hwtimer_init(void)
{
rt_err_t ret = RT_EOK;
rt_hwtimer_mode_t mode; /
定時器模式 /
rt_uint32_t freq = 1000000; /
計數(shù)頻率 /
/
查找定時器設(shè)備 /
hw_dev = rt_device_find(HWTIMER_DEV_NAME);
if (hw_dev == RT_NULL)
{
rt_kprintf("hwtimer sample run failed! can't find %s device!n", HWTIMER_DEV_NAME);
return RT_ERROR;
}
/
以讀寫方式打開設(shè)備 /
ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
if (ret != RT_EOK)
{
rt_kprintf("open %s device failed!n", HWTIMER_DEV_NAME);
return ret;
}
/
設(shè)置超時回調(diào)函數(shù) /
rt_device_set_rx_indicate(hw_dev, timeout_cb);
/
設(shè)置計數(shù)頻率(若未設(shè)置該項,默認(rèn)為1Mhz 或 支持的最小計數(shù)頻率) /
rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
/
設(shè)置模式為周期性定時器(若未設(shè)置,默認(rèn)是HWTIMER_MODE_ONESHOT)*/
mode = HWTIMER_MODE_ONESHOT;
ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
if (ret != RT_EOK)
{
rt_kprintf("set mode failed! ret is :%dn", ret);
return ret;
}
return ret;
}
int hwtimer_start(rt_hwtimerval_t timeout)
{
if (rt_device_write(hw_dev, 0, &timeout, sizeof(timeout)) != sizeof(timeout))
{
rt_kprintf("set timeout value failedn");
return RT_ERROR;
}
return RT_EOK;
}

4.4 步進(jìn)電機(jī)控制

這里采用了兩種方式來輸出脈沖及數(shù)量,一種是通過延時和翻轉(zhuǎn)DIR管腳電平實現(xiàn),一種是通過定時器和PWM來實現(xiàn)。

/*
dir:電機(jī)轉(zhuǎn)動方向,0 正轉(zhuǎn);1 反轉(zhuǎn)
speed:電機(jī)轉(zhuǎn)動速度:0-300r/min,注意不同的電機(jī)最高轉(zhuǎn)速不一樣
angle:電機(jī)轉(zhuǎn)動角度:°
/
void turn_control(rt_uint8_t dir, rt_uint16_t speed, float_t angle)
{
rt_uint32_t pulse_num = 0;//脈沖數(shù)量
rt_uint16_t delay_time = 0;
rt_uint16_t pulse_fre = 0;//脈沖頻率
rt_hwtimerval_t timeout_value;
float_t temp = 0.0;
temp = (angle / (360.0 / 200.0 / MICRO_STEP));
float_t t = 1000000 / ((360.0 / (360.0 / 200.0 / MICRO_STEP)) / 60.0 * speed);
pulse_num = temp;
delay_time = t / 2;
pulse_fre = 1000000 / t;
timeout_value.sec = 0;
timeout_value.usec = t * pulse_num;
//rt_kprintf("%dn", pulse_num);
//rt_kprintf("%dn", delay_time);
//rt_kprintf("%dn", pulse_fre);
//rt_kprintf("%dn", timeout_value.usec);
rt_pin_write(EN_PIN, PIN_LOW);
//設(shè)置電機(jī)轉(zhuǎn)動方向
if(dir == 0)
rt_pin_write(DIR_PIN, PIN_HIGH);
if(dir == 1)
rt_pin_write(DIR_PIN, PIN_LOW);
pwm_set(pulse_fre, 50);//設(shè)置PWM頻率并輸出
hwtimer_start(timeout_value);//設(shè)置定時時間并啟動定時器
/
for (int i = 0; i < pulse_num; ++i) {
rt_pin_write(STEP_PIN, PIN_LOW);
//rt_thread_mdelay(speed);
rt_hw_us_delay(delay_time);
rt_pin_write(STEP_PIN, PIN_HIGH);
//rt_thread_mdelay(speed);
rt_hw_us_delay(delay_time);
}
rt_pin_write(EN_PIN, PIN_HIGH);*/
}

4.5 MSH控制臺

這里把電機(jī)控制加入MSH指令,可以通過控制臺來手動實現(xiàn)電機(jī)任意控制測試:

static void step_motor_turn(int argc, char**argv)
{
if (argc < 3)
{
rt_kprintf("Please input'step_motor_turn direction speed angle'n");
return;
}
if (!rt_strcmp(argv[1], "forward"))
{
turn_control(0, atof(argv[2]), atof(argv[3]));
}
else if (!rt_strcmp(argv[1], "reverse"))
{
turn_control(1, atoi(argv[2]), atof(argv[3]));
}
else
{
rt_kprintf("Please input'step_motor_turn direction speed angle'n");
}
}
MSH_CMD_EXPORT(step_motor_turn, step_motor_turn );

5.總結(jié)

電機(jī)的轉(zhuǎn)動確實非常安靜,完全聽不到聲音,在低速控制時轉(zhuǎn)動也比較平滑,完全感受不到振動。性價比不錯,有需要做步進(jìn)電機(jī)控制的小伙伴可以參考使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 振蕩器
    +關(guān)注

    關(guān)注

    28

    文章

    4156

    瀏覽量

    142328
  • 步進(jìn)電機(jī)
    +關(guān)注

    關(guān)注

    152

    文章

    3216

    瀏覽量

    151566
  • L298N驅(qū)動
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    872
  • TMC2209
    +關(guān)注

    關(guān)注

    1

    文章

    6

    瀏覽量

    6337
  • ART-Pi
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    1762
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    TMC4210步進(jìn)電機(jī)控制器具有哪些特性?

    TMC4210步進(jìn)電機(jī)控制器具有哪些特性?
    發(fā)表于 10-12 12:10

    如何去實現(xiàn)TMC5160步進(jìn)電機(jī)的簡單轉(zhuǎn)動呢

    TMC5160步進(jìn)電機(jī)有哪幾種模式呢?如何去實現(xiàn)TMC5160步進(jìn)電機(jī)的簡單轉(zhuǎn)動呢?
    發(fā)表于 12-20 07:48

    如何實現(xiàn)TMC260/TMC2660/TMC262步進(jìn)電機(jī)驅(qū)動?

    spi配置參數(shù)有哪些?如何實現(xiàn)TMC260/TMC2660/TMC262步進(jìn)電機(jī)驅(qū)動?
    發(fā)表于 12-21 07:32

    TMC2208/2209的特性是什么

    描述這是一個四層板的TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動,用于3D打印機(jī)或?qū)懽謾C(jī)。TMC2208/
    發(fā)表于 02-16 07:34

    ADI Trinamic新品重磅來襲| TMC2240高性能電機(jī)驅(qū)動芯片=TMC2209TMC2130完全升級版

    TMC2130與業(yè)界標(biāo)準(zhǔn)的16細(xì)分相比,可提供高達(dá)256細(xì)分,從而提供極其平穩(wěn)、精密的運(yùn)動控制,實現(xiàn)高精度定位和最小諧振,同時具有最高
    發(fā)表于 10-15 11:53

    在RT-Thread系統(tǒng)中使用TMC5160步進(jìn)電機(jī)驅(qū)動

    我參加了ART-Pi擴(kuò)展板設(shè)計的活動,做了一個TMC5160步進(jìn)電機(jī)驅(qū)動的擴(kuò)展板,并PR了一個TMC5160驅(qū)動的庫,簡要介紹一下這個庫的使
    發(fā)表于 10-24 16:34

    STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動芯片代碼

    STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動芯片的代碼
    發(fā)表于 09-22 07:31

    使用STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動芯片的代碼和電路圖及工程文件

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STM32控制TMC5160步進(jìn)電機(jī)控制驅(qū)動芯片的代碼和電路圖及工程文件。
    發(fā)表于 10-08 08:00 ?654次下載
    使用STM32<b class='flag-5'>控制</b><b class='flag-5'>TMC</b>5160<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>控制</b>驅(qū)動芯片的代碼和電路圖及工程文件

    四層板TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動

    描述這是一個四層板的TMC2208/TMC2209步進(jìn)電機(jī)驅(qū)動,用于3D打印機(jī)或?qū)懽謾C(jī)。TMC2208/
    發(fā)表于 12-17 18:19 ?52次下載
    四層板<b class='flag-5'>TMC</b>2208/<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動

    TRINAMIC超靜音的TMC2209步進(jìn)驅(qū)動器介紹

    TRINAMIC超靜音的TMC2209步進(jìn)驅(qū)動器IC,也可作為SilentStepStick使用。用于高達(dá)2A RMS和29V的兩相步進(jìn)電機(jī)電機(jī)
    發(fā)表于 04-28 10:05 ?5486次閱讀
    TRINAMIC超靜音的<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b>驅(qū)動器介紹

    基于Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動板

    電子發(fā)燒友網(wǎng)站提供《基于Trinamic TMC2209步進(jìn)電機(jī)驅(qū)動板.zip》資料免費(fèi)下載
    發(fā)表于 08-24 09:47 ?29次下載
    基于Trinamic <b class='flag-5'>TMC2209</b>的<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動板

    關(guān)于TMC2209步進(jìn)電機(jī)驅(qū)動模塊–SilentStepStick的知識概況

    雙極步進(jìn)電機(jī)。最重要的是,TMC2209 提供了一個簡單的 UART接口,可以在任何具有 UART端口的微控制器的幫助下進(jìn)行調(diào)整和控制。
    發(fā)表于 05-16 14:45 ?17次下載
    關(guān)于<b class='flag-5'>TMC2209</b><b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動模塊–SilentStepStick的知識概況

    基于STM32F405RGT6的TMC2660步進(jìn)電機(jī)驅(qū)動器,附帶原理圖+PCB

    驅(qū)動電路主要包括以下部分,信號接口電路,邏輯控制電路,功率開關(guān)電路,保護(hù)電路。TMC2660是步進(jìn)電機(jī)驅(qū)動芯片,集成了先進(jìn)的電流控制算法、微
    的頭像 發(fā)表于 12-14 19:24 ?3492次閱讀
    基于STM32F405RGT6的<b class='flag-5'>TMC</b>2660<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>驅(qū)動器,附帶原理圖+PCB

    關(guān)于TMC2208與TMC2209的區(qū)別及基于STM32F103控制TMC2209模塊驅(qū)動2相4線步進(jìn)電機(jī)

    技術(shù),TMC2208提供2 - 32微選擇,TMC2209支持8 - 64微選擇。文章最后提供了STM32F103控制
    的頭像 發(fā)表于 10-09 17:19 ?880次閱讀
    關(guān)于<b class='flag-5'>TMC</b>2208與<b class='flag-5'>TMC2209</b>的區(qū)別及基于STM32F103<b class='flag-5'>控制</b><b class='flag-5'>TMC2209</b>模塊驅(qū)動2相4線<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>

    基于UART通訊控制TMC2208/2209模塊驅(qū)動兩相四線步進(jìn)電機(jī)

    本文將介紹如何通過UART串口通信控制TMC2208/2209步進(jìn)電機(jī)驅(qū)動模塊驅(qū)動42步進(jìn)
    的頭像 發(fā)表于 11-10 19:33 ?521次閱讀
    基于UART通訊<b class='flag-5'>控制</b><b class='flag-5'>TMC</b>2208/<b class='flag-5'>2209</b>模塊驅(qū)動兩相四線<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>